php zend_extension игнорируется при самостоятельной компиляции php
Я пытаюсь загрузить Zend Optimizer в мой самостоятельно скомпилированный php.
Вот как я собираю свой php:
wget http://museum.php.net/php5/php-5.2.6.tar.gz
tar xvfz php-5.2.6.tar.gz
cd php-5.2.6
./configure --prefix=/usr/local/php --with-apxs2=/usr/bin/apxs2 --with-config-file-path=/etc/php5/apache2 --with-config-file-scan-dir=/etc/php5/apache2/conf.d
make install
Однако директива zend_extension в php.ini полностью игнорируется. Если я использую несуществующий путь, я все еще даже не получаю сообщение об ошибке. При использовании скомпилированной библиотеки php все работает нормально.
В php.ini я тоже установил
error_reporting = E_ALL & ~E_NOTICE
display_startup_errors = On
log_errors = On
error_log = /var/log/php_errors.log
error_log = /var/log/php_errors.log записывается только при возникновении ошибки в php-файле.
В apache.conf я установил
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel debug
Я также попытался скомпилировать с --disable-maintainer-zts --disable-safe-mode
который был упомянут на другом сайте. Я выбираю php-5.2.6, потому что это версия (работающей) предварительно скомпилированной php, но я также попробовал php-версию 5.2.16.
1 ответ
Решение:
Согласно руководству пользователя Zend Optimizer
Zend Optimizer не будет работать, если включены следующие настройки PHP:
- Режим отладки - Проверьте, что ваш PHP был скомпилирован в режиме без отладки. Это можно проверить, посмотрев верхнюю часть вывода функции phpinfo() и проверив строку "Debug Build" (ZEND_DEBUG в более старых версиях PHP). "нет".
- Потокобезопасность - убедитесь, что ваш PHP был скомпилирован в режиме ZTS для Windows и не в ZTS для UNIX. Это можно проверить, посмотрев на верхнюю часть функции phpinfo() и проверив строку "Thread Safety" - она должна сказать "отключено" для Unix и "включено" для Windows.
- Включить управление версиями - убедитесь, что ваш PHP скомпилирован без параметра "Включить управление версиями". Это можно проверить, посмотрев верхнюю часть функции phpinfo() и проверив, существует ли строка с именем "--enable-versioning" в разделе "Configure Command" - если она существует, PHP должен быть скомпилирован без этой опции,
Параметры настройки --disable-zts и --disable-keeper-zts (которые должны включить режим безопасности потоков) НЕ существуют в PHP 5.2.x
Вы можете управлять режимом Thread-Safety, выполнив следующие действия:
Я обнаружил это потому, что при установке пакета apache2-dev в моей системе (Ubuntu) автоматически устанавливается apache2-thread-dev, чей apxs2 сообщает системе сборки PHP о необходимости сборки с безопасностью потоков. Поэтому решение состояло в том, чтобы напрямую установить пакет apache2-prefork-dev. (Кредиты для этого идут в Амр-Мостафу)
Описанное выше поведение также применимо к debian. Таким образом, удаление apache-tread-dev и установка apache2-prefork-dev сделали свое дело!