Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从url获取下载名称php编码_Php_Url_Download_Filenames - Fatal编程技术网

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

如何从url获取下载名称php编码,php,url,download,filenames,Php,Url,Download,Filenames,我一直在尝试从url获取文件名,我发现基本名称很简单 直到我找到了那个些并没有真名的URL,intil下载了 下面是我找到的链接示例 这里的真名是youtubedownloadersetup272.exe 如您所见,在下载之前,它没有显示任何名称 我一直在寻找,我绝望的什么也找不到,如果有人能给我指路,我将不胜感激。谢谢 我很抱歉再次打扰您,但是我在download.com上找到了这个链接,并且我没有使用curl设置文件名 <?php function getFilename($url

我一直在尝试从url获取文件名,我发现基本名称很简单 直到我找到了那个些并没有真名的URL,intil下载了

下面是我找到的链接示例

这里的真名是youtubedownloadersetup272.exe

如您所见,在下载之前,它没有显示任何名称

我一直在寻找,我绝望的什么也找不到,如果有人能给我指路,我将不胜感激。谢谢

我很抱歉再次打扰您,但是我在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$数据的数据

HTTP/1.1200ok 服务器:Apache 接受范围:字节 内容配置:附件 内容类型:应用程序/下载 年龄:866 日期:2011年4月16日星期六10:16:54 GMT 最后修改:2011年4月8日星期五18:04:41 GMT 内容长度:4700823 连接:保持活力

如果我理解了你给我的纸条,它就不会工作了,因为它没有文件名,
有没有一种方法可以在不必执行正则表达式或解析url(YouTubeDownloaderSetup272.exe?e………)的情况下获得名称,就像您给我的纸条一样?

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

您将查找如下标题:

Content-Disposition: attachment; filename=???
其中,问号是文件名

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

下载

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");

您可以执行
HEAD
请求而不是
GET
,以获取标题而不是文件。您好,谢谢。我正要告诉您,它不起作用,但我看到您更改了它。谢谢你的帮助。你能帮我解决这个新问题吗?下载网址。com@marisoldelta,regex不好,但现在它可以工作了,对于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");