获取PHP中URL的文件名
我想从URL获取文件名。但问题是它不会以一个扩展结束 例如。单击此URL,我们将获得一个PDF文件。如何将该文件的文件名存储在变量中?如果有url获取PHP中URL的文件名,php,Php,我想从URL获取文件名。但问题是它不会以一个扩展结束 例如。单击此URL,我们将获得一个PDF文件。如何将该文件的文件名存储在变量中?如果有url $url = 'www/htdocs/lib/inc.php' $pathifo = pathinfo($url)// Return Array 当你说$pathinfo['pathinfo\u FILENAME']//如果你发出GET请求http://something.com/1245/65/并返回一个PDF文件,即,Content-Ty
$url = 'www/htdocs/lib/inc.php'
$pathifo = pathinfo($url)// Return Array
当你说
$pathinfo['pathinfo\u FILENAME']//如果你发出GET
请求http://something.com/1245/65/
并返回一个PDF文件,即,Content-Type=application/pdf
——您完全无法知道发送给您的.pdf
文件的实际名称
<?php
header('Content-Type: text/plain');
$curl = curl_init('http://localhost/fakefile.php');
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD');
if (($response = curl_exec($curl)) !== false)
{
if (curl_getinfo($curl, CURLINFO_HTTP_CODE) == '200')
{
var_dump($response);
$reDispo = '/^Content-Disposition: .*?filename=(?<f>[^\s]+|\x22[^\x22]+\x22)\x3B?.*$/m';
if (preg_match($reDispo, $response, $mDispo))
{
$filename = trim($mDispo['f'],' ";');
echo "Filename Found: $filename";
}
}
}
curl_close($curl);
在我处理的web应用程序中,我生成并组合PDF文件,并直接将它们流式传输到浏览器,以响应这样的GET
请求-甚至不存在实际文件,因此肯定没有文件名
如果你控制着服务器,你可以发明一种将名称传达给请求者的方法,或者如果你想知道的是你的PHP代码(在服务器上运行),你可以提供一些其他的服务器端钩子来查找文件名。奇怪的是,尝试上面的代码也会让我的Web服务器挂起。我替换了这个代码:
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD');
为此:
curl_setopt($ch, CURLOPT_NOBODY, true);
可能会使用类似于cURL的东西来请求HEAD,以查看附件的名称?请在此处输入确切的代码…$cURL-iv“url”| less
您严格偏离了示例。阅读问题。我不会说绝对没有文件名。这在很大程度上取决于包含的标题。能够指定文件名。此外,如果没有提供,你可以随时编一个(可能是基于时间/日期组合)。说得好@Brad,也许我不应该这么强烈地表达我的答案,但在我的答案中提到的情况下,我实际上位于内容配置
标题中。我真正想说的是,没有办法真正了解任何给定请求背后的内容,即使对于某些特定情况,它可能是完全可以确定的。最好做strtolower($response),一些服务器可能会设置so@djdance如果您使用*nix或关心文件名的大小写,则不需要。最好在regex模式中指定i
标志。当然,我在另一台服务器(可能是Windows)上看到了这一点。你能给我举个正则表达式中i标志的例子吗;-)@djdance将i
附加到$reDispo
变量。例如,/…/mi
。