找不到mcrypt => Laravel\mcrypt_create_iv()函数未定义的调用

48

尝试安装Laravel时,一直遇到这个错误。我通过brew安装了mcrypt,它位于/usr/local/Cellar目录下。您有什么想法?..如果有影响的话,它在终端命令php-m中也没有显示出来。我正在运行带有mac本地Web服务器的Mountain Lion。


你需要再次编译PHP - Amit Erandole
10个回答

66

Ubuntu或任何基于Debian的Linux用户可以使用apt-get安装所需的软件包:

sudo apt-get install php5-mcrypt

记得在此之后重新启动 Web 服务器:

sudo service apache2 restart
如果仍然不起作用,请尝试将配置文件链接到Web服务器的适当配置文件夹中。感谢dave1010在评论中提供此提示。
sudo ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/apache2/conf.d/   # for Apache
sudo ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/cli/conf.d/       # for CLI

然后,再次启动 Web 服务器:

sudo service apache2 restart

如果还没有生效,也许您需要使用 @RahulPrasad 显示的这行代码:php5enmod mcrypt


8
由于某些原因,在Ubuntu上,PHP未能读取mcrypt.ini文件。这是解决方法:使用以下命令进行修复:sudo ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/apache2/conf.d/ ; sudo ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/apache2/conf.d/ - dave1010
@dave1010 是的,就是这个命令,非常感谢你!!但是为什么要执行两次相同的命令呢? - leemes
@leemes 不错的发现。它应该进入apache2cli目录(或者您使用的其他SAPI):sudo ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/apache2/conf.d/ ; sudo ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/cli/conf.d/ - dave1010
@dave1010,我希望我将这些信息复制到答案中以便将来的读者能快速找到是可以的。 - leemes
4
对于我来说,mcrypt.ini 文件位于“/etc/php5/mods-available/mcrypt.ini”。我使用的是 Ubuntu 14.04 LTS 和 PHP 5.5.9-1ubuntu4.3。 - frederickf
显示剩余3条评论

40

您需要在php.ini文件中启用它,可能还需要重新启动Apache。

php.ini中,您将找到;mcrypt.so并从中删除;

或者,如果没有,请添加mcrypt.so到任意位置。

另外,自PHP 7.0.0起,salt选项已被弃用。现在最好是直接使用默认生成的盐。


4
似乎没有生效。找到了这行代码code[mcrypt]; 有关mcrypt设置的更多信息,请参见http://php.net/mcrypt-module-open; 加载mcrypt算法的目录 ; 默认值:编译到libmcrypt中(通常是/usr/local/lib/libmcrypt) ; mcrypt.algorithms_dir=; 加载mcrypt模式的目录 ; 默认值:编译到libmcrypt中(通常是/usr/local/lib/libmcrypt) ; mcrypt.modes_dir= code - coryj
这就是最终帮助我的方法,如果有其他人遇到相同的问题正在浏览,请参考该链接。感谢你们的快速回复! => http://www.coolestguyplanettech.com/how-to-install-mcrypt-for-php-on-mac-osx-lion-10-7-development-server/ - coryj
@coryjacik 这取决于你如何编译mcrypt,我可能应该明确说明。 - Deinumite
mcrypt.so??phpinfo()显示我的php.ini文件位于/etc/php5/apache2/php.ini,但是没有字符串“mcrypt.so” - Peter Krauss
2
新版本的Debian/Ubuntu更容易(并且需要)使用以下命令:apt-get install php5-mcryptphp5enmod mcryptservice php5-fpm restart - ppostma1
显示剩余2条评论

28

尝试运行sudo php5enmod mcrypt && sudo service apache2 restart


很好,现在它正在工作(并且经过@Sophy的程序)! - Peter Krauss

20

你实际上想要安装的是 php56-mcrypt PHP 模块,但却安装了 mcrypt

你在问题中提到你可以看到 /usr/local/Cellar 中已安装了 mcrypt,并且你正在使用 OSX。因此,在 OSX 上使用 Homebrew 安装 mcrypt PHP 模块最简单的方法是:

// assuming you have php56
brew install php56-mcrypt
如果Homebrew找不到正确的软件包,您可能需要在GitHub上操作PHP仓库
brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php

现在当您发出命令brew search mcrypt时,您应该看到类似以下内容:

libtomcrypt   mcrypt   php53-mcrypt   php54-mcrypt   php55-mcrypt   php56-mcrypt

其他几位用户已经提到需要编辑你的php.ini文件。由于Homebrew会为您激活模块,因此这将是不必要的。它会在/usr/local/etc/php/5.6/conf.d/ext-mcrypt.ini位置放置配置文件。


2
PO 应该一定使用这个解决方案来解决他的问题... brew 是在 Mac OS X 上安装软件包的方式。 - aymericbeaumet
这对我不起作用... 错误:php55没有可用的公式 - theycallmemorty
这是安装 mcrypt 的正确方法,记得在运行命令 brew search mcrypt 后,使用 brew install php56-mcrypt 安装 mcrypt。 - hash

2

您没有安装mcrypt PHP扩展。

对于Mac,我按照以下步骤进行操作:在Mac 10.7或10.8上安装mcrypt

看起来很多,但实际上非常容易跟随,并且它能够正常工作!


1

您可能已经安装了mycrypt,但未安装/启用php_mcrypt模块。


1

对于最近升级到PHP 7的人来说,需要注意的是 - MCRYPT库已经被弃用。如果您升级到PHP 7并且现在看到此错误,那就是原因。您应该切换到另一个替代库,一些替代方案在这个线程中提到。


0

我使用Homebrew安装了php和mcrypt,但是在进行了几次brew update之后,仍然遇到了这个错误。我认为我的设置随着时间的推移已经有点混乱了。

事实证明,我的php是从/private/etc/php.ini配置的,而不是像Homebrew建议的那样从/usr/local/etc/php/5.4/php.ini配置的。甚至在/usr/local/etc/php/5.4/ext-mcrypt.ini中也没有包含Mcrypt,这并不太合理,因为php -i对我来说产生了这个结果:

Configuration File (php.ini) Path => /usr/local/etc/php/5.4
Loaded Configuration File => /usr/local/etc/php/5.4/php.ini
Scan this dir for additional .ini files => /usr/local/etc/php/5.4/conf.d
Additional .ini files parsed => /usr/local/etc/php/5.4/conf.d/ext-mcrypt.ini

我的解决方案:

  1. 以超级用户身份编辑 /private/etc/php.ini
  2. 添加 extension="/usr/local/Cellar/php54-mcrypt/5.4.28/mcrypt.so" 并保存
  3. 使用 sudo apachectl restart 重启 Apache

1
实际上这是有道理的,你在命令行(cli)中使用的PHP可以使用不同于Web服务器使用的php.ini文件,你应该创建一个phpinfo文件并检查Web服务器正在使用哪个文件。 - Jimmy Knoot
@JimmyKnoot 谢谢,我不知道。 - user110857

0

进入您的PHP安装中的CLI文件夹,找到其中的php.ini文件并启用mcrypt。终端有时会使用另一个php.ini文件,通常在CLI文件夹中。


0

这是最终对我起作用的代码:

brew reinstall --with-homebrew-curl --with-httpd php56
brew reinstall --build-from-source php56-mcrypt

我还需要执行 sudo chmod 777 /usr/local/etc/php/5.6/conf.d,因为当第二个 brew reinstall 尝试将 ext-mcrypt.ini 添加到该目录时出现错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接