2

我阅读了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 用于文件大小()。结案。我将在这里使用代码片段作为解决方案。

4

5 回答 5

2

filesize不适用于 HTTP - 它取决于HTTP(S)stat协议不支持

文件大小的 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 请求以避免传输文件数据。

于 2010-07-12T04:25:07.843 回答
1

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

函数 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; }
于 2014-02-26T10:32:16.297 回答
0

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

于 2010-07-12T04:24:58.250 回答
0

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

于 2010-07-12T04:33:46.690 回答
0

如果要获取远程图片大小,请尝试使用getimagesize()

于 2010-07-12T05:19:09.987 回答