PHP и zend_extension

lealhost
На сайте с 07.06.2014
Offline
136
992

Добрый вечер! :)

Так уж сложилось, что PHP версии ниже чем 5.5 совсем не хотят воспринимать путь, прописанный в extension_dir для zend_extension директивы.

Можно ли как-то решить эту проблему, чтобы не указывать абсолютные пути для каждого zend_ модуля? :)

---------- Добавлено 30.08.2014 в 21:55 ----------

Очень быстро нашел решение. Может кому-нибудь нужно будет.

Наткнулся на исправление от Дмитрия Стогова:

http://git.php.net/?p=php-src.git;a=commitdiff;h=0b8b6a727ddd31ff14e4af919c77a3f1b5e2b3f0

В исходниках редактируем main/php_ini.c

В функции php_load_zend_extension_cb удаляем строку:


zend_load_extension(*((char **) arg));

Добавляем в эту же функцию эти строки:


char *filename = *((char **) arg);
int length = strlen(filename);

if (IS_ABSOLUTE_PATH(filename, length)) {
zend_load_extension(filename);
} else {
char *libpath;
char *extension_dir = INI_STR("extension_dir");
int extension_dir_len = strlen(extension_dir);

if (IS_SLASH(extension_dir[extension_dir_len-1])) {
spprintf(&libpath, 0, "%s%s", extension_dir, filename);
} else {
spprintf(&libpath, 0, "%s%c%s", extension_dir, DEFAULT_SLASH, filename);
}
zend_load_extension(libpath);
efree(libpath);
}

Пересобираем PHP :)

Boris A Dolgov
На сайте с 04.07.2007
Offline
215
#1

Это вроде вполне ожидаемое поведение -- zend_extension всегда требовал полный путь.

Обосновано это было тем, что zend_extension обычно прописывают какие-то большие сторонние продукты, которые ставятся в отдельную папку.

С уважением, Борис Долгов. Администрирование, дешевые лицензии ISPsystem, Parallels, cPanel, DirectAdmin, скины, SSL - ISPlicense.ru (http://www.isplicense.ru/?from=4926)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий