如何使用PHP下载以某种奇怪方式重定向的XML文件?
我试图从PHP脚本下载的文件如下:如何使用PHP下载以某种奇怪方式重定向的XML文件?,php,xml,curl,file-get-contents,Php,Xml,Curl,File Get Contents,我试图从PHP脚本下载的文件如下: http://www.navarra.es/appsext/DescargarFichero/default.aspx?codigoAcceso=OpenData&fichero=Farmacias/Farmacias.xml 但是我既不能使用file\u get\u contents()也不能使用cURL。我得到的错误对象引用未设置为对象的实例。 知道怎么做吗 非常感谢,巴勃罗 已更新以添加代码: $url = "http://www.navar
http://www.navarra.es/appsext/DescargarFichero/default.aspx?codigoAcceso=OpenData&fichero=Farmacias/Farmacias.xml
但是我既不能使用file\u get\u contents()
也不能使用cURL
。我得到的错误对象引用未设置为对象的实例。
知道怎么做吗
非常感谢,巴勃罗
已更新以添加代码:
$url = "http://www.navarra.es/appsext/DescargarFichero/default.aspx?codigoAcceso=OpenData&fichero=Farmacias/Farmacias.xml";
$simple = simplexml_load_file(file_get_contents($url));
foreach ($simple->farmacia as $farmacia)
{
var_dump($farmacia);
}
由于@Gordon:
$url = "http://www.navarra.es/appsext/DescargarFichero/default.aspx?codigoAcceso=OpenData&fichero=Farmacias/Farmacias.xml";
$file = file_get_contents($url, FALSE, stream_context_create(array('http' => array('user_agent' => 'php' ))));
$simple = simplexml_load_string($file);
您不需要
cURL
,也不需要file\u get\u contents
将XML加载到任何文件中
但是,在您的特定情况下,问题似乎是服务器希望http请求中有一个用户代理。如果php.ini中未设置用户代理,则可以使用并将其作为:
如果以后不想解析XML文件,也可以使用file\u get\u contents
。您可以将流上下文作为第三个参数传递:
echo file_get_contents(
'http://www.navarra.es/apps…/Farmacias.xml',
FALSE,
stream_context_create(
array(
'http' => array(
'user_agent' => 'php'
)
)
)
);
我一直在使用为@Gordon提供的解决方案,它在localhost中运行良好:
$url = "http://www.navarra.es/appsext/DescargarFichero/default.aspx?codigoAcceso=OpenData&fichero=Farmacias/Farmacias.xml";
$file = file_get_contents($url, FALSE, stream_context_create(array('http' =>array('user_agent' => 'php' ))));
$simple = simplexml_load_string($file);
但是当我把所有的文件上传到服务器上。。。和往常一样,我很惊讶。我开始得到错误URL文件访问在中的服务器配置中被禁用,因此我更改了我发现的此代码的所有文件内容()
你认为这是一个好方法吗
谢谢,Pablo。请显示失败的PHP代码。我已经用代码对其进行了更新。谢谢或者您可以使用curl_setopt($ch,CURLOPT_USERAGENT,“Googlebot/2.1…”)设置用户代理代码>@是的,那也行。不过,我觉得cURL做这件事太过分了。谢谢@Gordon,它工作得很好。根据您的回答,我理解您建议我使用DOM或XMLReader而不是SimpleXML?@Puigcerber mine只是一个示例=P您可以将用户代理设置为您想要的任何代理,它可以是google bot或mozilla代理=)干杯@用户代理可以是识别请求方的任何东西。它不必是浏览器。请参阅我对和/或RFC1945的回答和/或如果您使用curl_setopt($ch,CURLOPT_RETURNTRANSFER,1)代码>您不需要缓冲输出。只需执行$content=curl\u exec()
。再次感谢您的帮助@Gordon。
$url = "http://www.navarra.es/appsext/DescargarFichero/default.aspx?codigoAcceso=OpenData&fichero=Farmacias/Farmacias.xml";
$file = file_get_contents($url, FALSE, stream_context_create(array('http' =>array('user_agent' => 'php' ))));
$simple = simplexml_load_string($file);
function get_content($url)
{
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, "Googlebot/2.1...");
ob_start();
curl_exec ($ch);
curl_close ($ch);
$string = ob_get_contents();
ob_end_clean();
return $string;
}