我使用的是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
用于CLI/etc/php.ini
用于Web
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
文件。
2条答案
按热度按时间r6vfmomb1#
对我来说,它是通过这些步骤工作的:
1.在“phpinfo()”页面搜索
extension_dir
,得到一个路径/usr/lib/php/extensions/no-debug-non-zts-20160303
1.通过执行
ls -lh /usr/lib/php/extensions/no-debug-non-zts-20160303
,我找到了“opcache.so”,我猜它是在升级到“High Sierra”时安装的1.创建“/etc/php.ini”(通过复制“/etc/php.ini.default”),并修改:
1.重新启动Apache,模块“opcache”被启用
编辑/结论
由于Mac OS High Sierra默认安装了“opcache扩展”,因此在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部分看起来像:
z0qdvdin2#
MacOS上PHP Opcache错误
这件事发生在我身上,我希望它能帮助其他人。
当运行php cli命令时,显示有关opcache加载的警告:
版本信息:
背景
我为一个遗留项目安装了php 5.6。然后我切换到php 8.2。我从php.net下载了5.6。我使用
brew
安装了php 8.2。(剧透警告,5.6安装似乎留下了一个额外的ini文件)。查找opcache.so/php.ini
1.通过查看
phpinfo()
找到您的php.ini。1.找到所有版本的opcache。我使用的是
locate
,你的mac可能会启用,也可能不会启用。另一个选择是使用find / -name opcache.so
,但这可能需要一段时间,可能需要通过sudo
运行。phpinfo()输出
我的
phpinfo()
显示了一个额外的ini文件解析:locate opcache.so
以下是opcache.so在我的系统中找到的所有www.example.com:
有三个。8.2opcache.so(我想在php 8.2中使用的那个),5.6 opcache.so(第二个包含在
brew
中,因为我也使用brew安装了5.6),然后php.net安装了5.7 opcache.so。现在我们知道了(a)为什么php找不到它(错误的ini文件内容)和(B)我们想要使用的ini文件的路径),我们只需更新ini文件,使其指向正确的opcache.so文件。
关闭jj,修复问题
额外的ini文件指向错误的opcache.so文件。
结果: