如何从url php编码中获取下载名称

时间:2011-04-16 00:58:24

标签: php url download filenames

我一直试图从网址获取文件的名称,我发现基本名称很简单 直到我找到了没有真名字的网址,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=1302969716&h=89b64b6e8e7485eab1e560bbdf68281d&lop=link&ptype=1901&ontid=2071&siteId=4&edId=3&spi=fdc220b131cda22d9d3f715684d064ca&pid=11883966&psid=10647340&fileName=YouTubeDownloaderSetup272.exe"); 

?>

它以echo $ data

返回

HTTP / 1.1 200好的 服务器:Apache Accept-Ranges:字节 内容 - 处置:附件 内容类型:应用程序/下载 年龄:866 日期:星期六,2011年4月16日10:16:54 GMT 最后修改时间:2011年4月8日星期五18:04:41 GMT 内容长度:4700823 连接:保持活力

如果我理解你给我的脚本它不会工作,因为它没有文件名, 有没有办法得到这个名称,不必进行正则表达式或解析网址(YouTubeDownloaderSetup272.exe?e .........),就像你给我的脚本一样?

2 个答案:

答案 0 :(得分:0)

您需要使用curl或其他一些库来请求文件并查看响应的标题。

您将寻找像:

这样的标题
Content-Disposition: attachment; filename=???

问号是文件的名称。

(您仍然需要下载文件,或者至少看起来像是在下载文件。)

答案 1 :(得分:0)

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=1302969716&h=89b64b6e8e7485eab1e560bbdf68281d&lop=link&ptype=1901&ontid=2071&siteId=4&edId=3&spi=fdc220b131cda22d9d3f715684d064ca&pid=11883966&psid=10647340&fileName=YouTubeDownloaderSetup272.exe");