![rhel6 + php56u (来自 ius) + mcrypt](https://linux22.com/image/669861/rhel6%20%2B%20php56u%20(%E6%9D%A5%E8%87%AA%20ius)%20%2B%20mcrypt.png)
我正在尝试设置一个新的开发环境以匹配在 RHEL 6.5 上运行 PHP 5.4 的生产系统。因为 PHP 5.4 已 EOL,而且我无法弄清楚在我的新 RHEL 开发服务器上安装 PHP 5.4 需要哪些神奇的存储库组合,所以我选择在开发服务器上使用 PHP 5.6。我设法安装了 5.6 并引入了我的 Laravel 4.1 项目,但是当我在浏览器中加载它时,我收到了以下内容:Mcrypt PHP extension required.
我已验证php56u-mcrypt-5.6.14-1.ius.el6.x86_64
软件包已安装;我已验证/etc/php.d/20-mcrypt.ini
正在加载扩展;我已验证显示php -m | grep mcrypt
模块已加载;我已验证显示php -i | grep mcrypt
确实/etc/php.d/20-mcrypt.ini
正在加载并且mcrypt support
注册为enabled
;我重启过 apache 的次数已经记不清了;我甚至验证过存在/usr/lib64/php/modules/mcrypt.so
。奇怪的是,当我尝试运行 composer 命令时,我没有收到此消息,这似乎是其他地方的常见问题。
这让我感到困惑,我似乎在命令行上安装了 mcrypt,但通过 Apache 却不行,这表明问题出在这里,而不是我安装的 mcrypt 本身。但我在新测试服务器上使用的 apache 配置文件与在生产服务器上使用的配置文件没有什么不同(感谢 Puppet!),而且我在生产服务器上从未遇到过这个问题。我被难住了。有什么建议吗?
答案1
我想睡一觉后就能找到答案。结果发现,我运行的是两个不同版本的 PHP,尽管我只安装了一个。我通过创建一个页面phpinfo()
在浏览器中显示并与控制台输出进行比较发现了这一点php -v
:浏览器显示 PHP 5.4.x,而 CLI 显示 5.6.x。我的 puppet 配置略有不同(由于安装了不同的 PHP 版本),而且我没有正确安装libphp5.so
和libphp5-zts.so
模块(它们是从旧安装中复制的)。因此 Apache 正在使用这些模块,然后抱怨 mcrypt适用于 php 5.4没有安装,这是正确的。但由于 CLI 版本5.6并且 mcrypt 在那里正确安装后,像 artisan 这样的 CLI 程序就可以正常工作了。就我而言,解决方案是运行yum reinstall php56u
以将这些正确版本的模块安装到位。一旦我这样做了,apache 和 CLI 就会达成一致,我的应用程序就会开始工作。