在PHP中获取URL的文件名

时间:2011-07-21 13:54:13

标签: php

我想从网址获取文件名。但问题是它不会以扩展名结束。

例如,http://something.com/1245/65/。点击此URL后,我们将获得一个PDF文件。如何将该文件的文件名存储在变量中?

4 个答案:

答案 0 :(得分:4)

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

这将解析 filename = foo.bar 信息的Content-Disposition行(假设它确实使用此方法直接渲染文件。)

答案 1 :(得分:0)

如果您为GET发出http://something.com/1245/65/请求,并且它会返回一个PDF文件 - 也就是Content-Type = application/pdf的内容 - 您绝对没办法知道发送给您的.pdf文件的实际名称。

在我处理的Web应用程序中,我生成合并 PDF文件并将它们直接流式传输到浏览器以响应这样的GET请求 - 没有实际文件,即使存在所以肯定没有文件名。

如果您控制服务器,您可以创建一种方法将名称传递给请求者,或者如果它是您想知道的PHP代码(在服务器上运行),您可以提供一些其他服务器端钩子来查找文件名。

答案 2 :(得分:0)

很奇怪,尝试使用与上面相同的代码也使我的Web服务器挂起。我替换了这段代码:

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD');

与此:

curl_setopt($ch, CURLOPT_NOBODY, true);

答案 3 :(得分:-1)

假设你有一个网址

$url = 'www/htdocs/lib/inc.php'

 $pathifo = pathinfo($url)// Return Array 

当你说$pathinfo['PATHINFO_FILENAME'] //It would output inc