Visual PHP для Windows

На сегодняшний день язык PHP широко распространён, он прост в освоении и понимании, и наверное поэтому он так популярен у начинающих программистов. Без знаний PHP не поправить блок голосования на сайте, не отредактировать PHP шаблон, не вставить рекламный баннер. Многие идут дальше и изучают язык более углубленно, ведь это не только интересно, но и приносит стабильный доход, благо разнообразных предложений для PHP программистов всегда в избытке.

Но что делать, если хочется чего-то большего? Если надоело писать однотипные классы для онлайн-казино, ковыряться в Joomla/Drupal/PHPBB очередного заказчика?

Думаю, что многих посещала мысль начать писать Windows программы на любимом языке PHP, но дальше поиска по интернету и поверхностного изучения таких библиотек как PHP-QT и PHP-GTK дело, как правило, не доходит. Почему? Все ответы схожи — запутанно, сложно, ненаглядно, непонятно и т.д. Но сегодня уже есть качественно новая и перспективная среда для визуальной разработки программ на PHP под Windows и имя ей — PHP Devel Studio (сокр. DevelStudio).

Что же представляет собой DevelStudio?


image

Это удобная и понятная визуальная среда программирования, которая позволяет создавать полноценные программы на языке PHP с поддержкой GUI. Теперь, для создания программ под Windows достаточно знать самый популярный язык программирования — PHP.

В этой статье я не буду описывать кнопочки и рюшечки этой среды разработки, не буду говорить о неких абстрактных возможностях и не буду устраивать детский сад с написанием «Hello world».
Мы поверхностно рассмотрим процесс написания полноценной программы под Windows и остановим своё внимание только на оригинальных и нестандартных решениях, которые определённо будут интересны всем.

Предыстория


Итак, в один прекрасный вечер я уже в который раз снова посетил сайт проекта «Denwer» с целью проверить, не вышло ли там обновление. К моему разочарованию ничего нового там не оказалось, по-прежнему я обнаружил лишь новую ругань в адрес разработчиков с обвинениями в выклянчивании пожертвований и абсолютном бездействии.

Меня не покидало желание отказаться от Denwer и написать свою, действителньо удобную и полезную программу для управления локальным веб-сервером. После недолгих поисков моё внимание привлекла среда разработки «DevelStudio». Она оказалось предельно удобной, понятной и самое удивительное — она открыла мне дорогу в мир Windows программ. Поразмыслив над логикой управления веб-сервером я приступил к написанию «Open Server».

Знакомство с DevelStudio


Первые несколько дней были потрачены на изучение среды и написание простейших программ. Нашлось несколько багов в работе самой среды разработки, они будут описаны в конце статьи. Так же были установлены два полезных дополнения (библиотека примеров + каталог классов и функций) и один неофициальный патч, дающий возможность сжатия программы UPX упаковщиком в момент компиляции.

Следует отметить, что у DevelStudio достаточное хорошее комьюнити, поэтому всегда есть возможность задать вопрос или получить совет у опытных пользователей среды, вплоть до самого разработчика.

DevelStudio — это этакая смесь из Delphi и PHP, щедро приправленная компонентами этих самых Delphi и PHP. Чего стоит один только Alphaskin, который я использовал самым непосредственным образом при написании программы. Но обо всём по порядку…

Написание программы


При создании проекта мы получаем пустую форму. Она является основной и именно в этой форме я не создавал никаких элементов управления, в ней мною были добавлены управляющие функции, а сама форма была сделана скрытой. Чтобы при запуске вашей программы не отображалось никаких форм в свойствах проекта нужно установить режим «Тихий». Затем были созданы следующие формы: Настройки, Просмотр логов, О программе, Ошибка и Первый запуск. За короткий срок во все формы были добавлены необходимые управляющие элементы, поля ввода, иконки и прочее. Всё это было сделано без единой строчки кода. Вот она мощь визуальной среды!

На следующей иллюстрации мы видим форму просмотра логов, а так же специальные вставки-шаблоны, они используются для организации мультиязычности. Замечу лишь, что для смены языка потребуется перезапуск программы.

image

Далее я начал добавлять первый PHP код. Как я уже писал, мы остановимся только на самых интересных моментах.

1. Стартовая функция (выполняется при загрузке программы)

Вот так получилось реализовать проверку на то, не была ли уже запущена программа:

$output = shell_exec('tasklist /nh /fi "Imagename eq Open Server.exe"'); // получение списка процессов
$ret = iconv('CP866','CP1251',$output);
if (substr_count($ret,'Open Server.exe')>1) {
    c('trayIcon1')->enabled = false; // отключаем трей-меню
    LoadForm(c('message'), LD_NONE); // загружаем форму с сообщением об ошибке
}else{ ... }

Вот так, например, добавляются элементы в выпадающее меню:

$mm = new TMenuItem;
$mm->caption = t("menu_9"); // t - это функция мультиязычности, здесь будет написано Выход
$mm->loadPicture("server/system/data/exit.bmp"); // подгружаем иконку
$mm->onClick = exitfunc; // функция выполняющая остановку сервера / выход из программы

А вот так удалось решить задачу с определением битности Windows и проверке на наличие установленных компонентов Microsoft Redistributable C++. Битый час я не мог понять, почему в 32 и 64 битных версиях Windows ключи реестра имеют разное значение, а то они и вовсе не там, где предполагалось.

if(getenv("PROCESSOR_ARCHITEW6432")=="AMD64" || getenv("PROCESSOR_ARCHITECTURE")=="AMD64"){
$output = shell_exec("REG QUERY HKLM\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"); // запрос в реестр
$ret = iconv('CP866','CP1251',$output);
if (substr_count($ret,'{86CE85E6-DBAC-3FFD-B977-E4B79F83C909}')<1 || substr_count($ret,'{a0fe116e-9a8a-466f-aee0-625cb7c207e3}')<1) {
    c('trayIcon1')->enabled = false;
    LoadForm(c('proc'), LD_NONE); // загрузка формы с предложением установить недостающие компоненты
}
}else{
$output = shell_exec("REG QUERY HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\");
$ret = iconv('CP866','CP1251',$output);
if (substr_count($ret,'{86CE85E6-DBAC-3FFD-B977-E4B79F83C909}')<1 || substr_count($ret,'{a0fe116e-9a8a-466f-aee0-625cb7c207e3}')<1 ) {
    c('trayIcon1')->enabled = false;
    LoadForm(c('proc'), LD_NONE); // загрузка формы с предложением установить недостающие компоненты
}
}

2. Форма просмотра логов

Здесь всё было предельно просто — чтение лог-файла и вывод содержимого в форму, но пришлось пойти на хитрость, чтобы сделать автоматическую установку курсора в конец списка (возможности среды этого не позволяют).

image

Вот как изначально я обрабатывал переключение табов и установку курсора в конец лога:

$WshShell = new COM("WScript.Shell");
if (c("pages1")->pageIndex == 0)     c("memo1")->setFocus(); // установка фокуса на текстовое поле
elseif (c("pages1")->pageIndex == 1) c("memo2")->setFocus();
...
elseif (c("pages1")->pageIndex == 6) c("memo7")->setFocus();
$WshShell->SendKeys("^{END}"); // нажатие клавиши END чтобы попасть в конец
$WshShell->SendKeys("{HOME}"); // Нажатие клавиши HOME чтобы вернуться в начало последней строки

Как мы видим, были использованы компоненты COM, но по совету одного доброго человека этот код был превращён в следующий:

$ppindex = c("logs->pages1")->pageIndex;
$obmemo = c("logs->memo".($ppindex+1)); // определяем активный таб
$cnlines = $obmemo->items->lines; // получаем содержимое
$seltn  = strlen( $obmemo->text ) - strlen($cnlines[ count($cnlines)-1 ]); // определение последней строки
$obmemo->setFocus();
$obmemo->selStart = $seltn; // установка курсора в начало строки
$obmemo->selLength = 0; // установка длины выделения

3. Форма настроек

image

Чтение и запись настроек в DevelStudio происходят достаточно просто и очевидно:

ini :: open("server/system/config.ini"); // открываем файл настроек
ini :: read("main", "lang", $lang); // читаем параметр
ini :: write("main", "lang", c("settings->combobox1")->inText); // сохраняем параметр

Но кое с чем пришлось повозиться — это получение списка свободных дисков в системе.
Вот что сперва получилось, это довольно интересно:

$fso = new COM("Scripting.FileSystemObject");
$disks = array();
foreach($fso->Drives as $disk) $disks[] = $disk->DriveLetter; // получаем массив дисков

$diskarr = array("D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
$diskar = array();
foreach($diskarr as $fffile) if($fffile == $os_vdisk){$diskar[] = $fffile;}else {if(!in_array($fffile,$disks)) $diskar[] = $fffile;} // если диск существует, то исключаем его из списка
c("combobox2")->text = implode("\n",$diskar);
$icounter = 0;
foreach($diskar as $fffile) {if($fffile == $os_vdisk) c("combobox2")->itemIndex = $icounter; $icounter++;}

Здесь снова был использован компонент COM и опять же не обошлось без доброго совета со стороны.
Я подключил DLL библиотеку phposinfo.dll и итоговый код получился таким:

$dliters = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
$diskar = array();
$icounter = 0;
$icount = true;
foreach ($dliters as $dliters) // перебираем массив дисков
{
  if ($dliters == $os_vdisk)
  {
    $diskar[] = $dliters;
    $icount = false;
  }
  else
  {
    if (osinfo_drivetype($dliters . ":") == 1)  // функция из phposinfo.dll для получения кода состояния диска
    {
      $diskar[] = $dliters; // если ответ единица добавляем букву диска в список свободных
      if ($icount)
        $icounter++;
    }
  }
}
c("combobox2")->text = implode("\n", $diskar); // добавляем массив дисков в выпадающий список
c("combobox2")->itemIndex = $icounter; // указываем выбранный пункт списка

4. Функция запуска локального сервера

Это самая объёмная функция, нужно было сделать перезапись конфигурации модулей по шаблонам, запустить виртуальный диск, запустить Apache, Mysql, FTP сервер и написать ещё много всего интересного, однако и тут DevelStudio и форум поддержки среды позволили мне реализовать всё задуманное. Далее несколько интересных моментов…

Были проблемы с определением системного диска и получения пути до HOSTS файла, в итоге всё оказалось легко и просто:

$hostsfile = winLocalPath(CSIDL_WINDOWS) . "/System32/drivers/etc/hosts";

Запускаем виртуальный диск (здесь используется системная утилита subst.exe, а так же получение локальной директории и пути до системной папки Windows):

Shell_Execute(0, 'open', 'subst.exe', $os_vdisk . ': "' . substr(realpath('./'), 0, strlen(realpath('./')) - 1) . '"', strtr(winLocalPath(CSIDL_WINDOWS).'/System32/','/','\\'), 0);

Запуск Apache (функция Shell_Execute позволяет запустить стороннюю программу в фоне и без ожидания ответа):

Shell_Execute(0, 'open', 'os-httpd.exe', '', $realospath . '\\server\\http\\' . $os_httpdriver . '\\bin\\', $os_window);

Хотелось бы особо отметить, что один из багов DevelStudio — зависания при использовании фоновых процессов в Windows XP. Из-за этого пришлось сделать все процессы не фоновыми и, как следствие, отключать трей-меню на моменты запуска/остановки сервера. Если этого не сделать может показаться что программа зависла, ибо в моменты выполнения real-time процессов элементы управления ни на что не реагируют.

Для создания красивого и одинаково выглядящего во всех версиях Windows трей-меню был использован компонент Skin, а так же один из скинов AlphaSkin, который был мною предварительно отредактирован.

image

После компиляции на выходе у нас получается обычный исполняемый EXE файл, т.е. собственно сама наша программа. PHP код содержится там в бинарном скомпилированном виде, его дешифровка невозможна, что в принципе позволяет уже сейчас писать платный коммерческий софт. Впрочем преобразование PHP кода в байт-код (используется расширение BCompiler) можно отключить в настройках DevelStudio.

Как видите, с помощью PHP и DevelStudio мне удалось реализовать все поставленные перед собой задачи. Не обошлось без вызова системных утилит и встроенных функций среды разработки. Получилась полноценная Windows программа написанная на языке PHP, точнее даже комплекс программ для организации веб-сервера на локальном компьютере, сейчас проект Open Server живёт и успешно развивается.

Настоящее и будущее DevelStudio


Сейчас DevelStudio базируется на движке PHP 5-ой версии, однако автор ведёт усиленную работу над созданием особой ветки улучшенного PHP — так называемого движка Orion, который будет использоваться в DevelStudio уже со следующей версии. С одной стороны это пугает тем, что больше никаких обновлений от оригинального PHP в самой среде не появиться, кроме того что уже есть в той версии PHP, которая выбрана для разработки Orion. С другой стороны хочется надеяться, что движок Orion преподнесёт нам не мало новых вкусностей, а обещают там очень многое:

image

Отечественные разработчики Devel Studio, сообщают, что их новая среда разработки уже скоро начнёт работать с собственным скриптовым языком программирования Orion, синтаксис которого будет сочетать популярный PHP + новые конструкции языка.
Также сообщается то, что для Devel Studio почти готов абстрактный игровой движок, который основывается на ZenGL и в него будет подключен Orion. GameAbstract Framework — открытый игровой фреймворк быстрой и удобной разработки 2D-игр на Pascal (Delphi/FreePascal), Orion и на прочих ЯП. Абстракция позволит разработчикам заниматься именно логикой игры, взяв на себя всю остальную рутину.
GameAbstract позволит создавать игры на популярные платформы: Windows, Linux, MacOS (а в будущем и iPhone/iPad). Разработчик будет волен выбрать графический интерфейс: OpenGL, DirectX или OpenGL ES для мобильных систем. Физика будет реализована на основе технологии Chipmunk.

По материалам сайта gcup.ru от 2011-05-23


Заключение


В целом DevelStudio оставила после себя хорошее впечатление, далее мои скромные выводы.

Баги:
— зависание php программы при использовании фоновых процессов в WinXP;
— фоновые процессы не убиваются после отработки (занимают память);
— изменение размеров не вручную, а стрелками больше/меньше приводит к краху;
— нельзя использовать режим отладки и вывод ошибок, иначе изменения не сохраняются;
— без патча не работает упаковщик UPX;

Минусы:
— наличие некоторых багов;
— программы получаются довольно объёмные, но при использовании UPX разница не так велика;
— больший объём занимаемой оперативной памяти, чем аналог на Delphi или С++;
— крайне плохая официальная документация, скудная и устаревшая;

Плюсы:
— простота в освоении и удобство разработки;
— хорошее комьюнити;
— широкие возможности по использованию сторонних библиотек;
— высокая скорость разработки программ;
— наслаждение от написания Windows программ на языке PHP ;-)

На мой взгяд, визуальная среда разработки DevelStudio — это очередной шаг к размытию границ между выбором языка разработки программ под Windows. Пишите полезные программы, развивайтесь и не бойтесь экспериментировать!

Полезные ссылки:
Среда разработки PHP Devel Studio
Локальный веб-сервер Open Server

UP: Откуда в Вас столько ненависти? Это всего лишь очередной способ использования языка PHP. Довольно интересная среда разработки, хотя бы в плане саморазвития. Никто не говорит что нужно бросать всё и садиться писать Windows программы на PHP.

Просто задайте себе вопрос — если бы вы узнали, что ваша машина может не только ездить, но и летать, разве вам это было бы не интересно? Ах да, ведь для полётов есть самолеты, не так ли...
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 106
  • +4
    По моему плюсы сомнительны.

    "— простота в освоении и удобство разработки;"
    "— высокая скорость разработки программ;"
    Возьмем к примеру ваш «OpenServer». Реализовать его на C# для начинающего было бы гораздо проще, да к тому же Visual Studio одна из самых лучших IDE. А так же как вы написали «крайне плохая официальная документация, скудная и устаревшая;» что не очень то способствует освоению.
    А по поводу скорости разработки, для PHP программиста конечно будет быстрее сделать десктоп приложение на PHP, чем изучать другой язык.

    "— широкие возможности по использованию сторонних библиотек;"
    Собственно как и у других языков.

    В итоге выходит, что инструмент используется не по назначению.

    P.S. А вместо Denwer не пробовали использовать XAMPP?

    • +3
      Перепробовал практически все: XAMPP, Vertrigo, Denwer, AppServ и т.д. Ни одно из этих решений не считаю сопоставимым по качеству работы и удобству использования с Open Server.

      OS писался «для себя и с любовью», в нём есть много чего такого, чего вообще нет в других подобных сборках. Звучит нагло, но OS считаю лучшей в мире сборкой под Windows для фрилансера. Никому своё мнение навязывать не хочу. Кому интересно — сборку можно скачать на сайте.
      • 0
        М … мне кажеться что проще и быстрее у себя поднять полноценный сервер в нужной вам конфигурации, чем маяться «сборками». Впрочем это холиварная тема. Каждый останеться при своем.
        • 0
          Холиварить особо не о чем. Тема давно избита. Если нужен специфический сервер с особыми дополнениями или версиями ПО и планируется использование только на одном компьютере, то да, можно отдельно скачать и установить каждый компонент настроив под себя.

          Если же необходима мобильность — работа-дом-клиенты-шеф, или если необходимо срочно развернуть локальный веб-сервер, то как же тут обойтись без подобных программных комплексов. Если необходима особая конфигурация, то разобравшись в Open Server можно самому добавить какие угодно модули. Для решения проблем у Open Server и форум есть.

          Сомневаюсь что блондинка-верстальщица будет качать горы софта и ставить его отдельно, когда можно скачать уже готовый мобильный вариант и в гораздо меньшем размере.
          • +1
            ИМХО, винда вообще неудобная платформа для LAMP разработчика, гораздо легче убунту поставить, чем мучиться со сборками. Думаю что любую блондинку-верстальщицу можно обучить строчке apt-get install lamp и никаких проблем.
            • +2
              Для LAMP конечно
              L — это Linux.

              Винда тут как бы и не при чем
              • 0
                Довольно многие разрабатывают под виндой для LAMP — есть сложности, но непреодолимые — популярных ос-зависимых библиотек и средств языка немного. А чаще всего это даже не сложности, а неудобства, которые просто не почувствуешь, пока не войдешь во вкус использования линукса для разработки (возможно с фряхой и макосью аналогично, различий между ними тремя должно быть меньше, чем у любой из них с виндой).
                  • 0
                    Единственно значимый для меня тезис:
                    The hardware is overpriced
                    Всё остальное для разработки типичных веб приложений под LAMP/R(perl, php, python, ruby — в алфавитном порядке), имхо, имеет мало значения. Emacs и vim, афаик, есть под макось, равно как NetBeans и Eclipse (ими, собственно, и пользуюсь — достойную замену из вима не смог сделать, в емакс вообще не врубился, хотя не очень и старался).
                    • 0
                      Я, собственно, как пример точки зрения, а не как истину :)
                      • 0
                        Ну, а я, собственно, что если мне кто подарит аймак, то я попытаюсь разрабатывать под макосью, установив привычный по линуксу софт. А если подарят комп с предустановленной виндой, то первым делом (после запуска бенчмарков) поставляю на него убунту (а может федору).
                        • 0
                          Мне вот никто ничего не дарит, сам себе все что нужно покупаю :)
                          • 0
                            Я тоже сам покупаю, потому не куплю ни аймак, ни писи с предустановленной виндой :)
            • 0
              Вот прямо про XAMPP написано
              А блондинка-верстальщица — это интересный персонаж :)
              • 0
                А блондинка-WAMP куда интереснее…
      • +4
        Платформа .NET поддерживает кучу языков, есть куча сторонних, а учитывая нынешний WPF, разработка вообще халявная. Так, что плюсов при использовании PHP я не вижу, разве что надо что-то быстро сделать, а знаний .NET нет и времени, чтобы разобраться нет (хотя это довольно просто, учитывая размеры MSDN, а так же кучу сайтов, где можно найти примеры на все случаи жизни).
        • 0
          Поверьте, говорю как человек хорошо знающий пхп и плохо знающий C#, глядя в код описанный в топике, и глядя в коментарии автора топика к тому коду, я лучше поищу литературы по C# при возникноверии затруднений, нежели буду пользоваться этой штуковиной =)
        • +1
          Скажите, а что на выходе получается? Набор пхп скриптов и какой-то рантайм(сервер, что-то еще) для их работы в Windows?
          • +1
            Извините, действительно как-то совсем упустил момент истины, а точнее того, что же получается в итоге. Добавил соответствующий абзац с пояснениями в топик.
        • –2
          Зачем? Веб-программисты — это веб-программисты, системщики — системщики. Если кто-то и является универсалом, он должен знать как минимум 2 языка/технологии (для веба и для компьютера).
          • +2
            Затем чтобы чисто для себя написать какой-нить мониторинг каких нибудь удаленных скриптов и процессов))

            Offtop: Из Оперы комменты не сабмитятся %)
          • +1
            Хотел было написать, что в отличии от Visual Studio это бесплатно, но заметил, что скоро у них появится версия для «профессионалов». Так что придеться промолчать.
            Скачать и попробовать поленился, если честно. Но если студия у них такая же как верстка сайта, то к черту такую студию.
            • +2
              Почему-то мне кажется, что даже бесплатная Visual Studio Express Edition будет существенно сильнее этой «студии».
            • +12
              Меня сейчас будут бить ногами и руками, но PHP это прежде всего язык для web-a. Ну нужно на нём писать приложения под windows, затраченные на это усилия не стоят того. Для этого лучше подходят JAVA/C#/C++ и так далее.
              «Если надоело писать однотипные классы для онлайн-казино, ковыряться в Joomla/Drupal/PHPBB очередного заказчика» — устройтесь в большую компанию/найдите стартап/поучаствуйте в OpenSource проекте/напишите плагин для любимого фреймворка или СМS — пользы и профессионального роста от этого будет в разы больше
              • –5
                PHP: Hypertext Preprocessor
                Гипертекствоый протокол — это HTTP. Зачем использовать PHP где-то другом месте?

                Единственное, для чего еще юзаю PHP — для небольших скриптов в Linux (каюсь, bash не знаю), но использовать там какое-то сомнительное GUI под windows…
                • +1
                  Единственное, для чего еще юзаю PHP — для небольших скриптов в Linux (каюсь, bash не знаю)
                  Для этого лучше вообще Perl или Python. Но сам юзаю тоже PHP по той же причине.
                  • +5
                    А, я использую рнр для запуска скриптов из командной строки в Windows
                    (в связке FAR-Manager с BAT-файлами) по другой простой причине: простота развертывания.
                    Достаточно в корень диска с: бросить папку php5 c парой файлов:
                    php.exe
                    php5ts.dll


                    Ну, еще можно ручками написать пару строчек в файл php.ini:
                    memory_limit = -1  ; Maximum amount of memory (more than 128MB)
                    date.timezone = Europe/Moscow
                    ; date.timezone = Europe/Kiev
                    

                    Можно, до кучи, туда же скопировать еще три файлика:
                    libeay32.dll
                    ssleay32.dll
                    php_openssl.dll


                    Ну, а для обработки графики еще файлик:
                    php_gd2.dll

                    А, также, на всякий случай, (чтобы не закидали гнилыми помидорами за этот коммент), добавить:
                    php5apache2_2.dll

                    В случае же с перлами и питонами, гораздо больше файликов придется за собой таскать.
                    • +2
                      Я не стал морочиться с вырезанием не нужный файлов. Кинул полную версию PHP, добавил пару модулей. Теперь всю рутину делаю в консоли — проверка свободного домена, курс валют, проверка работоспособности пачки VPS, отчёты, бекапы. Экономии времени уйма — запустил и пошел отдыхать)
                      • +1
                        В моем случае речь шла о простом развертывании на вражеской территории чужом компе.
                        Такие программы, как FAR, Winrar, PHP устанавливаются простым копированием десятка файлов.
                        Их можно даже и не копировать, а просто, запускать с флешки (или с компакт-диска)
                        • +3
                          До появления рнр винды всегда таскал с собой загрузочную дискету с пятью файлами:
                          vc.com
                          turbo.exe
                          turbo.tpl
                          turbo.tph

                          и turbo.tp
                • 0
                  Как говорит Макконнелл: программировать нужно не на языке, а с использованием языка. Разные языки заточены под разные цели. И, думается мне, PHP вовсе не десктопный язык.
                  • +1
                    Если задачи для десктоп приложения ближе к «сетевым», то можно и php прикрутить. Особенно, если надо быстро, а времени изучать что-то нет.
                    Хотя Си все равно лучше :)
                    • +1
                      Я в свое время писал на ЧИСТОМ РНР простенькую программку для Windows-7 по работе с сырыми сокетами, которая могла формировать произвольные IP-пакеты и отправлять их в сеть по GPRS, причем версия операционки — «Начальная» (Starter) с первым сервис-паком, и самое вкусное:
                      для запуска этой программки НЕ ТРЕБОВАЛОСЬ прав администратора!

                      Программка получилась настолько простенькой и прозрачненькой (по сравнению с возможной реализацией аналогичного функционала на языках си или дельфи), и самое главное, не требовала необходимости таскать за собой кучу хакерских DLL.

                      А, самое главное: НИКАКИХ ПРОБЛЕМ с антивирусами не возникало!
                      • 0
                        Охотно верю.
                        Я попробовал «php для windows» для более экзотического применения. Появилиась задача запускать 1С и получать результат, который нужно было отправлять на сервер, и кое-что получать с сервера. Решил попробовать php, а вдруг получится. Получилось быстро и просто, основные проблемы были с 1С :) и с иконкой в трее. Сама php-программа делается достаточно просто. Проще чем на Си.
                        • 0
                          Вообще довольно часто пользовался php для автоматизации рутинных действий под Win95/NT4-WinXP: возможностей больше, чем у «command.com» и нет необходимости ставить дополнительный софт (от трансляторов до ИДЕ), писать излишний код (хотя бы объявления переменных), изучать новый язык и, возможно, перекомпилировать и пересобирать проект после изменения одного символа.
                  • –9
                    докатились
                    • –3
                      Представил игру на PHP… Сколько ж она жрать-то в памяти будет?!

                      Нафиг. Для каждой технологи должно существовать свое средство воплощения. А создавать костыли — зря.
                      Для десктопа юзаю Дельфи. Для веб — JS, PHP и т.п… Android — java. BB — Java

                      Никаких сложностей. Надо просто понимать суть, а не сам язык.
                      • +3
                        Если PHP создаст COM объекты DirectX и будет просто управлять рендерингом, то не сильно много.
                        • +1
                          Мне в РНР очень не хватает возможности БЫСТРО подключить какую-нибудь нужную функцию из внешней DLL.
                          Хотелось бы найти рабочее решение ffi (foreign function interface) для PHP.
                          • 0
                            Такой функционал есть в библиотеке WinBinder, она тоже для создания GUI-приложений на PHP, я до перехода на Linux с ее помощью пробовал писать десктопные приложения. Не знаю, что с ней сейчас, но возможность подключать сторонние библиотеки там была. На моей машине WinBinder падал при попытке выгрузить подключенную библиотеку из памяти, но импортированные функции работали нормально.
                            • 0
                              В DevelStudio есть такая возможность. Вот, например, подключение user32.DLL и вызов её функций:

                              $com = new COM("DynamicWrapper");
                              $com->Register("user32.DLL", "MessageBoxA", "i=hssl", "f=s", "r=l");
                              $com->MessageBoxA(0,'Текст','Заголовок',0);


                              Подробнее тут
                              • 0
                                Через создание com объекта? И что значат все эти «i=hssl», «f=s», «r=l»?
                        • +4
                          Интересовался плотно года 4 назад. Работал в PHP-GTK+ с последующим переводом в exe. Даже реализовал онлайн менеджер заказов. Сейчас использую Roadsend IDE, переводит сразу в exe проект, есть минусы в куче dll, которые нужно тянуть с проектом, но для внутренних нужд самое то. Иногда проще написать на C# или C++, но тянет всегда на PHP :)
                          Большой минус перевода проекта в exe — париво с антивирусами, которые считают итоговой экзешник вирусом (чтоб их).
                          • +1
                            // ирония
                            Один раз php — всегда php;
                            • 0
                              Писал в свое время на C# небольшой кодировщик консольных php файлов для возможной дистрибуции.
                              запускался файл так commander.exe code2.dll
                              сам файл code.dll имеет вид JH$9$TIz!3ByaW50KCRzKTs= — base64 мешанина с солью и заменой символов.
                              Если кому нужно, то вот проект под VS2008 (3.7 MB).
                            • –7
                              KILL IT WITH FIRE!
                              • +1
                                на самом деле есть смвоя ниша для этого. например нужно написать небольшую программу которая будет в поддержку работы сайта. и программист ПХП сможет вопрользоваться этим решением, а если будет большой спрос, то там уже принимать решение о необходимости перевода на другие языки.
                                • +4
                                  Мрак. Как можно разрабатывать десктопные приложения, подразумевающие работу с потоками, на языке, который не поддерживает работу с потоками?
                                  • 0
                                    Да уж, первая мысль которая ударила в мозг после прочтения.
                                    • 0
                                      А какой язык поддерживает работу с потоками? Поясню — я намекаю на то, что поддержка потоков, это не часть языка, а часть библиотек.
                                      • 0
                                        Go с потоками работает
                                    • +1
                                      Чисто из любопытства попробую. Сейчас использую связку denwer + NetBeans.
                                      • +3
                                        О, пойду напишу ISAPI-модуль :)
                                        • +9
                                          Че все набросились сразу? Вас никто не заставляет писать на пыхе для десктопа. А кому-то это может очень пригодиться.

                                          И не надо про то, что php медленнее. Грубо говоря, С++ самый быстрый, но почему-то не пишут все на нем?
                                          • +1
                                            «C++ самый быстрый». Спасибо, порадовало.
                                          • +3
                                            Автору респект и уважуха. Не побоялся трудностей, костылей, граблей, дремучего леса и сделал свой Денвер с блекджеком и шлюхами иконками и крутым интерфейсом.

                                            А насчет холиворов, то вы тут зря всё это устроили. Понятно дело, что .NET круче, и всё такое. Но в данном случае это больше похоже на написание bash-скрипта с интерфейсом. Как вы удмаете, стоит ли для столь простых задач изучать новый ЯП, ставить студию и разбираться ещё в ней. Для таких простых задач и RADStudio подойдет. Когде веб-разрабу нужно быстро что-то сделать десктопное, садиться за книгу .NET за 21 день это явно не самый оптимальный из вариантов.
                                            • +2
                                              Это ни разу не денвер, денвер всего лишь связка АМП для самых начинающих.
                                              А смысл PHP-разработчику, не быдлокодеру, а тому, который целыми днями пишет на этом языке тратить 21 день на что-либо другое, в чем он не специализуется?
                                              • 0
                                                Ну я так и сказал и пропустил запятую )
                                              • –1
                                                Быстро сделать что-то десктопное можно на Python + Tkinter. Если вы не быдлокодер, изучается легко и непринужденно, максимум за пару дней. Ну или тот же C#, основы тоже довольно легкие. Я вот знаю front-end прогеров/верстальщиков, которые только JavaScript знают, так что. им на нем для десктопа писать?
                                                • 0
                                                  Why not? Флешеры же пишут с помощью AIR. С помощью HTML5, думаю вскоре можно будет чото для десктопа тоже написать.
                                              • +3
                                                А меня лично смущает что система начинает отделятся от php «что их новая среда разработки уже скоро начнёт работать с собственным скриптовым языком программирования Orion» PHP это PHP если мы отходим от стандартов и делаем что-то свое, то вероятность того, что это окажется настолько востребовано не так высока
                                                • +1
                                                  Думаю не ошибусь, если скажу что это беспокоит практически всех, кто пользуется DevelStudio.
                                                  По заверениям автора DevelStudio оригинальный PHP останется, но будет использоваться только при компиляции под Windows. Во всех других случаях (Linux, Mac) будет использоваться Orion.
                                                • +1
                                                  Автор, вы напрасно игнорируете тег source для форматирования кода
                                                  • 0
                                                    Первый пост. Поправил.
                                                  • 0
                                                    «Hellow Word».
                                                    • 0
                                                      Заметили таки :-) Исправил.
                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                      • +1
                                                        А у меня была мысль написать на PHP терминальную программу (и использовать телнет в качестве браузера)
                                                      • +8
                                                        Открываем мануал и впитываем все прелести встроенных функций!

                                                        $fso = new COM("Scripting.FileSystemObject");
                                                        $disks = array();
                                                        foreach($fso->Drives as $disk) $disks[] = $disk->DriveLetter; // получаем массив дисков
                                                        
                                                        $diskarr = array("D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
                                                        $diskar = array();
                                                        foreach($diskarr as $fffile) if($fffile == $os_vdisk){$diskar[] = $fffile;}else {if(!in_array($fffile,$disks)) $diskar[] = $fffile;} // если диск существует, то исключаем его из списка
                                                        c("combobox2")->text = implode("\n",$diskar);
                                                        $icounter = 0;
                                                        foreach($diskar as $fffile) {if($fffile == $os_vdisk) c("combobox2")->itemIndex = $icounter; $icounter++;}
                                                        

                                                        Мешанина превращается, превращается!
                                                        //$os_vdisk не понятно, что за переменная, но примерно код может выглядить так
                                                        $fso   = new COM("Scripting.FileSystemObject");
                                                        $disks = range('D', 'Z');
                                                        
                                                        foreach($fso->Drives as $disk) {
                                                          unset(array_search($disk->DriveLetter, $disks));
                                                        }
                                                        
                                                        c("combobox2")->text      = implode("\n",$disks);
                                                        c("combobox2")->itemIndex = sizeof($disks);
                                                        
                                                        • 0
                                                          //unset(array_search($disk->DriveLetter, $disks));
                                                          
                                                          $removeDisc = array_search($disk->DriveLetter, $disks);
                                                          unset($disks[$removeDisc]);
                                                          
                                                          • 0
                                                            Понял, $os_vdisk — это же диск ОС =)
                                                            Но убить его можно сразу после создания массива дисков, чтоб не проверять постоянно
                                                        • +2
                                                          О ужас. Осильте вы уже cpp и qt или c# и .net и перестаньте заниматься порнографией.
                                                          • –1
                                                            Спасибо за слитую карму, хомяки.
                                                            • +1
                                                              И в чём профит? Нет, серьёзно, не вижу преимуществ у компилируемых языков со статической типизацией перед интерпретируемыми с динамической для решения задач типа «нужно сделать раз в полгода автоматизацию рутинных действий, потому как надоело каждый день одно и то же в консоли вводить»? С учётом, что php основной язык для веб-разработки, а последняя — основная занятость.
                                                              • 0
                                                                Дело всего-то в том, что для каждой задачи есть свой инструмент. Если вам «надоело каждый день одно и то же в консоли вводить» накрапайте cmd скрипт — они для этого предназначены. Нефиг плодить костыли. Вы ведь в ведре чай не варите дома? И табуреткой гвозди не забиваете. Но почему-то считаете нормальным писать приложения для десктопа на языке для веб-разработки. Где логика?
                                                                • 0
                                                                  PHP язык общего назначения, появившийся как язык lдля веба. За время пути собачка могла подрасти. Если я соберусь профессионально разрабатывать десктоп приложения, то изучу C++ или Python (и Qt/PyQt), как если соберусь профессионально заниматься, например, электропроводкой, то приобрету профессиональный набор инструментов. Но я не побегу в магазин его покупать, чтобы сменить дома розетку, а воспользуюсь пассатижами и универсальной отвёрткой, а то и вообще кухонным ножом и зажигалкой.
                                                            • 0
                                                              Простите, я не совсем понял, оно компилирует PHP или создает рантайм «интерпретатор + скрипт»?

                                                              Кроме того, «удовольствие от написания программ на PHP» — это отличный оксюморон :)
                                                              • +1
                                                                Оно создаёт «интерпретатор + скрипт» с компиляцией в байт код для защиты/более быстрой работы. В общем наподобие Zend Optimizer.

                                                                Более подробная схема работы готовой программы такова (как я это понял):
                                                                Команда (например, нажата кнопка в вашей программе) → интерпретатор PHP → фреймворк SoulEngine (PHP) → фреймворк SoulEngine (EXE), именно он уже выполняет конечную Delphi команду.

                                                                Грубо говоря можно писать программы на PHP компилируемые на языке Delphi через прослойку созданную разработчиками DevelStudio. Как-то так…
                                                                • 0
                                                                  И все-таки не внушает доверия такое количество прослоек. PHP — стопроцентно вебовский язык, писать на нем оконные приложения — это похоже на придуманную на коленке тему диплома, типа «трехмерный файловый менеджер», когда по отдельности элементы интересны, звучат вместе тоже забавно, но фактическая реализация оказывается неюзабельна )
                                                                  • 0
                                                                    Некоторые и для веба его опасаются применять, считая, прежде всего, недостаточно надёжным для работы демоном/тру-фастцги.
                                                                    • 0
                                                                      Хочу трехмерный файловый менеджер!
                                                                      • 0
                                                                        Не-не-не!
                                                                        Хочу Четырехмерный файловый менеджер (с добавленной осью времени),
                                                                        чтобы можно было вернуться к старым версиям файлов (концепция Time Mashine Windows-8).
                                                                        В такой модели можно использовать визуальные эффекты «старения» файлов.
                                                                        Размеры файлов тоже визуально легко отслеживать (по габаритам трехмерных объектов).
                                                                        Эскизы файлов изображений отображать в виде «плоских» прямоугольников.
                                                                        Звуковые файлы в виде столбиков (высота столбика соответствует длительности воспроизведения).
                                                                        Видео файлы в виде дорожки (наподобие киноленты), на которой отображаются ключевые кадры. (Сами ключевые кадры можно сделать анимированными)…
                                                                        … Эх причем тут РНР?
                                                                        • +1
                                                                          Хотя нет, на РНР можно написать VRML-обертку для этого «коленочного» гипотетического Четырехмерного файлового менеджера (в связке с веб-сервером Апачи), и использовать любой браузер с VRML-плагином (например, кортона3д) для навигации по компу (или локальной сети, или даже P2P-сети).
                                                                          VRML-объекты в WRL-файлах виртуальных миров — это обычные ТЕКСТОВЫЕ описания, и нет никаких принципиальных технических сложностей для реализации данной модели.
                                                                          Сами описания файлов (и кэши эскизов) хранятся в простой реляционной базе данных, и в качестве ключей могут использовать MD5-хеши содержимого файлов.
                                                                          В той же базе данных можно хранить текстовые метки, ну или другие более сложные пользовательские объекты-ярлыки, которые пользователь может расставлять во время навигации по этому файловому менеджеру (которые автоматически попадают в базу с помощью AJAX)…
                                                                          … Остапа понесло...
                                                                          • 0
                                                                            По-моему, нереляционная база данных будет более уместна для задания пользовательских метаданных.
                                                                        • 0
                                                                          У нас в прошлом году кто-то пытался написать в качестве дипломного проекта. На экране крутились несколько шариков в трехмерном пространстве, как это было связано с файловым менеджером я так и не понял.

                                                                          В этом году один чувак пишет трехмерный браузер структуры БД. Тоже, должно быть, «интересный проект» получится.
                                                                  • 0
                                                                    А проверку количества запусков программы (недопущения запуска больше одной копии) обычно делают через именованный системный объект типа мьютекса или файла, главное чтобы атомарные операции поддерживало.
                                                                    • 0
                                                                      Пример, когда может понадобиться PHP на десктопе вообще и GUI в частности: клиент-серверное приложение со сложной бизнес-логикой. Сервер крутится на PHP (так получилось) и переписывать (а потом синхронизировать) всю бизнес-логику на, например, C# (да ещё с квалификацией уровня pre-Jinior), может оказаться не самой лучшей идей. DRY и всё такое.
                                                                      • –2
                                                                        > Отечественные разработчики Devel Studio, сообщают, что их новая среда разработки уже скоро начнёт работать с
                                                                        > собственным скриптовым языком программирования Orion, синтаксис которого будет сочетать популярный PHP +
                                                                        > новые конструкции языка.

                                                                        Русский php! Русская ОС должна быть написана на нём.
                                                                        • +1
                                                                          Да ладно вам, зато ребята занимаются тем, что им интересно, и никому свой PHP не навязывают. А мы постоим и посмотрим, авось родится какой нибудь конкурент Делфей =)
                                                                          • 0
                                                                            Кстати среду программирования DevelStudio разрабатывает всего один парень студент 22 года. Вундеркинд видимо. Плюс вроде как сейчас с ним скооперировался гейм-программер. Двое уже лучше чем один :-)

                                                                            P.s. Конечно могу ошибаться о составе их команды.
                                                                            • 0
                                                                              Ну парень талантлив, да, но чем меньше команда разработчиков тем больше шансов на развал. Не раз уже бывали подобные случаи. Как бы то ни было остается пожелать удачи разработчикам, и развития проекту.
                                                                        • +2
                                                                          Активно пользуюсь сием чудом. Из минусов можно добавить: если не упаковывать EXE'шник UPX'ом, на него с большой вероятностью будут ругаться антивирусники, т.к. на DevelStudio школота написало много фейков/троянов/вирусов, а компилятор не делает каждую компилируемую программу уникальной, вот и приходится страдать. По этому в стандартной поставке UPX и отключили чтобы хоть как-то бороться. Обсуждение есть на оф. форуме DevelStudio.

                                                                          В остальном отличная вещь!
                                                                          • 0
                                                                            Это проблема антивирусов, но никак не Develstudio. Я думаю неправильно относить недоразвитость и ошибки срабатывания каких-то сторонних программ к минусам DevelStudio.
                                                                            • 0
                                                                              Можно много спорить кто виноват, главное что страдают клиенты. Например Антивирус Касперского зарубает абсолютно все неупакованные программы скомпилированные в DevelStudio, опознаёт их как троян. Я полностью согласен что это проблема антивируса, плохо подобрана сигнатура. Минус как раз в том что компилируемый код всех программ имеет одинаковые сигнатуры, но UPX в принципе решает эту проблему.
                                                                          • –2
                                                                            Убейте их люстрой.

                                                                            Память то не течет?
                                                                            • 0
                                                                              Да вроде как не течёт, но изначально занимает немало, особенно на 64 битных системах. Если брать к примеру Open Server, то на Win7x64 после запуска программа занимает 25 мегабайт, согласитесь немало.
                                                                              • 0
                                                                                Но и не сказал бы, что много для GUI программы, использующей какие-то высокоуровневые ООП-обёртки над WinAPI и столь же высокоуровневый фреймворк для контроля потока исполнения.
                                                                                • 0
                                                                                  Год назад с одним товарищем пробовали написать аналог на Delphi, вернее даже написали. Так вот Open Server написанный на Delphi занимает в памяти около 2,5 Мб. Аналог на PHP занимает в 10 раз больше, 25 Мб как уже сказано выше. Потому для меня это выглядит очень не мало :-) Программа ведь всего-то трей-меню да пара окошек.

                                                                                  Спросите почему программа была переписана на PHP? Очень просто — нужно было срочно исправлять ошибки, внедрять новые функции. Мой товарищ хороший программист, но у него было полно своей работы, плюс исходник он утратил поскольку начал экспериментировать с кодом. Вот так и вышла версия на PHP.
                                                                            • 0
                                                                              Троллейбус из батона :)
                                                                              • 0
                                                                                Среда сырая и скорее всего подойдет лишь для реализации простых дектопных приложений. После работы в Visual Studio ощутил дикий дискомфорт. Чувствуется необходимость в доработке «напильником и наждачкой». Справочник — Руководство разработчика наполовину пустое. Не нашел кучи ответов на вопросы, среди которых «как описать функцию вне объекта и обработки события». Мне идея нравится, но продуктом, увы, не заинтересовали.
                                                                                • 0
                                                                                  Мне вот интересно, вопрос ко всем критикующим PHP под Windows:

                                                                                  Какой тогда по вашему идеальный вариант для начинания/изучения PHPшниками программирования под Windows? Чтобы делать это легко и просто в прекрасной Visual Studio и язык не сильно отличался от PHP. Вариантов то я, как погляжу немного: C#,C++,.NET. Еще есть Delphi со своей студией.
                                                                                  • 0
                                                                                    Да что вы так прицепились к этому PHP? Нет и не может быть универсального языка, который был бы одинаково хорошо применим для разработки любых приложений. Не ограничивайте себя одной технологией, изучайте другие и выбирайте более применимые для конкретной задачи.

                                                                                    Я бы порекомендовал вам изучить C#. Он удобен, прост и ортогонален, в отличие от хаотически развивавшегося PHP.
                                                                                  • +1
                                                                                    > Для создания красивого и одинаково выглядящего во всех версиях Windows
                                                                                    Отстой. Когда же вы все, наконец, поймете, что времена DOS кончились и программы должны выглядеть не «одинаково», а так, как установлено в системе в свойствах экрана.
                                                                                    • 0
                                                                                      Я уже давно это знаю и полностью согласен с вами, однако виной тому проблема DevelStudio. При использовании иконок в трей-меню полностью отключается оформление системы для этого меню. Потому пришлось использовать скин. Среда еще сыровата, что делать.

                                                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.