我正在使用Mac High Sierra附带的标准Apache和PHP 7.1(不是Homebrew)。但是,看起来这个版本没有启用Opcache,即使它应该作为PHP 7的标准配置。它甚至在“模块作者”下的phpinfo()
中列出,但没有显示它实际安装的部分。调用opcache_get_status
会产生致命错误。
我通过Homebrew安装了扩展,并链接了opcache.so
文件。它似乎在CLI上工作,但在Apache中没有。出于某种原因,CLI和Web使用不同的ini文件:
/usr/local/etc/php/7.1/php.ini
/etc/php.ini
网站CLI正在解析附加文件,包括/usr/local/etc/php/7.1/conf.d/ext-opcache.ini
,而php -i
则显示Opcache。但是浏览器中的phpinfo()
没有 - 没有解析额外的ini文件。
我目前在/etc/php.ini
有这个:
[opcache]
zend_extension="/usr/local/opt/php71-opcache/opcache.so"
opcache.enable=1
但仍然没有。我跟着xdebug的完全相同的过程,它运行良好。我错过了什么?
我想知道使用Homebrew版本的PHP会更容易。但我似乎没有所需的.so
文件。各种教程说要把它放在Apache的httpd.conf
中:
LoadModule php7_module /usr/local/opt/php71/libexec/apache2/libphp7.so
但是libexec
目录不存在。有lib
但这个或任何其他目录都没有任何.so
文件。
对我来说,它通过以下步骤工作:
extension_dir
,我有一条路径/usr/lib/php/extensions/no-debug-non-zts-20160303
ls -lh /usr/lib/php/extensions/no-debug-non-zts-20160303
,我找到了“opcache.so”,我猜它升级到“High Sierra”时安装了[opcache] zend_extension = opcache.so opcache.enable = 1
编辑/结论
由于默认情况下在Mac OS High Sierra上安装了“opcache extension”,因此在Mac OS High Sierra上启用opcahe的解决方案是:
sudo cp /etc/php.ini.default /etc/php.ini
zend_extension = opcache.so
添加到/etc/php.ini
并设置“opcache”enable:php.ini opcache部分看起来像:
[opcache]
zend_extension = opcache.so
opcache.enable = 1