如何在MacOS High Sierra上安装PHP Opcache?

oipij1gg  于 2023-04-19  发布在  PHP
关注(0)|答案(2)|浏览(137)

我使用的是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文件。

r6vfmomb

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”),并修改:

[opcache]
zend_extension = opcache.so
opcache.enable = 1

1.重新启动Apache,模块“opcache”被启用

编辑/结论

由于Mac OS High Sierra默认安装了“opcache扩展”,因此在Mac OS High Sierra上启用opcahe的解决方案是:

  • 如果你没有“/etc/php.ini”,只需复制默认配置: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
z0qdvdin

z0qdvdin2#

MacOS上PHP Opcache错误

这件事发生在我身上,我希望它能帮助其他人。
当运行php cli命令时,显示有关opcache加载的警告:

$ php -v
Failed loading /usr/local/opt/php/lib/php/20220829/opcache.so:  dlopen(/usr/local/opt/php/lib/php/20220829/opcache.so, 0x0009): tried: '/usr/local/opt/php/lib/php/20220829/opcache.so' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/opt/php/lib/php/20220829/opcache.so' (no such file), '/usr/local/opt/php/lib/php/20220829/opcache.so' (no such file)
PHP 8.2.4 (cli) (built: Mar 16 2023 16:25:32) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.4, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.4, Copyright (c), by Zend Technologies

版本信息:

  • MacOS Ventura 13.3.1(但我很确定这代表任何MacOS版本)。
  • Homebrew 4.0.11

背景

我为一个遗留项目安装了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文件解析:

[opcache]
zend_extension=/usr/local/opt/php/lib/php/20220829/opcache.so
  • 更多关于这下面,现在,让我们找出什么opcache.so存在... *.

locate opcache.so

以下是opcache.so在我的系统中找到的所有www.example.com:

$ locate opcache.so
/usr/local/Cellar/php/8.2.4/lib/php/20220829/opcache.so
/usr/local/Cellar/php@5.6/5.6.40_6/lib/php/20131226/opcache.so
/usr/local/php5-7.3.8-20190811-205217/lib/php/extensions/no-debug-non-zts-20180731/opcache.so

有三个。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文件。

  • 编辑opcache ini文件并修复php opcache:*
[opcache]
;zend_extension=/usr/local/opt/php/lib/php/20220829/opcache.so
zend_extension=/usr/local/Cellar/php/8.2.4/lib/php/20220829/opcache.so
  • (分号是注解;我把旧的一行留在那里供将来参考)。

结果:

$ php -v
PHP 8.2.4 (cli) (built: Mar 16 2023 16:25:32) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.4, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.4, Copyright (c), by Zend Technologies
  • (现在错误不再明显,因为额外解析的ini文件指向正确的opcache.so文件。)*

相关问题