通过命令行php脚本获取xml文件

时间:2011-08-29 16:53:18

标签: php xml command-line curl file-get-contents

如何通过命令行php脚本获取xml文件的内容?如果我通过IE浏览器访问此链接,我可以获取XML文件:http://alerts.weather.gov/cap/ma.php?x=0。如果我尝试通过c:\path\php.exe get_advisory_upd.php命令行获取文件,则脚本会显示错误host did not respond in allowed time。这似乎是一个安全问题。我必须有一个计划任务,以指定的时间间隔获取该xml。我怎么做? file_get_contents()返回相同的错误,simplexml_load_file()可能没有显示任何错误,但没有得到xml文件。

PHP脚本get_advisory_upd.php:

<?php

ini_set('display_errors', 1);
error_reporting(E_ALL);

$file = 'atom-advisory-MAZ015_UPD.txt';
$newfile = 'atom-advisory-MAZ015.txt.bak';

if (!copy($file, $newfile)) {
    echo "Failed to copy $file...\n";
}

/* $contents = file_get_contents('http://alerts.weather.gov/cap/ma.php?x=0'); */

// Use cURL to get the RSS feed into a PHP string variable.
$ref_url = "http://192.x.x.x/weather/get_advisory_upd.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://alerts.weather.gov/cap/ma.php?x=0');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_REFERER, $ref_url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000);
$contents = curl_exec($ch);
echo 'Curl error: '. curl_error($ch);
curl_close($ch);

/* $contents = simplexml_load_file('http://alerts.weather.gov/cap/ma.php?x=0');

echo "contents \n".$contents; */

file_put_contents($file, $contents);

?>

更新

我从内部网运行此脚本。正如y_a_v_a建议我指定了CURLOPT_REFERER选项来告诉远程主机我的URL。我用

做到了
$ref_url = "http://192.x.x.x/weather/get_advisory_upd.php";
curl_setopt($ch, CURLOPT_REFERER, $ref_url);

是否有不同的方式来指定网址?

1 个答案:

答案 0 :(得分:1)

设置一个理智的CURLOPT_REFERER并将CURLOPT_CONNECTTIMEOUT设置为零并运行您的脚本。通过添加

验证会发生什么
$curl_error = curl_error($ch);

并在关闭curl操作后转储$ curl_error。