如何在 Laravel Homestead 中启用 php-Mcrypt 扩展

How to enable php-Mcrypt extension in Laravel Homestead

我正在尝试重新启动一个旧的 Laravel 4.1.x 应用程序并 运行 以便对其进行现代化改造。这需要具有 PHP 5.6 和 Mcrypt 扩展的环境。我已经安装了 Homestead 9.0.3(最新的稳定版)。在 VM 中,我已将 PHP 版本设置为 5.6

sudo update-alternatives --config php

然后我安装了 php-mcrypt 扩展

sudo apt-get install php5.6-mcrypt

我现在可以创建一个新的 Laravel 4.1.x 项目,这是一个需要 Mcrypt 才能完成的过程,所以我们肯定有所进展:

composer create-project laravel/laravel="4.1.*" myAppName

但是,当我浏览到 myAppName 的网页时,我看到消息:

Mcrypt PHP 需要扩展。

我也尝试过针对此问题通常推荐的步骤,即:

sudo ln -s /etc/php/5.6/conf.d/mcrypt.ini /etc/php/5.6/mods-available/mcrypt.ini
sudo phpenmod mcrypt
sudo service php5.6-fpm restart

但我仍然在浏览器中收到相同的消息。

我错过了哪一步?

因为 homestead 上安装的所有 PHP 版本,您需要为 Homestead.yaml.

中的站点设置 PHP 版本

首先查看服务器是什么版本运行phpinfo();

检查文件 /etc/nginx/sites-enabled/homestead.test 并查找这一行:

fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;

如果您没有在站点列表中设置 php 版本,该文件将指向 php7.3.sock。 在这种情况下,版本 5.6 安装了 mcrypt,但 7.3 没有。

你可以只替换行

fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;

fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;

然后用 sudo nginx -s reload.

重新加载 nginx

或在 Homestead.yaml 上设置 php 版本:

sites:
- map: homestead.test
  to: /home/vagrant/code/public
  php: "5.6"

然后运行 vagrant provision,它将更改PHP 5.6.

的nginx配置

使用 homestead v9 你应该已经启动并且 运行 php5.6 开箱即用在 here,但不幸的是,这不是你的情况,我理解...

如您所述,默认情况下未安装旧软件包 (php5.6-mcrypt),应通过以下方式手动添加它们: sudo apt-get install php5.6-mcrypt

在那之后所有的包都准备好了,启动并工作,尤其是 php5.6-mcrypt.

问题的根源在于 homestead.yaml 下的多个站点定义。 很可能其中一些是重叠的,你的 nginx 指的是错误的 resource/site_definition 错误的路径 .

因此您可能会认为一些奇怪的 php 版本或路由是 run/executed.

您可以通过删除其中的 some/all 个来验证这一点,只留下对您来说唯一重要的一个 - 在 (/etc/nginx/sites-enabled/...) 中。

当然请在容器内执行此操作并发出 sudo service nginx restart,然后...

之后你所有的问题都应该消失了。

如果出现问题。之后您可以使用 vagrant destroyvagrant up 轻松地将当前安装恢复到当前状态,因为所有内容都保存在 Homestead.yaml.

在我安装的 Homestead v9 中 运行 php5.6 在 laravel 4.1 上没有任何问题...

希望对@jsm 有所帮助...