【问题标题】:PHP not working after MacOS update to High SierraMacOS 更新到 High Sierra 后 PHP 无法正常工作
【发布时间】:2018-03-08 06:37:38
【问题描述】:

我将我的 mac 更新为最新版本的 os。当我尝试运行 PHP 项目时,浏览器会显示 php 代码而不是解释它。我注意到在新的操作系统中,php 的版本是 7.1。我使用自制软件安装了 5.6(我需要它)并将 httpd.conf 中的模块更改为:

LoadModule php5_module /usr/local/Cellar/php56/5.6.31_7/libexec/apache2/libphp5.so

这里是 apache 错误日志:

[2017 年 9 月 26 日星期二 23:59:38.600410] [mpm_prefork:notice] [pid 980] AH00169:捕获 SIGTERM,正在关闭 [Tue Sep 26 23:59:38.622998 2017] [core:notice] [pid 980] AH00060: seg fault 或类似的讨厌 在父进程 AH00557 中检测到错误:httpd: MacBook-Pro-Kamil.local AH00558 的 apr_sockaddr_info_get() 失败: httpd:无法可靠地确定服务器的完全合格 域名,使用 127.0.0.1。全局设置“ServerName”指令 禁止显示此消息 [Tue Sep 26 23:59:48.838005 2017] [mpm_prefork:notice] [pid 991] AH00163: Apache/2.4.27 (Unix) PHP/5.6.31 已配置 -- 恢复正常操作 [9 月 26 日星期二 23:59:48.838097 2017] [核心:通知] [pid 991] AH00094:命令行: '/usr/sbin/httpd -D FOREGROUND'

【问题讨论】:

    标签: php linux macos apache


    【解决方案1】:

    将以下行添加到我的 httpd.conf 文件中解决了问题:

    AddType x-httpd-php .php
    AddHandler application/x-httpd-php .php .php5
    

    希望这会有所帮助!

    编辑:只是为了提供更多细节,正如 crmpicco 建议的那样,我还用我的旧 Sierra 文件替换了新的 High Sierra httpd.conf 和 httpd-vhosts.conf 文件,如下所示:

    mv httpd-vhosts.conf~previous httpd-vhosts.conf
    mv httpd.conf~previous httpd.conf
    

    即使完成所有这些并重新启动 Apache,它仍然无法正常工作 - 必须重新启动才能使所有内容生效。

    【讨论】:

      【解决方案2】:

      MacOS 升级过程似乎将您的 Apache 配置移到 ~previous 文件中,同时创建新的、全新的版本。你只需要把它们移回来。这对我有用:

      mv httpd-ssl.conf~previous httpd-ssl.conf
      mv httpd-vhosts.conf~previous httpd-vhosts.conf
      mv httpd.conf~previous httpd.conf
      

      检查语法。

      apachectl -S
      

      重启 Apache。

      apachectl restart
      

      【讨论】:

      • 我试过这个,但我的答案中没有这些行,它仍然不起作用。也许您的旧配置文件中有这些行?另外,我通常喜欢从新的配置文件开始并添加我需要的东西,以防添加新的东西。
      • 这让我很生气,但这解决了它。
      【解决方案3】:

      在 HighSierra 中使用 PHP5.6

      1. 启用共享 Apache Handler 模块的构建 确保您安装了最新版本的 PHP56 并启用了 http 选项(根据需要安装/升级/重新安装)

        $brew 升级 php56 --with-httpd

      2. 在 Apache2 配置文件中链接模块 在 apache2 配置文件 /etc/apache2/httpd.conf 中添加以下语句

        LoadModule php5_module /usr/local/Cellar/php56/5.6.32_8/libexec/apache2/libphp5.so

      3. 添加 PHP5 配置文件

        从 php7.conf 复制一份

        $ cd /etc/apache2/other ; sudo cp php7.conf php5.conf

        将 php7_module 替换为 php5_module

      4. 重启 Apache 服务器

        $ sudo /usr/sbin/apachectl 重启

      【讨论】:

        【解决方案4】:

        您的问题似乎与 PHP 无关,而与您机器的域名有关。请注意消息“无法可靠地确定服务器的完全限定域名,使用 127.0.0.1。全局设置 'ServerName' 指令以禁止显示此消息。检查您的域设置httpd.conf 文件。 您还应该检查您的 /etc/hosts 文件是否存在任何冲突。

        This guide for installing and using Apache/MySQL/PHP via Homebrew has been immensely useful. 适用于 macOS Sierra,但也适用于 High Sierra。它还将向您展示如何安装多个 PHP 版本以及在它们之间来回切换的便捷方式,如果您感兴趣的话(或者只运行一个 PHP 版本)。

        与 Vagrant 或 MAMP 相比,我更喜欢 Homebrew 路线,因为它更接近原生安装并且使用的资源更少。希望对您有所帮助!

        【讨论】:

        • ServerName 消息只是一个警告。如果其他一切配置正确,它应该不会导致任何问题(我在最终修复之前运行了很长时间的本地环境并出现此警告)。
        【解决方案5】:

        这里使用 MAMP 和 php 5.6 也是一样:刚刚更新到 High Sierra(这可能是一个杂草太多的 Sierra..)Apache2 停止工作。

        几个小时后,我终于用这个命令解决了:

        cp /Applications/MAMP/bin/php/php5.6.25/conf/php.ini.temp /Applications/MAMP/bin/php/php5.6.25/conf/php.ini

        并将我的自定义更改重新应用到 php.ini。 (在我的例子中是 memory_limit 和 short_open_tag)

        重新启动 MAMP 并在第一次尝试时工作。

        【讨论】:

          【解决方案6】:

          添加后

          LoadModule php5_module /usr/local/Cellar/php56/5.6.31_7/libexec/apache2/libphp5.so
          

          你必须添加

          <IfModule mod_php5.c>
          # If php is turned on, we respect .php and .phps files.
          AddType application/x-httpd-php .php
          AddType application/x-httpd-php-source .phps
          
          # Since most users will want index.php to work we
          # also automatically enable index.php
          <IfModule mod_dir.c>
              DirectoryIndex index.html index.php
          </IfModule>
          

          给你的

          /etc/apache2/httpd.conf
          

          别忘了

          apachectl restart
          

          【讨论】:

            【解决方案7】:

            我也查看了自制选项,最后我决定使用 Vagrant。您可以将项目文件留在原处并使用 vagrant 在本地服务。我按照https://laravel.com/docs/5.5/homestead 和 Homestead.yaml 上的指南使用 laravel/homestead 框 - 您可以将相同的框用于 laravel 和 wordpress 等。它也是下一次 osx 升级的更多未来证明,您可以轻松选择逐个站点的php版本

            folders:
                - map: ~/Documents/www/mysite/
                  to: /home/vagrant/mysite
                  type: "nfs"
            sites:
                - map: mysite.app
                  to: /home/vagrant/mysite/dist
                  php: "5.6"
            

            并在 /etc/hosts/ 中添加

            192.168.10.10 mysite.app
            

            【讨论】:

              【解决方案8】:

              您可以下载支持 PHP 5.6.31 的 Xampp 版本并使用 Xampp 运行您的应用程序。

              如果你不想这样做,我认为你需要回到 MacOs Sierra,记住 PHP 5.6 已经很旧了,新系统是最新版本的!

              【讨论】:

              • 您这么说好像降级 PHP 不是一种选择,也不能同时运行 PHP5 和 PHP7。这是因为您知道这些事情都不可能发生,还是因为它超出了您的答案范围?
              • 我这么说是因为新的 MacO 在核心使用 PHP 7,所以,降级 PHP 可能是一场灾难
              • 正如 OP 所提到的,她/他正在使用 Brew 来处理 PHP 版本,所以这根本不是问题。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-06-10
              • 1970-01-01
              • 1970-01-01
              • 2022-11-09
              • 1970-01-01
              • 1970-01-01
              • 2017-04-11
              相关资源
              最近更新 更多