$xml_file = file_get_contents(SITE_PATH . 'cms/data.php');
问题是服务器已禁用URL文件访问。我无法启用它,它是托管的东西。
所以问题是这个。 data.php
文件生成xml代码。
如何在不执行上述方法的情况下执行此操作并获取xml数据?
有可能吗?
答案 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_create
或fsockopen
。如果没有任何效果......请更改您的托管服务提供商。
答案 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);