PHP包含vs file_get_contents

时间:2012-01-06 19:31:23

标签: php include file-get-contents

所以我一直在使用file_get_contents通过WordPress插件请求文件我分发给其他用户。

无论如何,最初我正在做的是检查用户是否启用了'allow_url_fopen',如果是这样,直接进入file_get_contents。如果没有,我然后检查用户是否启用了cURL,如果是,则采取该路由。代码如下:

if ( ini_get( 'allow_url_fopen' ) == 1 ) {
    $content = file_get_contents( $file );
    return $content;      
}
elseif ( function_exists( 'curl_version' ) ) {
    $curl = curl_init();
    curl_setopt( $curl, CURLOPT_URL, riva_slider_pro_dir( true ) . $file );
    curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );

    $content = curl_exec( $curl );
    curl_close( $curl );

    return $content;
}

然而,这是我遇到的问题。特定用户主机阻止file_get_contents函数完全访问文件,同时启用allow_url_fopen。什么都行不通,相对路径,绝对路径,什么都没有。所以我转向另一种解决方案,并发现这有效:

    ob_start();
    include $file;
    $content = ob_get_contents();
    ob_end_clean();

我的问题是,这种方法有多可靠?有了这个,我一直在使用本地路径,例如'admin / file.css'等。

如果我决定用这个替换顶级代码,那么什么样的托管设置可以阻止它工作?使用这种方法并没有为我提供检查是否出错的方法。

1 个答案:

答案 0 :(得分:2)

您的include方法的可靠性会低得多。禁用file_get_contents的情况很少见,而allow_url_include(您隐含的依赖)默认情况下已关闭。

它也非常不安全。如果您的Web服务器被黑客攻击并且某人修改了您的插件正在加载的文件之一以在输出中包含PHP代码,那么安装了您的插件的每个人都将开始运行该代码。那将是非常糟糕的。