ПХП в качестве скриптового языка

Paxan

Новичёк
ПХП в качестве скриптового языка

Есть некая программа, которая позволяет писать под себя плагины и использовать её АПИ. Хочется в качестве скриптового языка использовать пхп. Т.е. хочу написать плагин для программы, которая загружает скрипт на пхп и вызывает допустим некое функции из АПИ программы. Не слишком сумбурно? И собственно вопрос: с какой стороны подходить? Собственно не понятен момент как из плагина вызвать пхп скрипт, который бы исполнялся в контексте плагина. Лучше всего скажите куда пойти и что почитать.
 

Alexandre

PHPПенсионер
Собственно не понятен момент как из плагина вызвать пхп скрипт
собственно надо читать API твоей проги,
как надо вызывать системные команды.

а собственно надо вызвать командную строчку /path_to/php.exe /path_to_script/script.php


Как и в любом консольном приложении, не только PHP, но и сам скрипт может принимать аргументы командной строки. Количество передаваемых аргументов в PHP не ограничено (хотя консоль имеет некоторое ограничение на количество передаваемых символов, но на практике вы не должны с этим столкнуться). Все аргументы, переданные вашему скрипту, доступны в виде глобального массива $argv. Нулевой элемент содержит имя скрипта (которое является символом - в случае, если PHP-код читается из потока stdin или указан в командной строке при помощи ключа -r). Вторая определяемая глобальная переменная $argc содержит количество элементов массива $argv (а не количество аргументов, передаваемых при запуске).

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

Paxan

Новичёк
а собственно надо вызвать командную строчку /path_to/php.exe /path_to_script/script.php
В этом случае будет работать как отдельный, независимый процесс, а мне нужно чтобы скрипт исполнялся в этом же процессе. Т.е. надо примерно такая схема:
0. Запускаем программу.
1. Плагин запускает скрипт.
2. В скрипте есть к примеру вызов: somefunc();
3. somefunc() вызывает некую АПИ в текущей исполняемой программе (через написанный экстеншн)

Тут я сам не совсем представляю как должно всё работать.
 

Paxan

Новичёк
440hz
Нет. Для Вин32Апи есть FFI.

-~{}~ 01.11.05 14:51:

И еще попутный вопрос - чем лучше(чтоб делать как можно телодвижений) компилировать экстеншены, взятые с PECL. Под винду.
 

Alexandre

PHPПенсионер
0. Запускаем программу.
1. Плагин запускает скрипт.
2. В скрипте есть к примеру вызов: somefunc();
3. somefunc() вызывает некую АПИ в текущей исполняемой программе (через написанный экстеншн)
пункт такой забыл
1а Плагин запускает пхп
1б пхп запускает скрипт

т.е. тебе нужно запустить пхп как шаред объект
если АПИ твоей проги это позволяет сделать?


И еще попутный вопрос - чем лучше(чтоб делать как можно телодвижений) компилировать экстеншены, взятые с PECL. Под винду
странный вопрос, зачем компилировать уже скомпилированные экстеншены
ответ: можно скомпилированть VC++ (Microsoft VC), можно BC++ (Borland C)

вообще непонятно зачем нужен этот огород, если ты собираешься писать экстеншен на Си, то не проще ли весь плагин написать на Си ?

а то у тебя слишком уж громоздко получается:
- Прога вызывает пхп и грузит его в качестве модуля.
- пхп загружает скрипт
- скрипт грузит экстеншен (или он грузится вместе с пхп, тогда это надо прописывать в конфиге)
- вызывается функция экстеншена,
- которая в свою очередь вызывает функцию АПИ
:confused: :rolleyes:
 

Paxan

Новичёк
т.е. тебе нужно запустить пхп как шаред объект
если АПИ твоей проги это позволяет сделать?
Гм... Что значит как шаред обьект? Если это то, что я думаю, то нет.

-~{}~ 01.11.05 15:25:

вообще непонятно зачем нужен этот огород, если ты собираешься писать экстеншен на Си, то не проще ли весь плагин написать на Си ?
Плагин и так будет на Си, но хочется сделать в качестве манипулирования АПИ программы скриптовый язык, для этого есть несколько причин (почему не ВЕСЬ плагин на Си):
1. Это удобно и быстро. Не нужен компилятор чтобы запустить тот или иной скрипт. Не надо при каждом изменении делать перекомпиляцию.
2. Программа сама не имеет встроенного скриптового языка, только возможность писать плагины.
 

Screjet

Новичок
Как вариант: плагин-коннектор, который будет "общаться" с пхп-приложением.

-~{}~ 02.11.05 13:21:

(что имхо проще загрузчика VM PHP)
 

Alexandre

PHPПенсионер
Как вариант: плагин-коннектор, который будет "общаться" с пхп-приложением
как ты себе это представляешь?? общение по сокету или пайпу? Тогда каким же образом будет запущен сам интерпритатор?

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

-~{}~ 02.11.05 13:38:

Что значит как шаред обьект
это аналог dll но в юниксе.

весь вопрос в том, как Программа будет вызывать пхп, а пхп плагиновский (пхп) скрипт.
Разбираться в исходниках пхп, чтоб он был скомпилен как шаред объект под твою программу и АПИ вызова пхп - уйдет много времени и сил, хотя это страшно только с первого взгляда. Потом даже станет интерестно. А когда сделаешь - будет круто.
 

Screjet

Новичок
как ты себе это представляешь?? общение по сокету или пайпу? Тогда каким же образом будет запущен сам интерпритатор?
Что мешает в коннекторе запускать ПХП-процесс, если таковой отсутствует?

Самое простое ... отдельным процессом
Угадай, что значит IPC? ;)
Мы говорим об одном и том же.
 

Paxan

Новичёк
Самое простое ... отдельным процессом
Имхо отдельным процессом и делать
Interprocess Communication
это и есть городить огород

В данный момент смотрю исходники php.exe и пытаюсь запустить скрипт на исполнение из плагина (там конечно чёрт ногу сломит).
 

Alexandre

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

Alexandre

PHPПенсионер
;) ну у меня не стояло задачи срочной разработки, так в качестве познания основ.
 
Сверху