【问题标题】:How to enable php-Mcrypt extension in Laravel Homestead如何在 Laravel Homestead 中启用 php-Mcrypt 扩展
【发布时间】:2019-11-27 21:21:48
【问题描述】:

我正在尝试重新启动并运行旧的 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

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

我错过了什么步骤?

【问题讨论】:

  • 您能够创建项目,这表明 mcrypt 正在使用您的 PHP CLI,但不能使用 PHP-FPM。您是否在 /etc/php-fpm 目录中链接了 mcrypt 配置文件?
  • 如果 PHP 版本安装正常,也许你只需要在 vagrant ssh 中运行 'php56' 即可。

标签: laravel homestead mcrypt


【解决方案1】:

使用 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 版本或路由。

您可以通过删除部分/全部来验证这一点,只留下对您很重要的一个 - 在 (/etc/nginx/sites-enabled/...)。

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

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

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

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

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

【讨论】:

  • 非常感谢您的帮助。 leonardo-vitali 提供了我需要的确切信息,但你也让我保持在正轨。希望我能将你们都标记为正确。
【解决方案2】:

因为 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 配置。

【讨论】:

  • 谢谢!出现问题是因为我不明白 PHP 的 CLI 和 FPM 版本是分开设置的。我使用的是 sudo update-alternatives --config php,但这只会改变 CLI。重要的是,它没有更新 FPM 版本。您创建 phpinfo() 页面的建议使问题变得清晰。之后,对 Homestead.yaml 文件的快速更新让一切都按预期启动并运行。太棒了!
猜你喜欢
  • 2017-09-15
  • 2019-12-28
  • 2020-09-30
  • 2017-05-11
  • 2014-03-06
相关资源
最近更新 更多