【问题标题】:Apache and Terminal runs 2 different php builds, on Mac OS 10.8Apache 和终端在 Mac OS 10.8 上运行 2 个不同的 php 构建
【发布时间】:2023-03-20 09:42:01
【问题描述】:

由于 Mac OS 10.8 有一个旧的 PHP 版本,我不得不安装一个从未安装过的 PHP 版本。所以我只编译 PHP 5.4.13。然后我在终端上执行一个 php -v ,它显示新的 php 版本正在运行。但是当我从浏览器执行 phpinfo 时,它会显示旧的 PHP 版本,即 PHP 5.3.x。这甚至在创建到新 php 构建的软链接之后, /opt/local/lib/php(旧的) -> /usr/bin/php(新的)

任何想法如何解决这个问题?

【问题讨论】:

  • 你试过MAMP吗?我认为这是在 OS X 上更新 PHP 版本的最快解决方案。
  • 是的,我有 MAMP,但我需要为 PHP 添加不同的扩展,但我找不到使用 MAMP 的方法
  • 你需要哪个扩展?您可以做的是下载源代码,对其进行编译并将其添加到 PHP.ini 文件中。这就是我通常在 OS X 上对 PHP 扩展所做的事情(我不使用 MAMP,我使用 OS X 提供的默认 PHP 版本)。

标签: php macos apache osx-mountain-lion


【解决方案1】:

我刚遇到同样的问题,想尝试需要 mcrypt 的 Laravel。

简而言之,我一直在使用 Mountain Lion 附带的内置 PHP 5.3.26,然后几个月后,在我更加熟悉 homebrew 之后,我用它安装了更新版本的 PHP。

brew update
brew upgrade
brew install php53 php53-mcrypt ...

我放了

<?php phpinfo(); 

进入 ~/Sites/info.php 然后去 localhost/info.php 查看我的 Apache+PHP 配置。在页面上,我在 Loaded Configuration File 下看到了这个:

/private/etc/php.ini 

然后在终端中,我运行了这个:

php -i | grep ini

显示了这个输出

Loaded Configuration File => /usr/local/etc/php/5.3/php.ini

此外还加载了更多配置...

Additional .ini files parsed => /usr/local/etc/php/5.3/conf.d/ext-mcrypt.ini,
/usr/local/etc/php/5.3/conf.d/ext-xdebug.ini,
/usr/local/etc/php/5.3/conf.d/redis.ini

我遇到的问题是 mcrypt 在 php cli 版本中加载,但我的 Laravel 测试页面无法加载,给出未找到 mcrypt 扩展的错误 [1]

我使用 diffmerge 工具 [2] 将 /private/etc/ 中的原始 Apple php.ini 与 /usr/local/etc/php/5.3/ 中安装的一个自制软件进行比较,发现存在显着差异!所以在尝试之前请仔细检查:

我接下来要做的是备份

sudo mv /private/etc/php.ini /private/etc/php.ini.apple

然后将 php.ini 符号链接到自制软件

ln -s /usr/local/etc/php/5.3/php.ini /private/etc/php.ini 

终于重装Apache后

sudo apachectl restart

并加载了 mcrypt,现在他们使用的是单个配置。

如果您的本地主机上有另一个应用程序与新配置中断,只需删除符号链接,并将其更改为 .apple 版本并重新启动 Apache 即可恢复。

  1. Laravel requires the Mcrypt PHP extension
  2. https://sourcegear.com/diffmerge/

【讨论】:

    【解决方案2】:

    这可能是一个很好的参考:

    how do i install php 5.4 on Mac OS X Lion?

    有一些关于将 PHP 升级到 5.4 的详细说明,还说明了 MacPorts 如何使它变得非常轻松。

    【讨论】:

      【解决方案3】:

      我正在运行 OS X 10.9。我将 PHP 更新到 v5.5.8,发现 Apache 可以正确运行新版本,但终端仍在运行旧版本。在四处寻找解决方案后,我最终想,“我会重新启动它。”

      宾果!终端和 Apache 运行的是相同版本的 PHP。

      【讨论】:

        最近更新 更多