2010-07-12 112 views
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的 文件大小()。案件关闭。我将使用 片段here作为解决方案的变通解决方案 。

+1

还有的让网页URL的文件大小一个较短的解决方法:get_headers($ file_url,1)会给你一个数组,它将(有希望)有一个关键字“Content-length”,它的值是文件的字节数。 – Petruza 2010-12-21 19:22:08

回答

2

filesize不适用于HTTP - 它取决于stat,其中isn't supported for the HTTP(S) protocol

的文件大小的PHP手册页说:

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

这并不意味着每一个协议/包装工程“开箱即用”与filesize。您可以通过完整地获取远程URL并计算返回的数据大小来解决此问题,如果您可以获取Content-Length头,则可以尝试HEAD请求以避免传输文件数据。

+0

啊,好的。我想念那个文档:(。 – ariefbayu 2010-07-12 04:27:30

+0

@silent:用一些可能的解决方法更新了我的答案。 – 2010-07-12 04:29:23

+1

已更新的问题。我已经添加了我将使用的解决方法的链接。 – ariefbayu 2010-07-12 04:30:05

0

我不知道你看的。 filesize需要stat,以及基于HTTP wrapper页面上,我不认为它在PHP的任何版本支持stat

0

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

4

您可以使用下面的代码

功能getFileSize($文件){

$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; } 
+0

获取不同的数字...可以解释原因吗? ?...即:'$ ch = curl_init('http://www.ehow.co.uk/ui/en-gb/ehow.png'); ///输出:11402'和'$ ch = curl_init ('http://www.ehow.co.uk/ui/en-gb/ehow.pngjavascript:alert(1);');//输出:45821'和'$ ch = curl_init('http:// www.ehow.co.uk/ui/en-gb/wrong_path_/'); //输出:45820'和'$ ch = curl_init('http://www.ehow.co.uk/ui/');输出:233' .....这使得很难知道哪个数字意味着什么......更难以正确读取远程文件大小** ....任何想法? – ErickBest 2016-03-29 05:14:06