替代file_get_contents?
$xml_file = file_get_contents(SITE_PATH . 'cms/data.php');
问题是服务器禁用了URL文件访问。 我无法启用它,它是一个托pipe的东西。
所以问题是这样的。 data.php
文件生成xml代码。
我怎样才能执行此操作并获取XML数据,而无需执行上述方法?
可能吗?
使用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; }
你应该尝试这样的事情,我正在为我的项目做这个,它是一个后备系统
//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.... }
是的,如果你有URL封装禁用,你应该使用套接字,甚至更好, CURL库。
如果它是您网站的一部分,那么请使用文件系统path引用它,而不是url。 /var/www/...
,而不是http://domain.tld/...
如果文件是本地的,就像你对SITE_PATH
提出的build议那样,这很简单,只需执行脚本并使用输出控制函数将结果caching在一个variables中:
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
。 如果没有工作…改变您的托pipe服务提供商
如果你有它,使用curl是你最好的select。
您可以通过执行phpinfo()
来查看它是否被启用,并在页面中searchcurl。
如果启用,请尝试以下操作:
$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);
如果你想读取一个没有file_get_contents()
的URL生成的XML,那么你可能会想看看cURL