PHP Open_basedir对URL的限制

时间:2012-02-10 11:24:49

标签: php apache2 debian open-basedir

我想问一些问题。
我有一个网络服务器(apache2 / php / debian),并且由于某些安全原因,PHP配置了open_basedir选项。
我需要使用file_get_contents()访问url,但是我收到错误警告:file_get_contents():open_basedir限制生效。
我检查了php配置,并且allow_url_fopen打开了。

在开发服务器(ubuntu 10.10)中它可以正常工作,但在debian(6.0 squeeze)中却没有。有什么想法吗?

PHP版本是5.3.3-7 + squeeze7与Suhosin-Patch
一个例子:

的php.ini:

Open_basedir = /var/securedir/:/var/www
allow_url_fopen = On

php代码:

$a = file_get_contents("http://www.php.net");
Warning: file_get_contents(): open_basedir restriction in effect.

另一个问题是:

$b = file_get_contents("/var/securedir/file.xml")
Warning: file_get_contents(): open_basedir restriction in effect. File(/var/securedir/file.xml) is not within the allowed path(s): (/var/securedir/:/var/www)

1 个答案:

答案 0 :(得分:0)

为什么不直接使用cURL来获取内容?它只是一些额外的代码行:

function fetch_content( $sUrl ) {

    $aOptions = array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HEADER         => false
    );

    $cUrlHndl = curl_init( $sUrl );
    curl_setopt_array( $cUrlHndl, $aOptions );
    $binaryContents = curl_exec( $cUrlHndl );
    curl_close( $cUrlHndl );

    return $binaryContents;
}

因为file_get_contents确实会带来安全风险,所以这就是它在服务器上被禁用的原因。您收到的警告是因为您尝试打开的路径未包含在php.ini设置文件中。