Homebrew安装的PHP7不适用于macOS上的Apache

Art*_*hur 26 php apache macos

我正在尝试升级到我通过自制软件安装的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
Run Code Online (Sandbox Code Playgroud)

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

这是我的apache2/httpd.conf 的一个pastebin http://pastebin.com/950yC7wA,我不知道如何解决这个问题.

  • osx版El Capitan 10.11

ken*_*orb 14

确保:

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

    例如--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
    
    Run Code Online (Sandbox Code Playgroud)
  • 你重启Apache了sudo apachectl restart.

有关分步教程,请参阅:在macOS Sierra上使用Homebrew设置Apache,MySQL和PHP.

故障排除

  • 当某些东西不起作用时,通过以下方式实时检查日志:

    tail -f /usr/local/var/log/apache2/*error*
    
    Run Code Online (Sandbox Code Playgroud)

    然后启动/重启服务器.

    注意:完成后,点击Control- C退出tail.


Jas*_*ary 13

虽然Homebrew是一个很好的工具,但有时候它是不必要的.

在Mac OS X上的安装Apache,PHP和MySQL的帖子中提到,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中列出.

如果您需要更多的分步教程,请查看我最近关于在Mac OS X更新PHP的帖子.


Rav*_*dra 7

您可以将brew php模块添加到MacOS Monterey apache。正确执行所有步骤。

安装 homebrew php (brew install php /brew install php@7.4) 并在 /etc/apache2/httpd.conf 中添加以下行后

LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so
#LoadModule php7_module /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so


<FilesMatch \.php$>
        SetHandler application/x-httpd-php
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

重要信息:您需要通过运行以下命令来测试 apache2 配置。如果你不运行它,你永远不会明白为什么它不起作用。

sudo apachectl configtest
Run Code Online (Sandbox Code Playgroud)

如果您收到如下错误:没有代码签名权限

[so:error] [pid 69894] AH06665: No code signing authority for module at /.../libphp[7].so specified in LoadModule directive.
Run Code Online (Sandbox Code Playgroud)

您需要按照此处的教程或https://blog.phusion.nl/2020/12/22/future_of_macos_apache_modules/创建本地 CA 文件和证书,并使用以下命令对 libphp.so 文件进行签名。注意:将 Ravi 替换为您的证书名称

codesign -s "Ravi" --force --keychain ~/Library/Keychains/login.keychain-db /opt/homebrew/opt/php/lib/httpd/modules/libphp.so
# codesign -s "Ravi" --force --keychain ~/Library/Keychains/login.keychain-db /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so
Run Code Online (Sandbox Code Playgroud)

现在返回到 /etc/apache2/httpd.conf 并在 LoadModule 行末尾添加“Ravi”(您的证书名称),如下所示

LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so "Ravi"
#LoadModule php7_module /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so "Ravi"
Run Code Online (Sandbox Code Playgroud)

完成后运行

sudo apachectl configtest
Run Code Online (Sandbox Code Playgroud)

你应该在最后看到(忽略通知行)

Syntax OK
Run Code Online (Sandbox Code Playgroud)


Flo*_*ild 5

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

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

尝试使用标志重新安装:

brew reinstall php70 --with-apache
Run Code Online (Sandbox Code Playgroud)

  • `--with-apache` 选项已弃用,请改用 `--with-httpd24`。 (5认同)

小智 5

我遇到了同样的问题,当我在中注释掉这一行时它就消失了 /etc/apache2/httpd.conf

LoadModule php5_module libexec/apache2/libphp5.so
Run Code Online (Sandbox Code Playgroud)


HPi*_*rce 3

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

httpd: /private/etc/apache2/httpd.conf 第 171 行出现语法错误:无法将 /usr/local/opt/php70/libexec/apache2/libphp7.so 加载到服务器中: 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/ /usr/local/opt/php70/libexec/apache2/libphp7.so 中的 LDAP.framework/Versions/A/LDAP\n

我可以确认这个解决方法发布在 github 上,安装不支持 LDAP 的软件包将防止出现此错误:

brew reinstall php70 --without-ldap
Run Code Online (Sandbox Code Playgroud)

  • @阿瑟·达恩。我不确定我是否可以利用您提供的信息提供更多帮助,因为这对我来说效果很好。您应该检查一些错误日志 - apache 和 php 的错误日志,如果您发现任何有趣的内容,请[编辑]您的问题。 (2认同)