php [zend] extensions

insidex

флихтэръер
php [zend] extensions

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

Неужели ЗендоДевелоперы не предусмотрели такой возможности ? :mad:
 

tony2001

TeaM PHPClub
>как разработчику экстеншена узнать патч к скрипту
"патч" - это искаженно-английское "путь", что-ли?

выпрос смысловой нагрузки не несет.
скрипт? загрузил? экстеншен?

все экстеншены грузятся до выполнения скриптов.

если имеется ввиду выполняемый в данный момент времени скрипт, то zend_get_executed_filename(TSRMLS_C);
если же имеется ввиду изначально запрошенный скрипт, то SG(request_info).path_translated.

-~{}~ 25.09.07 00:34:

кстати, php экстеншены и zend экстеншены - это две совершенно разные вещи, не надо их путать.
см. Zend/zend_modules.h и Zend/zend_extensions.h
 

insidex

флихтэръер
> "патч" - это искаженно-английское "путь", что-ли?

абсолютный путь к файлу :)

Ох...

Речь идет о PECL...

>все экстеншены грузятся до выполнения скриптов.

А dl() ?

> если имеется ввиду выполняемый в данный момент времени скрипт, то zend_get_executed_filename(TSRMLS_C);

узнать путь внутри ext, логично бы было (как мне казалось) через char *getenv("SCRIPT_FILENAME"); - но это окружение ПХП, из переменных сервера ничего подобного для пути к скрипту нет.

Если ПХП установлен как CGI, то можно узнать через char *getcwd(); Но что делать, если ИНАЧЕ ? (getcwd() вернет путь к Хому сервака) ????

>если же имеется ввиду изначально запрошенный скрипт, то SG(request_info).path_translated.

Это для SAPI модели
 

tony2001

TeaM PHPClub
>>все экстеншены грузятся до выполнения скриптов.
>А dl() ?

а ответ читать?
если имеется ввиду выполняемый в данный момент времени скрипт, то zend_get_executed_filename(TSRMLS_C);
>узнать путь внутри ext, логично бы было (как мне казалось) через
>char *getenv("SCRIPT_FILENAME"); - но это окружение ПХП, из
>переменных сервера ничего подобного для пути к скрипту нет.

putenv("SCRIPT_FILENAME", "garbage");
dl("...");


>Если ПХП установлен как CGI, то можно узнать через char *getcwd();

chdir("garbage");
dl("..");

>Но что делать, если ИНАЧЕ ? (getcwd() вернет путь к Хому сервака) ????

я кому писал предыдущий ответ? Пушкину А.С.?

>>если же имеется ввиду изначально запрошенный скрипт, то SG(request_info).path_translated.
>Это для SAPI модели

для какой модели?
любой sapi хранит там запрошенный путь и любой экстеншен может его прочесть.

-~{}~ 25.09.07 00:58:

>абсолютный путь к файлу
>Если ПХП установлен как CGI, то можно узнать через char *getcwd();

ну да, именно getcwd() и возвращает абсолютный путь _к файлу_.
 

insidex

флихтэръер
tony2001

> zend_get_executed_filename(TSRMLS_C);

Спасибо Тебе БОЛЬШУЩЕЕ!! Вслепую твой пост прочитал, перечитал - все тип-топ и работает! :)
 

Alexandre

PHPПенсионер
Извини, забыл сразу спросить, в API-функциях есть ли некое подобие php_eval(php-код или байткод) для прямого выполнения части php-кода через экстеншен.
есть callback вызов РНР функции. см. http://www.php.net/manual/en/internals2.ze1.zendapi.php
PHP:
Example 56.18, “Calling user functions.” shows a small demonstration of calling a user function
 

insidex

флихтэръер
Alexandre
Сори, что потер, просто уже нашел zend_eval_string(...);

-~{}~ 29.09.07 01:03:

хех, реально сразу все не спросить :)

может есть ещё и структура какая особенная, хранящая абсолютный путь к загружаемому экстеншену?

сори за кучу вопросов, тема зенда вообще освещена вяло как-то...
 
Сверху