Apache-2.2

自編譯php時php zend_extension被忽略

  • July 27, 2012

我正在嘗試將 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

然而,php.ini 中的 zend_extension 指令被完全忽略了。如果我使用不存在的路徑,我什至都不會收到錯誤消息。使用預編譯的 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-version 5.2.16。

解決方案:

根據Zend Optimizer 使用者指南

如果啟用了以下 PHP 設置,Zend Optimizer 將不會執行:

  • 調試模式- 檢查您的 PHP 是否在非調試模式下編譯 - 這可以通過查看 phpinfo() 函式輸出的頂部並檢查“調試建構”行(舊 PHP 版本中的 ZEND_DEBUG)來檢查 - 它應該說“不”。
  • 執行緒安全- 檢查您的 PHP 是否在 Windows 的 ZTS 模式和 UNIX 的非 ZTS 模式下編譯。這可以通過查看 phpinfo() 函式的頂部並檢查“執行緒安全”行來檢查——對於 Unix 應該說“禁用”,對於 Windows 應該說“啟用”。
  • 啟用版本控制- 檢查您的 PHP 是否在沒有啟用版本控制設置的情況下編譯。這可以通過查看 phpinfo() 函式的頂部並檢查“配置命令”部分中是否存在名為“–enable-versioning”的行來檢查 - 如果確實存在,則應在不使用此選項的情況下編譯 PHP .

PHP 5.2.x 中不存在配置選項 –disable-zts 和 –disable-maintainer-zts(應該打開執行緒安全模式)

您可以通過執行以下操作來控制執行緒安全模式:

我找到了,這是因為在我的系統(Ubuntu)上安裝 apache2-dev 包會自動安裝 apache2-thread-dev,它的 apxs2 告訴 PHP 建構系統使用執行緒安全進行建構。因此,解決方案是直接安裝 apache2-prefork-dev 包。(這歸功於 amr-mostafa

上述行為也適用於 debian。所以刪除 apache-tread-dev 並安裝 apache2-prefork-dev 就可以了!

引用自:https://serverfault.com/questions/411675