解决方案:

解决方案:

我正在尝试将 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 版本 5.2.16。

答案1

解决方案:

根据Zend Optimizer 用户指南

如果启用以下 PHP 设置,Zend Optimizer 将不会运行:

  • 调试模式- 检查您的 PHP 是否在非调试模式下编译 - 可以通过查看 phpinfo() 函数输出的顶部并检查“调试构建”行(旧 PHP 版本中的 ZEND_DEBUG)来检查 - 它应该显示“否”。
  • 线程安全- 检查您的 PHP 是否在 Windows 上以 ZTS 模式编译,在 UNIX 上以非 ZTS 模式编译。这可以通过查看 phpinfo() 函数的顶部并检查“线程安全”行来检查 - 对于 Unix,它应该显示“已禁用”,对于 Windows,它应该显示“已启用”。
  • 启用版本控制- 检查您的 PHP 是否在未启用版本控制设置的情况下编译。这可以通过查看 phpinfo() 函数的顶部并检查配置命令部分中是否存在名为“--enable-versioning”的行来检查 - 如果存在,则应在不使用此选项的情况下编译 PHP。

配置选项 --disable-zts 和 --disable-maintainer-zts (应关闭线程安全模式)不是存在于 PHP 5.2.x 中

您可以通过执行以下操作来控制线程安全模式:

我发现这是因为在我的系统(Ubuntu)上安装 apache2-dev 包会自动安装 apache2-thread-dev,其 apxs2 会告诉 PHP 构建系统在构建时启用线程安全。因此,解决方案是直接安装 apache2-prefork-dev 包。(本文版权归于阿姆尔-穆斯塔法

上述行为也适用于 debian。因此,删除 apache-tread-dev 并安装 apache2-prefork-dev 即可解决问题!

相关内容