Я пытаюсь загрузить 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.
Согласно 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-Maintainer-zts (которые должны переключить режим безопасности потоков) делают НЕ существуют в PHP 5.2.x
Вы можете управлять режимом безопасности потоков, выполнив следующие действия:
Я нашел это, потому что установка пакета apache2-dev в моей системе (Ubuntu) автоматически устанавливает apache2-thread-dev, apxs2 которого сообщает системе сборки PHP, что нужно создавать с поточной безопасностью. Поэтому было решено напрямую установить пакет apache2-prefork-dev. (Кредиты за это идут на Амр-Мостафа)
Описанное выше поведение также применимо к debian. Итак, удаление apache-tread-dev и установка apache2-prefork-dev сделали сделку!