file_get_contents的替代?

时间:2010-10-20 15:54:00

标签: php file-get-contents

$xml_file = file_get_contents(SITE_PATH . 'cms/data.php');

问题是服务器已禁用URL文件访问。我无法启用它,它是托管的东西。

所以问题是这个。 data.php文件生成xml代码。

如何在不执行上述方法的情况下执行此操作并获取xml数据?

有可能吗?

6 个答案:

答案 0 :(得分:108)

使用cURL。此功能是file_get_contents的替代。

function url_get_contents ($Url) {
    if (!function_exists('curl_init')){ 
        die('CURL is not installed!');
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $Url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

答案 1 :(得分:7)

你应该尝试这样的事情, 我正在为我的项目做这个,它是一个后备系统

//function to get the remote data
function url_get_contents ($url) {
    if (function_exists('curl_exec')){ 
        $conn = curl_init($url);
        curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($conn, CURLOPT_FRESH_CONNECT,  true);
        curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);
        $url_get_contents_data = (curl_exec($conn));
        curl_close($conn);
    }elseif(function_exists('file_get_contents')){
        $url_get_contents_data = file_get_contents($url);
    }elseif(function_exists('fopen') && function_exists('stream_get_contents')){
        $handle = fopen ($url, "r");
        $url_get_contents_data = stream_get_contents($handle);
    }else{
        $url_get_contents_data = false;
    }
return $url_get_contents_data;
} 

然后你可以这样做

$data = url_get_contents("http://www.google.com");
if($data){
//Do Something....
}

答案 2 :(得分:3)

是的,如果你禁用了URL包装器,你应该使用套接字,或者更好的是cURL库。

如果它是您网站的一部分,请使用文件系统路径引用它,而不是网址。 /var/www/...,而不是http://domain.tld/...

答案 3 :(得分:2)

如果您尝试阅读不使用file_get_contents()的网址生成的XML,那么您可能希望查看cURL

答案 4 :(得分:2)

如果文件是本地的SITE_PATH建议的评论,那么执行脚本并使用output control functions将结果缓存到变量中非常简单:

function print_xml_data_file()
{
    include(XML_DATA_FILE_DIRECTORY . 'cms/data.php');
}

function get_xml_data()
{
    ob_start();
    print_xml_data_file();
    $xml_file = ob_get_contents();
    ob_end_clean();
    return $xml_file;
}

如果它很遥远,很多其他人说curl是要走的路。如果不存在,请尝试socket_createfsockopen。如果没有任何效果......请更改您的托管服务提供商。

答案 5 :(得分:0)

如果你有它,使用curl是你最好的选择。

您可以通过执行phpinfo()并在页面中搜索curl来查看是否已启用。

如果已启用,请尝试以下操作:

$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL, SITE_PATH . 'cms/data.php');
$xml_file = curl_exec($curl_handle);
curl_close($curl_handle);