Получение xml файла через php скрипт командной строки - PullRequest
0 голосов
/ 29 августа 2011

Как мне получить содержимое xml-файла через php-скрипт командной строки? Если я получу доступ к этой ссылке через браузер 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 Script 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);

?>

UPDATE

Я запускаю этот скрипт из интрасети. Как предложил 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);

Есть ли другой способ указать URL?

1 Ответ

1 голос
/ 29 августа 2011

Установите нормальный CURLOPT_REFERER и установите CURLOPT_CONNECTTIMEOUT в ноль и запустите ваш скрипт Проверьте, что происходит, добавив

$curl_error = curl_error($ch);

и сбросьте $ curl_error после того, как вы закрыли действие curl.

...