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

Posted

技术标签:

【中文标题】找不到 mcrypt => 调用未定义的函数 Laravel\\mcrypt_create_iv()【英文标题】:can't find mcrypt => Call to undefined function Laravel\mcrypt_create_iv()找不到 mcrypt => 调用未定义的函数 Laravel\mcrypt_create_iv() 【发布时间】:2012-09-10 21:25:21 【问题描述】:

尝试设置 Laravel 并不断遇到此错误。我通过 brew 安装了 mcrypt,它位于 /usr/local/Cellar。有什么想法吗? .. 它也没有出现在终端命令 php -m 中,如果这很重要的话。我正在使用 Mac 原生 Web 服务器运行 Mountaion Lion。

【问题讨论】:

需要重新编译php 【参考方案1】:

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

sudo apt-get install php5-mcrypt

之后记得重启网络服务器:

sudo service apache2 restart

如果仍然无法正常工作,请尝试将配置文件链接到 Web 服务器的相应配置文件夹。感谢 dave1010 在 cmets 中的提示。

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

再一次,重启网络服务器:

sudo service apache2 restart

也许,如果还不工作,你还需要@RahulPrasad 显示的行,php5enmod mcrypt

【讨论】:

做了 apt-get 部分,我的网络服务器配置已重新加载,但需要像 Sophy 提到的那样重新启动 出于某种原因,在 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 是的,成功了,非常感谢!!但是为什么同一个命令两次呢? @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/ 对我来说 mcrypt.ini 位于/etc/php5/mods-available/mcrypt.ini。我正在使用 Ubuntu 14.04 LTS 和 PHP 5.5.9-1ubuntu4.3。【参考方案2】:

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

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

或者,如果它不在那里,只需在某处添加mcrypt.so

从 PHP 7.0.0 开始,salt 选项也已被弃用。现在更倾向于简单地使用默认生成的盐。

【讨论】:

似乎不起作用..找到这行代码code[mcrypt];有关 mcrypt 设置的更多信息,请参阅 php.net/mcrypt-module-open ;加载 mcrypt 算法的目录;默认值:编译到 libmcrypt 中(通常是 /usr/local/lib/libmcrypt) ;mcrypt.algorithms_dir= ;加载 mcrypt 模式的目录;默认值:编译到 libmcrypt 中(通常是 /usr/local/lib/libmcrypt) ;mcrypt.modes_dir= code 如果其他浏览者也有同样的问题,这最终帮助了我。谢谢你们的快速回复! => coolestguyplanettech.com/… @coryjacik 这取决于你是如何编译 mcrypt 的,我可能应该指定。 @coryjacik 感谢您的链接,我也遵循了该指南。但即使在我的系统上已经安装了 autoconf,我也必须 sudo ln -s /Developer/usr/share/autoconf /usr/share/ 才能让 /usr/share/phpize 正常工作。 新版本的 debian/ubuntu 更容易(并且需要)apt-get install php5-mcyrpt;, php5enmod mcrypt;, service php5-fpm restart【参考方案3】:

试试sudo php5enmod mcrypt && sudo service apache2 restart

【讨论】:

很好,现在它正在工作(在@Sophy 程序之后)!【参考方案4】:

当您真正需要 php56-mcrypt php 模块时,您已经安装了 mcrypt

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

// assuming you have php56
brew install php56-mcrypt

如果自制软件找不到正确的软件包,您可能需要tap the PHP repositories found on GitHub:

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 文件。这将是不必要的,因为自制软件会为您激活模块。它将配置文件放在/usr/local/etc/php/5.6/conf.d/ext-mcrypt.ini

【讨论】:

PO 绝对应该使用这些解决方案来解决他的问题...brew 是在 Mac OS X 上安装软件包的方式。 这对我不起作用...Error: No available formula for php55 这是安装mcrypt 的正确方法,还记得在运行此命令brew search mcrypt 后,您想使用brew install php56-mcrypt 安装mcrypt【参考方案5】:

您没有安装 mcrypt PHP 扩展。

对于 Mac,我按照以下说明操作: mcrypt on Mac 10.7 or 10.8.

它们看起来很多,但事实并非如此,它很容易遵循它的工作原理!

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

请注意最近升级到 PHP 7 的人 - MCRYPT 库是deprecated。如果您升级到 PHP 7 并且现在看到此错误,这就是原因。您应该切换到替代库,this thread 中提到了一些替代方案。

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

我用 Homebrew 安装了 php 和 mcrypt,但是在执行了几次 brew update 之后我仍然遇到了这个错误。我认为我的设置随着时间的推移变得有些乏味。

原来我的 php 是从 /private/etc/php.ini 配置的,不是 /usr/local/etc/php/5.4/ php.ini 正如 Homebrew 推荐的那样。 /usr/local/etc/php/5.4/ext-mcrypt.ini 甚至没有包含 Mcrypt,考虑到 php -i 为我生成了这个,这没有多大意义: p>

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

我的解决方案:

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

【讨论】:

这确实有意义,您在命令行 (cli) 使用的 PHP 可以使用与您的网络服务器使用的 PHP 不同的 php.ini,您应该创建一个 phpinfo 文件并检查网络服务器的内容正在使用。 @JimmyKnoot 谢谢,我不知道。【参考方案10】:

这最终对我有用:

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 添加到该目录时出现错误。

【讨论】:

以上是关于找不到 mcrypt => 调用未定义的函数 Laravel\mcrypt_create_iv()的主要内容,如果未能解决你的问题,请参考以下文章

调用未定义的函数 mcrypt_decrypt() - 即使安装了 php5-mcrypt

php artisan:调用未定义函数 App\Http\Services\mcrypt_get_block_size()

我想使用php 7.2使mcrypt在xampp窗口上工作错误:调用未定义的函数mcrypt_module_open()

将 OSX 更新为“El Capitan”后未定义的函数 mcrypt

ReactJS映射函数找不到未定义的属性

php-mcrypt 扩展未加载