|
|
|
| Хочется прикрутить функцию написанную на РНР к другому приложению под windows.
Есть ли способ из РНР DLL сделать? | |
|
|
|
|
|
|
|
для: Eugene77
(04.08.2011 в 06:17)
| | Нет. DLL - это скомпилированный файл, а PHP является интерпретируемым языком. | |
|
|
|
|
|
|
|
для: Eugene77
(04.08.2011 в 06:17)
| | Если очень не втерпеж использовать PHP в Windows-программе, запускайте PHP-скрипт в отдельном процессе или потоке. Для этого нужно будет приложить к программе php.exe, нужные DLL-библиотеки и PHP-скрипт. Когда мне нужна Windows-программа "за два часа", я именно так и поступаю. | |
|
|
|
|
|
|
|
для: cheops
(04.08.2011 в 09:25)
| | А у Вас не остался готовый исходник, а то интересно увидеть в действии такую штуку! | |
|
|
|
|
 5.5 Кб |
|
|
для: grafen
(04.08.2011 в 15:14)
| | Остался, но он на С++ Builder, т.е. сильно на любителя, хотя конечно запуск идет на Windows API. Во вложении исходники одной из такой программ (PHP-логику выкладывать бы не хотелось, да я думаю, она вам и не нужна). | |
|
|
|
|
|
|
|
для: cheops
(04.08.2011 в 15:42)
| | Спасибо! | |
|
|
|
|
|
|
|
для: cheops
(04.08.2011 в 09:25)
| | >Если очень не втерпеж использовать PHP в Windows-программе, запускайте PHP-скрипт в отдельном процессе или потоке. Для этого нужно будет приложить к программе php.exe, нужные DLL-библиотеки и PHP-скрипт.
Этот вариант интересен, но я не очень понимаю как запустить отдельный процесс.
Язык на котором всё написано не поддерживает ветвления.
Но он поддерживает внешние DLL.
На стадии линковки прикручивает.
Возможно, если есть готовая DLL с функцией ветвления внутри, то через неё можно было бы попробовать запустить отдельный прцесс.
Или, скорее всего, я что-то в корне неправильно понимаю... никогда не программировал под windows | |
|
|
|
|
|
|
|
для: Eugene77
(04.08.2011 в 18:14)
| | А что за язык и что за операционная система, где вы его запускаете? Я так понимаю речь идет об Windows, иначе бы не было речи об DLL... если честно я не так много языков знаю, которые позволяют подключать DLL, но не допускают ветвления (хотя согласен, есть таки)... Собственно если создать DLL на C++ запустить процесс с PHP-скриптом можно и от туда. | |
|
|
|
|
|
|
|
для: cheops
(04.08.2011 в 20:34)
| | >А что за язык и что за операционная система, где вы его запускаете?
MQ4
Собственно если создать DLL на C++ запустить процесс с PHP-скриптом можно и от туда.
Вот это было бы здорово
Такую бы DLL универсальную, с функцией запуска произвольной прграммы...
Но, с другой стороны.. что надо запускаить?
Допустим, я запущу php.exe, он прочитает php.ini. А дальше?
Как он узнает, какой скрипт выполнять? | |
|
|
|
|
|
|
|
для: Eugene77
(05.08.2011 в 18:45)
| | Так в параметре передадите путь PHP-файлу, если вам потребуется выполнить PHP-файл под Windows, вы запустите что-то вроде
php.exe D:/path/index.php
| При запуске внешнего процесса всегда можно указать внешние параметры. Если будете CreateProcess() использовать, то прямо одной строкой можно будет передать все параметры - путь к php.ini, путь к PHP-файлу. | |
|
|
|
|
|
|
|
для: cheops
(05.08.2011 в 19:25)
| | >Если будете CreateProcess() использовать, то прямо одной строкой можно будет передать все параметры - путь к php.ini, путь к PHP-файлу.
А где посмотреть синтаксис для этой строки? | |
|
|
|
|
|
|
|
для: Eugene77
(05.08.2011 в 19:37)
| | Выполните команду в командной строке
php.exe --help > help.txt
| В файле help.txt можно будет найти описание синтаксиса php.exe | |
|
|
|
|
|
|
|
для: cheops
(05.08.2011 в 20:01)
| | Спасибо!
Кажется, один вопрос остался:
Где бы взять готовую DLLку с универсальной функцией запуска нового процесса? | |
|
|
|
|
|
|
|
для: Eugene77
(06.08.2011 в 17:56)
| | Сам себе же и отвечу (может кому-то ещё пригодится)
Для запуска программ необходимо импортировать из системной библиотеки kernel32.dll функцию WinExec():
#import "kernel32.dll"
int WinExec(string lpCmdLine,int uCmdShow);
|
После этого в любом месте ее можно будет вызвать:
WinExec("php.exe -s -f",1);
|
| |
|
|
|