2012-04-19 3 views
0

У меня проблема с загрузкой файлов через PHP.Загрузка файлов через PHP

Самое смешное, что я не могу отследить проблему. Код работает хорошо для некоторых сайтов и не хорош с другими. Это петля на PHP, которая загружает файлы резервных копий с веб-сайтов (есть задержка со сном перед запросами).

Почему я не могу отследить проблему? Потому что, когда я запускаю вручную код, он работает (загружает файл). И когда он запускается CRON, иногда он загружает файл, иногда он НЕ загружает файл (загружает только две пустые новые строки).

Загрузка с curl (я также пробовал с другим кодом с fsockopen и fread).

У кого-нибудь есть идея, как я могу это решить?

Заголовки удаляются с помощью CURL, устанавливая правильный вариант.

function fetch_url($url) { 
    $c = curl_init(); 
    curl_setopt($c, CURLOPT_URL, $url); 
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($c, CURLOPT_TIMEOUT, 20); 

    if ($cookiejar != '') { 
     curl_setopt($c, CURLOPT_COOKIEJAR, $cookiejar); 
     curl_setopt($c, CURLOPT_COOKIEFILE, $cookiejar); 
    } 

    curl_setopt($c, CURLOPT_HEADER , false); 
    curl_setopt($c, CURLOPT_SSL_VERIFYHOST , false); 
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER , false); 
    curl_setopt($c, CURLOPT_FOLLOWLOCATION , true); 
    curl_setopt($c, CURLOPT_AUTOREFERER , true); 
    curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12'); 
    $con = curl_exec($c); 
    curl_close($c); 
    return $con; 
} 

echo fetch_url('http://www.example.com/zip.zip'); 
+0

Хорошо. Большое спасибо. – BetterMan21

+0

Вопрос безопасности: у веб-серверов, содержащих эти резервные копии, есть способ предоставить вам доступ как законного пользователя - или не имеет значения, будет ли Joe Public загружать копию этих резервных копий? – halfer

+0

Вы должны использовать curl_error и записывать его в txt-файл или что-то в этом роде, тогда вы сможете проследить, почему он не работает, может быть выделено множество причин (слишком много файлов в основном из-за 2 ГБ, неправильных заголовков, развратов или неполных данных, gzip кодировки или таймауты) ... регистрировать каждый запрос на завивки, а также устанавливать некоторую безопасность на место –

ответ

3

Попробуйте использовать http://www.php.net/manual/en/function.curl-getinfo.php для отображения информации о завитка запросу

echo curl_errno($c); 
print_r(curl_getinfo($c)); 

Кроме того, может быть, это в вашем коде в другом месте, но я не вижу каких-либо заголовков типа контента для эхо-файла

$file = fetch_url('http://www.example.com/zip.zip'); 
header('Content-type: application/zip'); 
header('Content-Disposition: attachment; filename="zip.zip"'); 
header("Content-length: " . strlen($file)); 
echo $file; 
+0

Привет, спасибо, попробуем это. Если это не сработает, снова опубликуйте вопрос с выгруженной информацией. – BetterMan21

+0

проблема не в заголовках, потому что я фактически сохраняю загруженное содержимое в файл. – BetterMan21

Смежные вопросы