Компилируем PHP в Win приложения Компилируем PHP в Win приложения Что нам понадобится скачать: 1. winbinder - Фреймворк для разработки ГУИ, легкий в использовании. Скриншот программы 2. Bambalam PHP EXE Compiler/Embedder - Компилятор PHP скриптов. Качаем последнюю версию. Мини фак по использованию: Далее будет подробно... 3. UPX - Компресор, чтоб наше приложение на выходе было не таким весомым. В bamcompile он уже есть, но я качал последнюю версию с SVN'a. 4. Иконка =) для нашего приложения, допустим эта - ЙА ИКОНКО 5. php_winbinder.dll - библиотека для создания окон, это нужно для того что в некоторых версиях bamcompile к примеру в последней версии на данный момент 1.21 некоректно работает с окнами и создает нерабочие приложения, данная либа решает эту проблемму. Подготовка 1. Создаем на Диске C: файл cmd.bat с содержимым: 2. Создаем там же папку bamcompile, в нее кидаем: bamcompile.exe - компилятор favicon.ico - иконку php_winbinder.dll - библиотеку upx.exe - упаковщик И обязательно папку include из установленой программы WINBINDER по умолчанию путь к ней C:\WinBinder\phpcode\include в етой папке класс для работы с Формами. Вот в принцыпе и все. Перейдем к небольшому примеру: Пример 1. Запускаем наш cmd.bat в него закидываем bamcompile.exe[пробел] Теперь нужно указать все параметры: 2. Ставим иконку: Подсказка: в окно консоли можно закидывать файлы, и путь будет прописываться автоматом, ненужно писать все пути вручную. 3. Добавляем библиотеку 4. Далее указываем что ето Оконное приожение а не консольное (-w) и то, что мы хотим его запаковать пакером UPX (-c) 5. Указываем путь к скрипту который компилим: Готово, если сделали все правильно, то в папке где был скрипт появится EXE файл, упакованый и с иконкой. На скрине удачно выполненый нерультат: Для примера я взял готовый php скрипт, с коментариями. Скрипт скапипизжен с http://www.codenet.ru/webmast/php/PHP-Compiler-EXE/ PHP: <?php // Подключаем основную библиотеку include "include/winbinder.php"; // Даём метки окнам редактирования define('IDC_EDITBOX1002', 1002); define('IDC_EDITBOX1003', 1003); // Рисуем окошко $winmain = wb_create_window(null, AppWindow, 'MD5 Hash Generator by S1B [SBT]', WBC_CENTER, WBC_CENTER, 315, 134, 0x00000000, 0); // Шпигуем окошко кнопками # Рисуем рамочку wb_create_control($winmain, Frame, '', 10, 10, 290, 85, 0, 0x00000000, 0, 0); # Рисуем надписи (лейблы) wb_create_control($winmain, Label, 'Текст:', 23, 35, 45, 15, 0, 0x00000000, 0, 0); wb_create_control($winmain, Label, 'Hash:', 23, 65, 45, 15, 0, 0x00000000, 0, 0); # Рисуем окошки редактирования (нижнее будет неактивным), и загоняем их данные в переменные $text=wb_create_control($winmain, EditBox, '', 78, 30, 210, 20, IDC_EDITBOX1002, 0x00000000, 0, 0); $hash=wb_create_control($winmain, EditBox, '', 78, 60, 210, 20, IDC_EDITBOX1003, 0x00000040, 0, 0); // Две необходимые надписи =) wb_set_handler($winmain, "process_main"); wb_main_loop(); function process_main($window,$id) { # Объявляем данные окошек редактирования глобальными global $text,$hash; switch($id) { case IDC_EDITBOX1002: wb_set_text($hash,md5(wb_get_text($text))); break; case IDCLOSE: wb_destroy_window($window); break; } } ?> В результате имеем программу с приятным интерфейсом Все файлы, можно скачать с моего архива - http://b3.grabberz.com/files/bamcompile.rar [3mb] b3 (c) Спешинал для недовольного Pashkela
классно,вот только я так понял этот пхп скрипт написан специально для этого компилятора,а мне например нужно чтоб самый обычный пхп скрипт взял и скомпилировал в exe...
Тоже интересует. обычный пхп скрипт можно перевести в екзешник и чтобы он нормально выполнялся? Тоисть и курл работать будет и все остальное? и еще такой вопрос. скомпилил я допустим екзешку если ее с другого комапа запустить то он будет работать? или нужно чтобы ети библиотеки были на компе или че там?
Сейчас вот сижу и дуплю это,подскажите кто знает,как тут сделать подобие этого <input type="file" name="Filedata">,тоисть выбор файла с кнопочкой "Обзор"...
очень просто, примеры есть в winbinder , пункт 1 из первого поста. Когда скачаешь, загляни в папочку "\phpcode\examples" и у тебя глаза на лоб вылезут от открывшихся переспектив
А у меня отказывается работать Делаю всё по инструкции, в логах написано что все ОК и *.exe создаётся, но когда его открываю, то ничего не происходит
Код "калькулятора" из первого поста Вот логи: PHP: Bambalam PHP EXE Compiler/Embedder 1.21 Windowed application Compress Mainfile: calculate.php Outfile: calculate.exe Encoding and embedding calculate.php Embedding php_winbinder.dll and adding it to extension loader Compressing final exe.. Compression done calculate.exe created successfully! Думал у меня с вистой что-то не так, запустил на ХП, тот же результат
ну ты выбрал для первогот раза, молодец, чтобы скомпилировать калькулятор, у тебя должны быть: В отдельной папке лежать файлы и папка: - файл calculate.bcp Code: ; Bamcompile example project file mainfile calculate.php outfile calculate.exe compress windowed icon calculate\hal.ico embed calculate extension calculate\php_winbinder.dll - файл compile.bat Code: bamcompile calculate.bcp - файл bamcompile.exe - папка calculate, в ней: ------файл php_winbinder.dll ------файл calc.rc ------файл calculate.php ------файл hal.ico (файл иконки для программы) ------папка include, в ней: -----------файл winbinder.php
CURL+bamcompile 1. Качаем нужные библы тут 2. Для компиляции вашего php-скрита с curl положите рядом со скриптом все файлы, что вы скачали - php_curl.dll, libeay32.dll, ssleay32.dll 3. Сам bamcompile.exe должен тоже лежать рядом (т.е. вообще все файлы в одной отдельной папке) 4. Создайте и запустите такой create.cmd: Code: cmd /k bamcompile -e:php_curl.dll -c ваш_скрипт.php ваш_скрипт.exe 5. Готово, curl работает. PS: Ограничения - если вы убираете получившийся .exe в другую папку, всегда придется с собой таскать php_curl.dll, libeay32.dll, ssleay32.dll - без них программа работать не будет. Т.е. они всегда должны лежать рядом с .exe Tested on Bamcompile 1.21 + Win XP
Блин,когда начинает исполняться скрипт то окно с скриптом полностью зависает аж до его полного исполнения,что делать???? sleep(x); Не помогает!((((
Для начала научиться юзать неблокируемые сокеты, если речь идет о парсинге чего либо с www PS: Всё там работает, и работает довольно прилично, просто нет многопоточности. У меня даже есть SIPT5 практически рабочий на winbinder Но скрипт на том же перле круче в разы, если не в десятки раз Но чтобы юзать winbinder для серьезных задач - простыми знаниями на php не обойдешься, нужны годы практики и абсолютное понимание каждой функции
я юзаю тут curl,и пока полное исполнение именно php скрипта не пройдёт то он зависает!!! Пример: function starter(){ sleep(10); } По нажатию кнопки старт в интерфейсе запуститься эта функция,и эти 10 секунд что он спит окно скрипта "Не отвечает"! Причём тут сокеты или что либо если даже sleep зависает...
curl не пойдет для таких целей - кури неблокируемые сокеты, или задавай конкретные вопросы, что именно не получается с сокетами, тогда будет конкретный ответ (куски кода обязательны, а также подробное описание той задачи, которую надо выполнить, а не общие твои домыслы) PS: sleep - не выход, выполнение sleep есс-но влияет на работу всего приложения, т.е. если юзать sleep - то, пока пауза, ничего нажать не получиться. Тем более 10 секунд. Вот функция с неблокируемыми сокетами которая подойдет для парсинга любой URL (кроме https): PHP: function sql($url) { $patern = "/^(http:\/\/)?([^\/]+)/i"; $source_host = preg_match($patern, $url, $rezz); $host = $rezz[2]; $url1 = "GET $url\n"; // Тут GET можно поменять на POST, к примеру $responce = ""; $timeout = 30; // На Ваше усмотрение $fsock = fsockopen($host, 80, $errnum,$errstr,$timeout); if ($fsock) { $headers = $url1; $headers .= "Host: $host\n"; $headers .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2\n"; $headers .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n"; $headers .= "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\n"; $headers .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\n"; $headers .= "Keep-Alive: 500\n"; $headers .= "Connection: close\n"; $headers .= "Content-Type: application/x-www-form-urlencoded\r\n\r\n"; fwrite ($fsock,$headers); stream_set_blocking($fsock, 0); stream_set_timeout($fsock, $timeout); while (!feof($fsock)) $responce .= fread($fsock,4096); fclose ($fsock); } return $responce; } пример вызова: PHP: $a = sql("http://rambler.ru");
Pashkela,плиз,можеш тогда мне сейчас сделать на неблокируемых сокетах аналог моей функции на php? PHP: function curl($urlcurl,$postcurl,$cookiescurl){ $ch=curl_init ($urlcurl); $ua = 'Opera/9.64 (Windows NT 5.1; U; ru) Presto/2.1.1'; curl_setopt($ch, CURLOPT_USERAGENT, $ua); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_USERAGENT, $ua); curl_setopt($ch, CURLOPT_REFERER, $ref); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $PostData); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIE, $cookiescurl); curl_setopt($ch, CURLOPT_POSTFIELDS, $postcurl); $page=curl_exec($ch); return $page; } чтоб был вызов функцыи такой: sock("Ссылка URL","POST запрос вида s=1&hh=4","Кукисы"); Просто я с соксами не работал,всегда курлом обходился,как с ними работать хз,ну более чем такая функция мне и ненужно ничего.Спс