使用filesize读取远程文件大小

时间:2010-07-12 04:21:39

标签: php filesize remote-access

我阅读了filesize()能够从远程文件计算文件大小的手册。 但是,当我尝试用下面的代码片段做到这一点时。我收到错误PHP Warning: filesize(): stat failed for http://someserver/free_wallpaper/jpg/0000122_480_320.jpg in /tmp/test.php on line 5

这是我的代码段:

$file = "http://someserver/free_wallpaper/jpg/0000122_480_320.jpg";
echo filesize( $file );
  

原来,我无法使用HTTP   文件大小()。案件结束。我会用的   片段here作为解决方法   溶液

5 个答案:

答案 0 :(得分:4)

您可以使用以下代码获取网址的文件大小

function getFileSize($ file){

   $ch = curl_init($file);
   curl_setopt($ch, CURLOPT_NOBODY, true);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_HEADER, true);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

   $data = curl_exec($ch);
   curl_close($ch);
   $contentLength=0;
   if (preg_match('/Content-Length: (\d+)/', $data, $matches)) {
       $contentLength = (int)$matches[1];

   }
   return $contentLength; }

答案 1 :(得分:2)

filesize不适用于HTTP - 它取决于statisn't supported for the HTTP(S) protocol

filesize的PHP手册页说:

Refer to List of Supported Protocols/Wrappers for a listing of which wrappers support stat() family of functionality.

这并不意味着每个协议/包装器都使用filesize“开箱即用”。您可以通过执行远程URL的完整GET并计算您获得的数据的大小来解决这个问题,如果您可以获得Content-Length标头,则可以尝试HEAD请求以避免传输文件数据。 / p>

答案 2 :(得分:0)

我不知道你在哪里读到的。 filesize需要stat,并且基于HTTP wrapper页面,我认为它不支持stat任何版本的PHP。

答案 3 :(得分:0)

您可能希望使用http_head()进行调查。我认为您引用的代码段会下载文件以确定文件大小,这可能不是必需的。如果您引用的Web服务器发回准确的标头信息,您应该能够确定文件大小,日期修改和其他一些有用的标识功能。

答案 4 :(得分:0)

如果您想获得远程图片尺寸,请尝试使用getimagesize()