У меня есть следующий php-код, который я нашел здесь:
function download_xml()
{
$url = 'http://tv.sygko.net/tv.xml';
$ch = curl_init($url);
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
echo("curl_exec was succesful"); //This never gets called
curl_close($ch);
return $data;
}
$my_file = 'tvdata.xml';
$handle = fopen($my_file, 'w');
$data = download_xml();
fwrite($handle, $data);
Я пытаюсь загрузить xml по указанному URL-адресу и сохранить его на диск. Однако он останавливается после завершения около 80% и никогда не достигает вызова echo
после вызова curl_exec
. Я не уверен, почему, но я считаю, что это потому, что ему не хватает памяти. Поэтому я хотел бы спросить, можно ли заставить curl записывать данные в файл каждый раз, когда он загружается, скажем, 4 КБ. Если это невозможно, кто-нибудь знает способ получить файл xml, хранящийся по URL-адресу, загруженному и сохраненному на моем диске с помощью php?
Большое спасибо, БЕН.
EDIT: это код сейчас, он не работает. Он записывает данные в файл, но по-прежнему составляет только около 80% документа. Может быть, это не потому, что он превышает память, а по какой-то другой причине? Я действительно не могу поверить, что так сложно скопировать файл с URL-адреса на диск...
<?
$url = 'http://tv.sygko.net/tv.xml';
$my_file = fopen('tvdata.xml', 'w');
$ch = curl_init($url);
$timeout = 300;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FILE, $my_file);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 4096);
curl_exec($ch) OR die("Error in curl_exec()");
echo("got to after curl exec");
fclose($my_file);
curl_close($ch);
?>