Michał Sosnowski

Michał Sosnowski grafik/webmaster

Temat: Kopiowanie pliku generowanego w php "w locie"

Witam

mam problem ze skopiowaniem pliku xml, który jest generowany "na żądanie" wielkość ok 17MB. Robię to standardowo przez polecenie copy(), i niestety wynik jest losowy : raz się uda skopiować a raz wywala błąd :
[function.copy]: failed to open stream: HTTP request failed! in


Zrobiłem sobie raport - tak to się przedstawia w ciągu dwóch godziny - skrypt wywoływany co 5 minut :
2015-06-16 14:48:50 - HTTP Filed!
2015-06-16 14:50:52 - OK!
2015-06-16 14:55:01 - HTTP Filed!
2015-06-16 15:00:01 - HTTP Filed!
2015-06-16 15:05:01 - HTTP Filed!
2015-06-16 15:10:01 - HTTP Filed!
2015-06-16 15:15:02 - HTTP Filed!
2015-06-16 15:20:01 - OK!
2015-06-16 15:25:01 - HTTP Filed!
2015-06-16 15:30:01 - OK!
2015-06-16 15:35:01 - OK!
2015-06-16 15:40:01 - HTTP Filed!
2015-06-16 15:45:01 - HTTP Filed!
2015-06-16 15:50:01 - HTTP Filed!
2015-06-16 15:55:01 - OK!
2015-06-16 16:00:01 - OK!
2015-06-16 16:05:01 - OK!
2015-06-16 16:10:01 - HTTP Filed!
2015-06-16 16:15:02 - OK!
2015-06-16 16:20:01 - HTTP Filed!
2015-06-16 16:25:01 - HTTP Filed!
2015-06-16 16:30:01 - OK!
2015-06-16 16:35:01 - OK!
2015-06-16 16:40:01 - HTTP Filed!
2015-06-16 16:45:01 - OK!
2015-06-16 16:50:01 - OK!
2015-06-16 16:55:01 - OK!
2015-06-16 17:00:02 - HTTP Filed!


Spotkaliścię się kiedyś z takim problemem?

Temat: Kopiowanie pliku generowanego w php "w locie"

http://php.net/manual/en/function.copy.php#115114
Michał Sosnowski

Michał Sosnowski grafik/webmaster

Temat: Kopiowanie pliku generowanego w php "w locie"

Znalazłem chyba podobną funkcję :
function getUrlContents($url)
{
$url_parsed = parse_url($url);

$host = $url_parsed["host"];
if ($url == '' || $host == '') {
return false;
}
$port = 80;
$path = (empty($url_parsed["path"]) ? '/' : $url_parsed["path"]);
$path.= (!empty($url_parsed["query"]) ? '?'.$url_parsed["query"] : '');
$out = "GET $path HTTP/1.0\r\nHost: $host\r\nConnection: Close\r\n\r\n";
$fp = fsockopen($host, $port, $errno, $errstr, 30);
fwrite($fp, $out);
$headers = '';
$content = '';
$buf = '';
$isBody = false;
while (!feof($fp) and !$isBody) {
$buf = fgets($fp, 1024);
if ($buf == "\r\n" ) {$isBody = true;}
else{$headers .= $buf;}
}
$file1 = fopen('url.xml', 'w');
$bytes=stream_copy_to_stream($fp,$file1);
fclose($fp);
return $bytes;
}


OD rana kopiuje tą funkcją plik co 5 minut - za każdym razem z sukcesem!

Następna dyskusja:

zmiana nazwy pliku w locie




Wyślij zaproszenie do