как получить имя загрузки из URL-адреса php coding

#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 вам это не нужно, я скоро обновлю свой ответ.