Homebrew安装的PHP7不能在macOS上使用Apache

时间:2016-09-12 17:53:31

标签: php macos apache

我正在尝试升级到我通过自制软件安装的php7。

在CLI中,php -v返回

PHP 7.0.10 (cli) (built: Aug 21 2016 19:14:33) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

但是对于localhost,firefox会在加载页面时出现问题,我无法查看localhost / phpinfo.php;如果我将模块线交换回php5,它可以正常工作。

这是我的apache2 / httpd.conf的一个pastebin http://pastebin.com/950yC7wA,我不知道如何修复它。

  • osx版本El Capitan 10.11

10 个答案:

答案 0 :(得分:12)

虽然Homebrew是一个很好的工具,但有时不需要它。

我在Installing Apache, PHP, and MySQL on Mac OS X的帖子中提到,OS X预装了Apache和PHP。因此,您只需配置并启用它们即可。

不幸的是,从Mac OS 10.11( El Capitan )开始,PHP版本仍为5.5。我想这会改变10.12( Sierra ),因为PHP 5.5是EOL。但是,它可能只是PHP 5.6。

对于安装PHP 7,我建议使用PHP OSX。它们为PHP版本5.3到7.1(最新版本)提供软件包安装。它适用于Mac OS 10.6+( Snow Leopard )。

由于它是一个软件包安装,因此它可以直接使用默认的Apache安装。您只需更新PATH并修改其PHP ini文件即可。这两个都在他们的FAQ中列出。

如果您需要更多分步教程,请查看我最近在Updating PHP on Mac OS X上的帖子。

答案 1 :(得分:12)

确保:

  • 您已安装PHP并支持Apache模块(请参阅:brew options php71)。

    E.g。 <{1}}或--with-httpd22已包含在内。

  • 您已按照--with-httpd24

    的说明操作
    brew info php71
  • 您通过==> Caveats To enable PHP in Apache add the following to httpd.conf and restart Apache: LoadModule php7_module /usr/local/opt/php71/libexec/apache2/libphp7.so <FilesMatch .php$> SetHandler application/x-httpd-php </FilesMatch> Finally, check DirectoryIndex includes index.php DirectoryIndex index.php index.html 重新启动了Apache。

有关分步教程,请参阅:Setup Apache, MySQL and PHP using Homebrew on macOS Sierra

疑难解答

  • 当某些内容无效时,请通过以下方式实时查看日志:

    sudo apachectl restart

    然后启动/重启服务器。

    注意:完成后,点击 Control - C 退出tail -f /usr/local/var/log/apache2/*error*

答案 2 :(得分:4)

如果您在OS X Sierra上使用Apache,则默认情况下php7不再附带apache模块。

  

随着macOS Sierra的发布,Apache模块现在默认不构建。如果要在系统上构建它   你必须使用--with-apache选项安装php。有关详细信息,请参阅brew选项php70。

尝试使用标志重新安装:

brew reinstall php70 --with-apache

答案 3 :(得分:3)

运行$ apachectl -t会显示当前配置的任何问题。我跑的时候得到了这个:

  

httpd:/private/etc/apache2/httpd.conf第171行的语法错误:   无法将/usr/local/opt/php70/libexec/apache2/libphp7.so加载到   server:dlopen(/usr/local/opt/php70/libexec/apache2/libphp7.so,10):   未找到符号:_ldap_control_find \ n引用自:   /usr/local/opt/php70/libexec/apache2/libphp7.so\n期望:   /System/Library/Frameworks/LDAP.framework/Versions/A/LDAP\n in   /usr/local/opt/php70/libexec/apache2/libphp7.so

我可以确认this workaround posted on github,安装没有LDAP支持的软件包可以防止出现此错误:

brew reinstall php70 --without-ldap

答案 4 :(得分:3)

不能直接解决您的问题,但我在OS X上遇到过无数问题。最近,在升级到El Capitan之后,他们试图让OCI库工作。

我现在放弃尝试使用它并开始使用docker进行开发。我发现它是一个更好的解决方案,您甚至可以在相同的代码库上设置多个环境,这对于测试不同的版本非常有用。

Docker非常容易在OS X上设置,并且在存储库中有大量预先构建的容器,您只需安装并将挂载点设置到源目录并使用它为您提供访问的端口。

答案 5 :(得分:3)

我遇到了同样的问题,当我在/etc/apache2/httpd.conf

中注释掉这一行时,它就消失了
LoadModule php5_module libexec/apache2/libphp5.so

答案 6 :(得分:1)

我今天发现了一个在httpd.conf文件中加载不同php库的新途径(/usr/local/etc/httpd/httpd.conf):

### OLD VERSION (NOT WORKING NOW)  ###
#LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so
#LoadModule php7_module    /usr/local/opt/php70/libexec/apache2/libphp7.so
#LoadModule php7_module    /usr/local/opt/php71/libexec/apache2/libphp7.so
#LoadModule php7_module    /usr/local/opt/php72/libexec/apache2/libphp7.so

### NEW VERSION ###
#LoadModule php5_module    /usr/local/opt/php56/lib/httpd/modules/libphp7.so
#LoadModule php7_module    /usr/local/opt/php70/lib/httpd/modules/libphp7.so
#LoadModule php7_module    /usr/local/opt/php71/lib/httpd/modules/libphp7.so
LoadModule php7_module    /usr/local/opt/php72/lib/httpd/modules/libphp7.so

答案 7 :(得分:0)

我知道这是一个非常古老的主题,但是当你更新PHP时你还需要更新Apache confing - 例如:

LoadModule php5_module libexec/apache2/libphp5.so

更改为:

LoadModule php7_module libexec/apache2/libphp7.so

答案 8 :(得分:0)

对于可能会遇到此问题的人们,请确保您能够使用“ apachectl restart”重新启动apache。就我而言,我必须首先使用命令“ httpd stop”停止httpd的所有进程,然后使用“ apachectl start”启动apache。

答案 9 :(得分:0)

从PHP 5.6升级到7.2时,我遇到了类似的问题。

在httpd.conf中将LoadModule php5_module /usr/local/php5/libphp5.so注释掉 并取消注释LoadModule php7_module /usr/local/Cellar/php@7.2/7.2.22_1/lib/httpd/modules/libphp7.so

对我有用的真正技巧是当我运行以下命令来查找由Apache加载的所有模块时:

sudo /usr/sbin/httpd -t -D DUMP_MODULES

这是我发现php7和php5都被加载的地方。浏览完文件后,还有一个引用了php5的conf。

删除该引用并重新启动apache之后,我就可以运行了。