MacOS HighSierra - 如何告诉 Apache 使用 PHP 7.2.9 而不是 PHP 7.1.16

Posted

技术标签:

【中文标题】MacOS HighSierra - 如何告诉 Apache 使用 PHP 7.2.9 而不是 PHP 7.1.16【英文标题】:MacOS HighSierra - How to tell Apache to use PHP 7.2.9 instead of PHP 7.1.16 【发布时间】:2019-01-31 06:14:10 【问题描述】:

在终端中,如果我输入“php -v”,我会得到: —— PHP 7.2.9 (cli) (内置: Aug 22 2018 02:58:50) (NTS) 版权所有 (c) 1997-2018 PHP 集团 Zend Engine v3.2.0,版权所有 (c) 1998-2018 Zend Technologies 使用 Zend OPcache v7.2.9,版权所有 (c) 1999-2018,由 Zend Technologies 提供 php -v in Terminal ——

在 Safari 中,如果我输入“localhost/phpinfo.php”(包含行: 的文件),我会得到: —— PHP 版本 7.1.16 phpinfo() output in Safari ——

phpMyAdmin 告诉我: 网络服务器

• Apache/2.4.33 (Unix) PHP/7.1.16
• Database client version: libmysql - mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $
• PHP extension: mysqliDocumentation curlDocumentation mbstringDocumentation
• PHP version: 7.1.16

WebServer infos in phpMyAdmin ——

如何告诉 Apache 使用 7.2.9 而不是 7.1.16?

我的目标是在 PHP 编程时摆脱这个错误(是的,我是新手): 致命错误:未捕获的错误:调用 /Users/David/Sites/graphic_example.php:7 中未定义的函数 imagettfbbox() 堆栈跟踪:第 7 行的 /Users/David/Sites/graphic_example.php 中的 #0 main

——

你能帮我详细的过程吗?

非常感谢您的帮助!!

【问题讨论】:

【参考方案1】:

首先,确认 PHP7.2 的安装路径。 在大多数情况下,它应该是/usr/local/opt/php@7.2,但可能会有一些差异,如果您不确定,请检查 .*shrc(* = your shell, eg .zshrc, .bashrc) 文件,它应该有像PATH="/usr/local/opt/php@7.2/bin 这样的行。

其次,复制这一行(在我的情况下):usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so,根据我在第一步中提到的内容,您可能需要更改此行中的某些内容以适应情况(例如不同的路径名) 你见过。

第三,编辑你的 Apache 配置文件:sudo vi /etc/apache2/httpd.conf (此外,这里可能存在一些差异,但不应有太多差异)。然后,找到该行:LoadModule php7_module libexec/apache2/libphp7.so。这是原始的 PHP7 模块,也就是 7.1.XX 模块。我们需要在此行的开头添加# 将其注释掉,使其变为#LoadModule php7_module libexec/apache2/libphp7.so

最后,我们将添加一个新行LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so,路径应该来自第二步。

所有事情都完成后,我们可以先运行sudo apachectl configtest 以确保一切正常。然后,运行sudo apachectl restartphpinfo(); 应该会显示您分配的正确 PHP 版本。

但是,这可能无法成功解决您的问题。还有一些问题需要解决:需要设置PHP配置,需要设置并运行PHP-FHM。

因此,您可以通过具有比较功能的编辑器轻松比较两个php.ini 文件(/etc/php.ini/usr/local/etc/php/7.2/php.ini),以确保新文件已设置为“正常”状态。

还有一个是设置PHP-FPM,因为内置的PHP已经有PHP-FPM功能了,也就是说新版的也应该开启这个功能,否则可能一切都不顺利。我们需要通过注释/取消注释或添加以下行再次修改 Apache 配置文件,您应该注意到 'php7_module' 再次被注释掉,这是正常做法。

#LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_fcgi_module libexec/apache2/mod_proxy_fcgi.so
LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
LoadModule rewrite_module libexec/mod_rewrite.so
Include /private/etc/apache2/extra/httpd-vhosts.conf
<FilesMatch .php$>
    SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

修改后记得重启Apache服务器。然后,运行这些命令,或者只运行最后一个命令并重新启动您的 Mac,然后一切都应该像往常一样:

sudo /usr/local/opt/php@7.2/sbin/php-fpm --fpm-config /usr/local/etc/php/7.2/php-fpm.conf
sudo cp /usr/local/opt/php@7.2/homebrew.mxcl.php@7.2.plist /Library/LaunchDaemons/homebrew.mxcl.php@7.2.plist

【讨论】:

以上是关于MacOS HighSierra - 如何告诉 Apache 使用 PHP 7.2.9 而不是 PHP 7.1.16的主要内容,如果未能解决你的问题,请参考以下文章

当`sudo`和`bypass`不起作用时如何避免macOS上的“不允许操作”

不需要制作安装盘!教你在 MacOS 系统下安装 High Sierra 系统到另一个分区

Homebrew 在 macOS High Sierra 中没有列出 Xcode CLT

下载macOS high sierra失败,使用已购页面再试一次怎么弄

在 OS X 10.11 El Capitan、macOS 10.12 Sierra、macOS 10.13 High Sierra (< 10.13.3) 上安装 pecl 和 pear

C++ (macOS) 的编译错误