Закачать файл с удаленного сервера по его url?

Статус
В этой теме нельзя размещать новые ответы.

usergeyv

Знаток
Регистрация
5 Июл 2013
Сообщения
152
Реакции
25
Нужно скачать файл к себе на сервер в папку file по его url
выполняю
PHP:
$url = "http://site.ru/download/550482";


function get_result($url){

        $ch = curl_init();
        $headers = [
            'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0',
            'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
            'Connection: keep-alive'
        ];
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
        curl_setopt ($ch, CURLOPT_REFERER, $url);
        curl_setopt ($ch, CURLOPT_PROXY, "13.127.150.255:80");
        curl_setopt ($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // следовать за редиректами
        curl_setopt($ch, CURLOPT_FAILONERROR, 1);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// просто отключаем проверку сертификата
        curl_setopt ($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);

        echo $str = curl_exec($ch);
        preg_match('/Content-Length:\s([0-9].+?)\s/',$str,$res);
        echo $Length = $res[1];
        preg_match('/Content-Disposition: attachment; filename="(.*?)"/',$str,$res2);
        echo $Disposition = $res2[1];
     
        return $res;
    }
    get_result($url);
вижу заголовки, названия, вес, куча непонятных символов(видимо сам файл)
HTML:
HTTP/1.1 200 OK Date: Wed, 07 Mar 2018 16:12:52 GMT Server: snff X-Frame-Options: SAMEORIGIN Content-Type: application/x-bittorrent Content-Disposition: attachment; filename="CHelovek-Nevidimka.10_sezon.2017.WEB-DLRip.File.torrent" Content-Transfer-Encoding: binary Age: 3539 X-Debug: 86400.000 6 Content-Length: 47276 Accept-Ranges: bytes Vary: Accept-Encoding,User-Agent X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Keep-Alive: timeout=5, max=100 Connection: Keep-Alive d8:announce20:udp://shubt.net:271013:announce-listll20:udp://shubt.net:2710el31:http://retracker.local/announceel43:http://tracker.filetracker.pl:8089/announceel44:http://tracker2.wasabii.com.tw:6969/announceel40:http://tracker.grepler.com:6969/announceel35:http://125.227.35.196:6969/announceel41:http://tracker.tiny-vps.com:6969/announceel35:http://87.248.186.252:8080/announceel34:http://210.244.71.25:6969/announceel33:http://46.4.109.148:6969/announceel24:udp://46.148.18.250:2710el37:http://tracker.dler.org:6969/announceel37:udp://[2001:67c:28f8:92::1111:1]:2710el37:udp://ipv6.leechers-paradise.org:6969ee7:comment30:http://rutor.is/torrent/55048210:created by13:uTorrent/221013:creation datei1495859623e8:encoding5:UTF-84:infod5:filesld6:lengthi675084288e4:pathl98:07.Человек-невиди..........................HЇЗюдТЋ›†фјЩЬ©Ў–ГЬ‡,QСsWg›™7і!


как его сохранить у себя?
 
Последнее редактирование:
file_put_contents($filename, $str);
сохраняет , но содержит заголовки и не открывается нужной программой , как исправить?
Код:
HTTP/1.1 200 OK
Date: Wed, 07 Mar 2018 16:12:52 GMT
Server: snff
X-Frame-Options: SAMEORIGIN
Content-Type: application/x-bittorrent
Content-Disposition: attachment; filename="CHelovek-Nevidimka.10_sezon.2017.WEB-DLRip.File.torrent"
Content-Transfer-Encoding: binary
Age: 3866
X-Debug: 86400.000 8
Content-Length: 47276
Accept-Ranges: bytes
Vary: Accept-Encoding,User-Agent
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive

d8:announce20:udp:...................................

если сделать, то все ОК
Код:
curl_setopt ($ch, CURLOPT_HEADER, 0);
но имя файла не узнаю....

значит буду использовать curl дважды, получить имя и записать файл
 
Последнее редактирование:
сохраняет , но содержит заголовки и не открывается нужной программой , как исправить?
Код:
HTTP/1.1 200 OK
Date: Wed, 07 Mar 2018 16:12:52 GMT
Server: snff
X-Frame-Options: SAMEORIGIN
Content-Type: application/x-bittorrent
Content-Disposition: attachment; filename="CHelovek-Nevidimka.10_sezon.2017.WEB-DLRip.File.torrent"
Content-Transfer-Encoding: binary
Age: 3866
X-Debug: 86400.000 8
Content-Length: 47276
Accept-Ranges: bytes
Vary: Accept-Encoding,User-Agent
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive

d8:announce20:udp:...................................

если сделать, то все ОК
Код:
curl_setopt ($ch, CURLOPT_HEADER, 0);
но имя файла не узнаю....

значит буду использовать curl дважды, получить имя и записать файл
Для просмотра ссылки Войди или Зарегистрируйся

$request->response в файл, заголовки есть в $request->headers

PHP:
$params = array(
    'convert_encoding' => false // отключаем автоматическое преобразование в UTF-8
);

$request = new request($url, $params);
$request->set(CURLOPT_REFERER, $url);
$request->set(CURLOPT_PROXY, "http://13.127.150.255:80");
$request->set(CURLOPT_FAILONERROR, true);
$request->set(CURLOPT_SSL_VERIFYHOST, false);
$request->set(CURLOPT_SSL_VERIFYPEER, false);
$request->set(CURLOPT_TIMEOUT, 30);
$request->send();

file_put_contents($filename, $request->response);

preg_match('/Content-Disposition: attachment; filename="(.*?)"/', $request->headers, $res2);
echo $Disposition = $res2[1];
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху