致命错误:调用未定义的函数openssl_random_pseudo_bytes()

时间:2013-01-27 14:32:22

标签: php openssl vps

我找到了一个脚本,可以随机生成X数量的数字/字母。 它在我的本地主机上工作正常,但是当我将脚本上传到我的VPS时它不起作用。

我收到以下错误:

Fatal error:  Call to undefined function  openssl_random_pseudo_bytes()

这就是代码的这一部分:

function crypto_rand_secure($min, $max) {
        $range = $max - $min;
        if ($range < 0) return $min; // not so random...
        $log = log($range, 2);
        $bytes = (int) ($log / 8) + 1; // length in bytes
        $bits = (int) $log + 1; // length in bits
        $filter = (int) (1 << $bits) - 1; // set all lower bits to 1
        do {
            $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
            $rnd = $rnd & $filter; // discard irrelevant bits
        } while ($rnd >= $range);
        return $min + $rnd;
}

我在stacksoverflow上发现了一个有相同问题的帖子。但是它需要安装一个模块。我不知道我该怎么做,但我在VPS的WHM上找到了这个。

主页»软件»模块安装程序

当我选择Perl模块并搜索 openssl 时,我会得到很多结果。 我安装了其中一个,默认安装了一个。

以下是安装的openssl模块:

隐窝:: OpenSSL的:: RSA

隐窝:: OpenSSL的::随机

仍然......我的网站上出现了同样的错误。 有解决方案吗提前谢谢。

3 个答案:

答案 0 :(得分:2)

您还需要使用http://php.net/manual/en/openssl.installation.php中所述的--with-openssl编译php。

答案 1 :(得分:2)

您找到的OpenSSL Perl模块是一个红色的鲱鱼。它们对PHP没有任何影响。 (PHP和Perl是两种完全独立的编程语言。)

您需要安装的是openssl PHP模块。我不记得cPanel是否有重建PHP的选项,但如果我是对的,那么你需要经历这个过程并在那里启用OpenSSL。

答案 2 :(得分:1)

我自己也有同样的问题。我通过编辑 php.ini 文件解决了这个问题 - 将;extension=php_openssl.dll更改为extension=php_openssl.dll

(对于我的安装,我的 php.ini 文件位于我的P:\Program Files\EasyPHP-12.1\conf_files\目录中。)