Curl сохранить файл на сервер

new_forward

Профессор
Регистрация
5 Май 2008
Сообщения
673
Реакции
44
Доброго времени суток, пытаюсь сохранить файл с удаленного сервера, но что то не получается.

PHP:
function GetFile($url_t, $new_t, $referer){

    $path = 'путь к дериктории с файлами куда сохранить файл';
    $user_cookie = "путь к кукам тхт";
   
    $header [] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    $header [] = "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3";
    $header [] = "Cache-Control: max-age=0";
    $header [] = "Accept-Encoding: gzip, deflate";
    $header [] = "Connection: keep-alive";
    $header [] = "DNT: 1";
    $header [] = "Host: mysite.ru";
    $header [] = "Upgrade-Insecure-Requests: 1";
    $header [] = "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0";
   
    $fp = fopen($path.$new_t, 'w');
    $ch = curl_init($url_t);
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_TIMEOUT, 100);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6');
    curl_setopt($ch, CURLE_OPERATION_TIMEOUTED, 100);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 100);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie);
    curl_setopt($ch, CURLOPT_FILE, $fp);
    $res = curl_exec($ch);
    curl_close($ch);
    fclose($fp);
   
    if(strpos(file_get_contents($path.$new_t), '<html')=== false && filesize($path.$new_t)>100){
        return true;
    } else {
        unlink($path.$new_t);
        return false;
    }
}
 
$path = 'путь к дериктории с файлами куда сохранить файл';
$user_cookie = "путь к кукам тхт";
Вы пути здесь прописали? Они точно существуют?
Проверьте еще права доступа в эти папки.
 
PHP:
$file = 'путь к файлу на удалённом сервере';
download($file);

function download($url) {
    set_time_limit(0);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $r = curl_exec($ch);
    curl_close($ch);
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT');
    header('Cache-Control: private', false);
    header('Content-Type: application/force-download');
    header('Content-Disposition: attachment; filename="' . basename($url) . '"');
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . strlen($r));
    header('Connection: close');
    echo $r;
}
 
Спасибо работает, но только один раз как и моя функция, первый файл скачивает, а потом нет, удаленный сервер возвращает :

HTML:
<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body bgcolor="white">
<center><h1>503 Service Temporarily Unavailable</h1></center>
<hr><center>nginx</center>
</body>
</html>
<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body bgcolor="white">
<center><h1>503 Service Temporarily Unavailable</h1></center>
<hr><center>nginx</center>
</body>
</html>

Хотя если зайти через браузер и скачивать с этого сайта, все норм скачивается.
 
Спасибо работает, но только один раз как и моя функция, первый файл скачивает, а потом нет, удаленный сервер возвращает :

HTML:
<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body bgcolor="white">
<center><h1>503 Service Temporarily Unavailable</h1></center>
<hr><center>nginx</center>
</body>
</html>
<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body bgcolor="white">
<center><h1>503 Service Temporarily Unavailable</h1></center>
<hr><center>nginx</center>
</body>
</html>

Хотя если зайти через браузер и скачивать с этого сайта, все норм скачивается.
Второй раз не скачивает вообще или при условии, что в папке уже есть скачанный файл? Может там авторизация какая-то или защита?
 
Последнее редактирование:
Не скачивается вообще, вернее скачивается html, вот пример ссылки для скачивания:


Авторизация для скачивания не нужна, если копировать ссылку на скачивание из одного браузера и скачивать в другом, то все отлично скачивается.

А вот курлом так не получается.
 
Назад
Сверху