PHP 5.3+ enable_dl не включает dl()?

Я пытаюсь установить стороннее расширение PHP (.so) в PHP 5.3.6-13 на Ubuntu 11.10 и использовать его в веб-среде. В документации поставщика предлагается использовать функцию dl() для динамической загрузки библиотеки.

Когда я пробую их пример кода, я обнаруживаю, что dl() недоступен (Неустранимая ошибка: вызов неопределенной функции dl()), поскольку функция dl() устарела в PHP 5.3. Но в php.ini есть правило конфигурации enable_dl и другие источники сказать, что я должен иметь возможность использовать dl(), просто изменив переменные php.ini (enable_dl=On, safe_mode=Off, не указанные в disable_functions) и перезапустив apache. Когда я пытаюсь это сделать, dl() все еще не определено.

Итак, я копаюсь в заметках об изменениях SAPI PHP 5.3 и нахожу это:

Функция dl() теперь отключена по умолчанию и теперь доступна только в CLI, CGI и встроенных SAPI.

Означает ли это, что dl() не только "отключено по умолчанию" в PHP 5.3+ с использованием веб-API, но фактически "полностью недоступен независимо от того, что я делаю, даже с изменением конфигурации PHP варианты"? Мне так кажется, потому что я не могу заставить dl() работать независимо от того, что я настраиваю.

Уточняю: я могу изменить php.ini и загрузить расширение напрямую, так что это не вопрос о том, как заставить работать расширение, а о функции dl() и ее состояние в PHP 5.3+. Если он больше не доступен ни при каких обстоятельствах, я хочу сообщить об этом поставщику, чтобы он мог обновить свою документацию. Но если он должен быть доступен, и я просто что-то упускаю, я бы тоже хотел это услышать.


person jonathanm    schedule 31.08.2012    source источник
comment
Какой SAPI вы используете для PHP? Модуль Апача?   -  person hakre    schedule 31.08.2012
comment
apache2handler. Я упомянул о перезапуске apache, но, думаю, я никогда прямо не заявлял, что использую apache.   -  person jonathanm    schedule 01.09.2012
comment
о, и apache 2.2.20, если это поможет   -  person jonathanm    schedule 01.09.2012
comment
Динамическая загрузка больше недоступна для apache2handler. Вот почему вы не можете заставить его работать. Более важным, чем сервер (и его версия), на самом деле является тип модуля SAPI, здесь вы используете модуль apache для PHP. Это означает, что PHP выполняется внутри apache, а не в его собственном процессе, как с (F) CGI или в CLI. dl() отключен по соображениям безопасности. Вы не хотите, чтобы новые вещи загружались в контексте процесса вашего веб-сервера;) - Или лучше :( в вашем случае, потому что вы не заставите его работать. Однако, поскольку вы можете редактировать файл ini, вы можете просто загрузить расширение   -  person hakre    schedule 01.09.2012
comment
Отлично - откуда ты это знаешь? документация есть где-нибудь? если вы сделаете ответ со ссылкой на то, что где-то говорится, что apache2handler не поддерживает динамическую загрузку, я отмечу это правильно :)   -  person jonathanm    schedule 01.09.2012
comment
В руководстве есть информация ;) Я добавил это как ответ, надеюсь, теперь это вам более понятно.   -  person hakre    schedule 01.09.2012


Ответы (1)


Эта функция была удалена из некоторых SAPI в PHP 5.3. -- dl()

Поэтому, если у вас параметр ini enable_dl установлен на on, но он по-прежнему не работает, значит, он отключен в используемом вами SAPI.

Если вам интересно, какие SAPI имеются в виду, журнал изменений на той же странице более подробный:

Единственными SAPI, которые позволяют dl(), являются CLI и Embed.

Вы не используете ни один из этих двух. Вместо этого используйте директивы загрузки расширений, и все в порядке. .

person hakre    schedule 01.09.2012
comment
О, я думал, у вас есть некоторые знания, специфичные для apache2handler. Это достаточно хорошо — хотя вы снова использовали термин «отключен» в отношении SAPI — весь смысл вопроса в том, что он не просто отключен, но и полностью недоступен. - person jonathanm; 04.09.2012
comment
Если он отключен на уровне движка PHP, вам кажется, что он полностью недоступен. Фактически, эта функция все еще находится в вашем двоичном файле php, но действительно отключена (на уровне движка), это не означает, что есть настройка ini, которую вы можете снова включить. Так что вопрос только в формулировках, иногда бывает непросто описать понятные всем технические обстоятельства, поэтому и спрашиваем ;) - person hakre; 16.09.2012
comment
@hakre, что за SAPI Embed? - person Pacerier; 05.04.2015
comment
@Pacerier: я думаю, для встраивания PHP, например, в качестве механизма сценариев в ваши собственные двоичные файлы. - person hakre; 05.04.2015
comment
@hakre, нет, очень вероятно, что в документации речь идет о конкретном SAPI под названием Embed. - person Pacerier; 06.04.2015
comment
@Pacerier: Что может понадобиться, если вы хотите встроить PHP в качестве механизма сценариев? - person hakre; 06.04.2015