PHP:如何以字符串形式从不同的服务器加载文件?
我正在尝试以字符串形式从其他域名加载XML文件。我想要的只是xml文件的PHP:如何以字符串形式从不同的服务器加载文件?,php,regex,php4,Php,Regex,Php4,我正在尝试以字符串形式从其他域名加载XML文件。我想要的只是xml文件的标记中的一个文本数组,所以我想,既然我使用的是php4,最简单的方法就是对其执行正则表达式来获取它们。有人能解释一下如何将XML作为字符串加载吗?谢谢 首次使用 文件获取内容(“”) 要获取文件, 插入变量。 在解析xml之后 链接是 在注释中有示例您可以像下面的示例一样使用cURL。我应该补充一点,基于regex的XML解析通常不是一个好主意,您最好使用真正的解析器,尤其是当它变得更复杂时 您可能还想添加一些正则表达式修饰
在注释中有示例您可以像下面的示例一样使用cURL。我应该补充一点,基于regex的XML解析通常不是一个好主意,您最好使用真正的解析器,尤其是当它变得更复杂时 您可能还想添加一些正则表达式修饰符,使其跨多行工作,但我认为问题更多的是如何将内容提取到字符串中
<?php
$curl = curl_init('http://www.example.com');
//make content be returned by curl_exec rather than being printed immediately
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);
if ($result !== false) {
if (preg_match('|<title>(.*)</title>|i', $result, $matches)) {
echo "Title is '{$matches[1]}'";
} else {
//did not find the title
}
} else {
//request failed
die (curl_error($curl));
}
我将此函数作为一个片段:
function getHTML($url) {
if($url == false || empty($url)) return false;
$options = array(
CURLOPT_URL => $url, // URL of the page
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => "spider", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 3, // stop after 3 redirects
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
//Ending all that cURL mess...
//Removing linebreaks,multiple whitespace and tabs for easier Regexing
$content = str_replace(array("\n", "\r", "\t", "\o", "\xOB"), '', $content);
$content = preg_replace('/\s\s+/', ' ', $content);
$this->profilehtml = $content;
return $content;
}
返回的HTML没有换行符、制表符、多个空格等,只有一行
现在你要做这场预赛:
$html = getHTML($url)
preg_match('|<title>(.*)</title>|iUsm',$html,$matches);
$html=getHTML($url)
preg|u match('|(.*)|iUsm',$html,$matches);
$matches[1]将包含您需要的信息。如果您正在加载格式良好的xml,请跳过基于字符的解析,并使用DOM函数:
$d = new DOMDocument;
$d->load("http://url/file.xml");
$titles = $d->getElementsByTagName('title');
if ($titles) {
echo $titles->item(0)->nodeValue;
}
如果由于php的设置原因无法使用DOMDocument::load(),请使用curl获取文件,然后执行以下操作:
$d = new DOMDocument;
$d->loadXML($grabbedfile);
...
谢谢你,我得到了这个错误:“警告:file\u get\u contents():URL文件访问在服务器配置中被禁用。”我知道启用了cURL,有没有办法做到这一点。谢谢你可以使用它//虚构的URL指向一个没有数据的现有文件(即0字节文件)$URL=''$curl=curl_init();curl_setopt($curl,CURLOPT_URL,$URL);curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);curl_setopt($curl,CURLOPT_HEADER,false);//执行并返回字符串(这应该是一个空字符串“”)$str=curl\u exec($curl);curl_close($curl);//$str的值实际上是bool(true),而不是空字符串“”var_dump($str);