我正在尝试将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指令被完全忽略。 如果我使用不存在的path,我甚至不会收到错误消息。 当使用预编译的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在另一个网站上提到的--disable-maintainer-zts --disable-safe-mode 。 我selectphp-5.2.6,因为它是(工作)预编译php的版本,但我也尝试过php-version 5.2.16。
根据Zend Optimizer用户指南
如果启用以下PHP设置,Zend Optimizer将不会运行:
- debugging模式 – 检查您的PHP是否以非debugging模式编译 – 可以通过查看phpinfo()函数输出的顶部并检查“Debug Build”行(ZEND_DEBUG在旧版本的PHP中)来检查 – 应该说“没有”。
- 线程安全性 – 检查您的PHP是否针对Windows以ZTS模式编译,以及针对UNIX是否为非ZTS模式。 这可以通过查看phpinfo()函数的顶部并检查“线程安全”行来检查 – 它应该被称为Unix的“disabled”和Windows的“enabled”。
- 启用版本控制 – 检查您的PHP编译没有启用版本设置。 这可以通过查看phpinfo()函数的顶部并检查configuration命令部分中是否存在名为“–enable-versioning”的行来检查 – 如果确实存在,则应该在没有此选项的情况下编译PHP 。
configuration选项–disable-zts和–disable-maintainer-zts(应该转为线程安全模式)不在PHP 5.2.x中
您可以通过执行以下操作来控制线程安全模式:
我发现它是因为在我的系统(Ubuntu)上安装apache2-dev包会自动安装apache2-thread-dev,它的apxs2告诉PHP构build系统在线程安全的基础上构build。 因此,解决scheme是直接安装apache2-prefork-dev软件包。 (为此的信贷去amr-mostafa )
上面描述的行为也适用于debian。 所以删除apache-tread-dev并安装apache2-prefork-dev就完成了交易!