9

使用 PHPass ( http://www.openwall.com/phpass/ )时,我收到以下警告:

open_basedir restriction in effect. File(/dev/urandom) is not within the allowed path(s)

虽然这不是一个大问题(它会依赖于其他东西),但我不想有这个警告。PHP 应用程序应该在不同的服务器上运行,一些用户将能够将该路径添加到他们允许的 open_basedir 路径中,但其他用户将无权访问该配置。

我的第一个猜测是检查可读性is_readable(),但是,我仍然收到警告。

问题:如何检查某个路径或文件是否已添加到 open_basedir 路径?

4

3 回答 3

3

ini_get()您可以使用以下函数读取 PHP 指令的值:

ini_get('open_basedir')

如果指令不为空,它应该包含一个字符串,其中包含一个或多个路径,以 .分隔PATH_SEPARATOR

于 2014-01-29T09:47:40.247 回答
1

您可以使用is_readable和禁用此功能的警告@

如果is_readable返回 false 那么你知道它不可读。

$readable = @is_readable(..);
if(!$readable) {
    ....not readable
}
于 2014-01-29T09:50:06.260 回答
1

file_exists如果目录受到限制,则发出警告。让我们使用它:

function isRestricted($path)
{
    // Default error handler is required
    set_error_handler(null);

    // Clean last error info. You can do it using error_clean_last in PHP 7.
    @trigger_error('__clean_error_info');

    // Testing...
    @file_exists($path);

    // Restore previous error handler
    restore_error_handler();

    // Return `true` if error has occured
    return ($error = error_get_last()) && $error['message'] !== '__clean_error_info';
}
于 2016-04-18T09:36:21.913 回答