如何在 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 destroy
和 vagrant up
轻松地将当前安装恢复到当前状态,因为所有内容都保存在 Homestead.yaml
.
中
在我安装的 Homestead v9 中 运行 php5.6 在 laravel 4.1 上没有任何问题...
希望对@jsm 有所帮助...
我正在尝试重新启动一个旧的 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
.
或在 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 destroy
和 vagrant up
轻松地将当前安装恢复到当前状态,因为所有内容都保存在 Homestead.yaml
.
在我安装的 Homestead v9 中 运行 php5.6 在 laravel 4.1 上没有任何问题...
希望对@jsm 有所帮助...