Назад | Перейти на главную страницу

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.

Решение:

Согласно 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 сделали сделку!