Mcrypt 无法处理新的 ubuntu 设置

Posted

技术标签:

【中文标题】Mcrypt 无法处理新的 ubuntu 设置【英文标题】:Mcrypt failing to work on new ubuntu setup 【发布时间】:2014-02-23 13:48:20 【问题描述】:

我之前使用 xampp 等在 Windows 上构建我的网站...但是由于一些软件问题,我不得不更改为 linux,现在正在运行 ubuntu 13.10。

我在 ubuntu 上重新安装了 xampp 并在其上转移并设置了我的网站以供我继续工作,除了网站的这一行代码的一部分之外,一切似乎都运行良好。

$iv = mcrypt_create_iv(128, MCRYPT_DEV_URANDOM);

这段代码在 Windows 上运行良好,并为我创建了随机字符串来创建 cookie,但是在新的 ubuntu 设置中它无法工作,只是退出到当前页面,没有错误消息。

我将其更改为如下所示的随机字符串

$iv = "aahd98a8du98sd9a8ud9ajsd89";

而且代码运行良好,所以一定是 mcrypt 运行失败。 关于为什么会发生这种情况的任何想法?

谢谢

【问题讨论】:

显示错误消息,让您知道从哪里开始。 ***.com/questions/1053424/… 我检查了 php.ini 和 display_errors = on,所以它应该报告错误,但我什么也没得到 如果你在 php 执行过程中不能得到错误,你可以从 error_log 文件中得到错误,它通常在 /var/log/apache2/ 但在你的安装中它可能在 /opt/灯/日志。如果您提供错误,您可以更快、更准确地找到答案。 【参考方案1】:

你可以试试这个并发布结果吗?

mv -i /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/
sudo php5enmod mcrypt
sudo service apache2 restart

【讨论】:

嗨,我导航到控制台中的 /opt/lampp 文件夹并在那里运行了 3 行,所以希望这是正确的,你的第一行说找不到 mcrypt.ini 文件。第二行表示无法识别的命令php5enmod。第三个说 apache2 是一个无法识别的服务 嗨,所以你没有使用 apache2?路径可能因不同的分布而异。你能告诉你安装了哪些版本吗? /opt/lampp 文件夹听起来像是 Apache + PHP 的非内置版本,您是否安装了 XAMPP 或类似的?【参考方案2】:

取自mcrypt_create_iv 上关于MCRYPT_DEV_URANDOM 的文档:

IV 的来源。源可以是 MCRYPT_RAND(系统随机数生成器)、MCRYPT_DEV_RANDOM(从 /dev/random 读取数据)和 MCRYPT_DEV_URANDOM(从 /dev/urandom 读取数据)。在 5.3.0 之前,MCRYPT_RAND 是 Windows 上唯一支持的。

您最初在 Windows 机器上使用 MCRYPT_DEV_URANDOM 可能只是因为不受支持而被忽略(如果不知道您在 Windows 机器上运行的 PHP 版本,我无法确定)。如果是这样,那么它会默认为 MCRYPT_RAND 并且之前可以正常工作。

但是现在你在 Ubuntu 上,实际上已经考虑了 MCRYPT_DEV_URANDOM,这意味着 PHP 正在寻找从 /dev/urandom 读取数据。 可能您的系统没有/dev/urandom

以下是我将采取的步骤。您需要对 Ubuntu 计算机具有 sudo 或 root 访问权限。

检查您的系统是否有/dev/urandom 可用。

ls -a /dev/urandom

如果没有,则创建它。

这些步骤取自Ubuntu Manpages:

mknod -m 644 /dev/random c 1 8
mknod -m 644 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom

以防万一,你确实安装了 mcrypt,是吗?

我的 Ubuntu 设置,在安装 PHP5 后,没有开箱即用的 mcrypt 支持。要安装它:

sudo apt-get install php5-mcrypt
sudo service apache2 restart

【讨论】:

以上是关于Mcrypt 无法处理新的 ubuntu 设置的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu 升级到 13.10 后 mCrypt 不存在

laravel 4中的工匠命令无法加载php_mcrypt

ubuntu安装php mcrypt扩展

Laravel 升级到 4.2 - 需要 mcrypt 扩展

mcrypt_decrypt() 错误更改密钥大小

PHP mcrypt 安装和设置 laravel 环境问题