【问题标题】:PHPass producing warning: is_readable() [function.is-readable]: open_basedir restriction in effect [duplicate]PHPPass产生警告:is_readable()[function.is-readable]:open_basedir限制有效[重复]
【发布时间】:2015-03-06 10:48:32
【问题描述】:

我正在使用PHPass 来加密存储在我的数据库中的密码。运行此代码时:

if (is_readable('/dev/urandom') && ($fh = @fopen('/dev/urandom', 'rb'))) {
    ...
}

它会产生这个警告:

Warning: is_readable() [function.is-readable]: open_basedir restriction in effect. File(/dev/urandom) is not within the allowed path(s): 
(/home/d36234:/usr/local/lib/php:/var/apachefs/uploads:/tmp:/etc/file/magic) in /home/d36234/.../PasswordHash.php on line 51

这里出了什么问题,我该如何解决?

【问题讨论】:

    标签: php phpass


    【解决方案1】:

    它会告诉您发生了什么:/dev/ 不是您可以从中打开文件的文件夹之一,这些在错误消息中给出。如果可以的话,您需要更改open_basedir value

    否则,通过将is_readable 替换为@is_readable 来抑制警告。 PHPpass 然后会使用 PHP 函数来生成随机值。

    【讨论】:

    • 这需要访问 php.ini。我假设你在某种共享主机上?比你不能改变它(有充分的理由,否则你可以去探索其他人的目录)。您可能不得不使用 PHP 的随机函数,请参阅 stackoverflow.com/a/10364236/4421490
    • 哦,实际上,如果您查看我刚刚链接的帖子中的第二个答案,看起来 PHPass 可以在不访问 /dev/urandom 的情况下运行,所以这实际上只是一个警告,而不是一条错误消息。如果您愿意,可以通过将is_readable 更改为@is_readable 来抑制警告。
    • 是的,我注意到它仍然会生成加密密码,但是由于它不能生​​成好的盐,它们就不能那么好了吗?无论如何-我想我解决了。我将is_readable('/dev/urandom') 更改为is_readable('urandom'),这似乎是在PasswordHash.php 所在的同一目录中创建文件,因此没有生成警告。
    • 好吧,不是 fopen 失败,而是前面有一个 @,所以它不会发出警告...检查与您尝试打开的文件不同的文件可能会消失警告,但它会创建非常混乱的代码。
    • 嗯.. 首先 /dev/ 中没有文件。我什至在那个位置没有一个名为 dev 的目录
    猜你喜欢
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    相关资源
    最近更新 更多