Как скачать файл?

Рейтинг: 0Ответов: 1Опубликовано: 17.12.2014

Есть файлик с кучей ссылок вида "http://www.ex.ua/load/**", по которым скачиваются аудио-файлы (если ссылку забить в браузере или использовать с командой wget). Безуспешно пробую сделать скрипт для выгрузки этих файлов из сети (в массиве $links содержатся ссылки):

вариант 1:

foreach ($links as $key => $link) {
        $fs = fopen($link, 'rb');
        $file = fopen('files/'.($key + 1), 'w');
        if ($fs && $file) {
            echo($link.' is downloading.<br/>');
            while (!feof($fs)) {
                fwrite($file, fread($fs, 4096));
            }
        }
        fclose($file);
        fclose($fs);
    }

вариант 2:

foreach ($links as $key => $link) {
        $c = curl_init($link);
        $file = fopen('files/'.($key + 1), 'wb');
        curl_setopt($c, CURLOPT_FILE, $file);
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 0);
        curl_setopt($c, CURLOPT_HEADER, true);
        curl_exec($c);
        curl_close($c);
        fclose($file);
    }

вариант 3:

foreach ($links as $key => $link) {
        if (!copy($link, 'files/'.($key + 1))) {
            echo $link.' copy\'s error<br/>';
        }
    }

вариант 4:

foreach ($links as $key => $link) {
        $ch = curl_init($link);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Googlebot/2.1 (http://www.googlebot.com/bot.html)');
        $output = curl_exec($ch);
        $fh = fopen('files/'.($key + 1), 'w');
        fwrite($fh, $output);
        fclose($fh);
    }

вариант 5:

foreach ($links as $key => $link) {
        file_put_contents('files/'.($key + 1), file_get_contents($link));
    }

И ни один вариант не делает того, что нужно - не скачивает требуемые файлы. При использовании варианта 1, 3, 5 полученные файлы содержат html/css код страницы, на которой содержится ссылка на требуемый файл. При использовании вариантов 2, 4 полученные файлы содержат

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.6.2</center>
</body>
</html>

Так я и не разобрался как же скачать файлы. Может, подскажет кто-нибудь? :)

UPD.

Скрины запрос/ответов при выгрузке файла браузером:

http://hkar.ru/xgKC

http://hkar.ru/xgKD

http://hkar.ru/xgKE

ЗЫ. Не получается выложить в удобном формате (в виде превьюшек/картинок), поэтому помещаю ссылки на скрины.

Ответы

▲ 1

Вы пытаетесь программировать просто подставляя в исходный код найденные в Google части программы? Попробуйте прочитать про используемые вами функции, например, на php.net

Обновление

Yandex: wget по маске

Обновление

С сервера может отдаваться страница-заглушка, если запрашивающий музыку клиент не определен, как какой- то браузер. При побайтовом чтении заголовок на сервер с музыкой отправляется с идентификацией вашего сервера, я думаю. Посмотрите примеры htaccess защиты от кражи картинок с сайта. В вашем случае помочь может только CURL или какая-то сайтокачалка типа teleport pro.