#php #url #download #filenames
#php #url #Скачать #имена файлов
Вопрос:
я пытался получить название файлов из URL-адреса, я нашел это простым с базовым именем, пока не наткнулся на URL-адреса, которые не имеют признака истинного имени, intil загружены
вот пример ссылок, которые я нашел
здесь истинное имя youtubedownloadersetup272.exe http://qdrive.net/index.php/page-file_share-choice-download_file-id_file-223658-ce-0
как вы можете видеть, он не показывает имя до загрузки.
я много искал, я отчаялся ничего не найти, буду признателен, если кто-нибудь сможет указать мне путь, спасибо.
извините, что снова беспокою, но я нашел эту ссылку из download.com и я не вижу имя файла с помощью curl
<?php
function getFilename($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$data = curl_exec($ch);
echo $data;
preg_match("#filename=([^n] )#is", $data, $matches);
return $matches[1];
}
echo getFilename("http://software-files-l.cnet.com/s/software/11/88/39/66/YouTubeDownloaderSetup272.exe?e=1302969716amp;h=89b64b6e8e7485eab1e560bbdf68281damp;lop=linkamp;ptype=1901amp;ontid=2071amp;siteId=4amp;edId=3amp;spi=fdc220b131cda22d9d3f715684d064caamp;pid=11883966amp;psid=10647340amp;fileName=YouTubeDownloaderSetup272.exe");
?>
он возвращает это с помощью echo $ data
HTTP / 1.1 200 OK Сервер: Apache Принимает диапазоны: байты Расположение содержимого: вложение Тип содержимого: приложение / возраст загрузки: 866 Дата: Сб, 16 Апр 2011 10:16:54 GMT Последнее изменение: Пт, 08 апр 2011 18:04:41 GMT Длина содержимого: 4700823 Подключение: поддерживается
если я правильно понял сценарий, который вы мне дали, он не будет работать, потому что у него нет имени файла, есть ли способ получить имя без необходимости выполнять регулярное выражение или разбирать URL (YouTubeDownloaderSetup272.exe?e………), нравится сумочка , которую ты мне дал ?
Ответ №1:
Вам нужно использовать curl
или какую-либо другую библиотеку, чтобы запросить файл и посмотреть на заголовки ответа.
Вы будете искать заголовок, подобный:
Content-Disposition: attachment; filename=???
Где вопросительные знаки — это имя файла.
(Вам все равно придется загрузить файл или, по крайней мере, сделать вид, что вы загружаете файл.)
Комментарии:
1. вы можете выполнить
HEAD
запрос вместоGET
, чтобы получить заголовки, а не файл.
Ответ №2:
function getFilename($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$data = curl_exec($ch);
preg_match("#filename=([^n] )#is", $data, $matches);
return $matches[1];
}
echo getFilename("http://qdrive.net/index.php/page-file_share-choice-download_file-id_file-223658-ce-0"); //YouTubeDownloaderSetup272.exe
Для download.com …
function download_com($url){
$filename = explode("?", $url);
$filename = explode("/", $filename[0]);
$filename = end($filename);
return $filename;
}
echo download_com("http://software-files-l.cnet.com/s/software/11/88/39/66/YouTubeDownloaderSetup272.exe?e=1302969716amp;h=89b64b6e8e7485eab1e560bbdf68281damp;lop=linkamp;ptype=1901amp;ontid=2071amp;siteId=4amp;edId=3amp;spi=fdc220b131cda22d9d3f715684d064caamp;pid=11883966amp;psid=10647340amp;fileName=YouTubeDownloaderSetup272.exe");
Комментарии:
1. здравствуйте, спасибо, я собирался сказать вам, что это не работает, но я вижу, что вы его меняете. спасибо за всю помощь
2. можете ли вы помочь мне с этой новой проблемой URL из download.com
3. @marisoldelta, регулярное выражение было плохим, но теперь оно работает, для download.com вам это не нужно, я скоро обновлю свой ответ.