Reading remote file size using filesize

瘦欲@ 提交于 2019-12-02 05:53:40

问题


I read the manual that filesize() is able to calculate file size from remote file. However, when I try to do that with snippet below. I got error PHP Warning: filesize(): stat failed for http://someserver/free_wallpaper/jpg/0000122_480_320.jpg in /tmp/test.php on line 5

Here's my snippet:

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

Turns out, I can't use HTTP for filesize(). Case close. I'll use snippet here as a work-around solution.


回答1:


filesize doesn't work for HTTP - it depends on stat, which isn't supported for the HTTP(S) protocol.

The PHP man page for filesize says:

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

This doesn't mean every protocol/wrapper works "out of the box" with filesize. You could always get around that by doing a full GET of the remote URL and calculating the size of the data you get back, of if you can get a Content-Length header you could try a HEAD request to avoid transferring the file data.




回答2:


You can get file size of web url using below code

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; }



回答3:


I don't know where you read that. filesize requires stat, and based on the HTTP wrapper page, I don't think it supports stat on any version of PHP.




回答4:


You might want to investigate using http_head(). I think the snippet you reference downloads the file to determine the file size, which may not be necessary. If the web server you are referencing sends back accurate header information, you should be able to determine file-size, date-modified and several other useful identifying features.




回答5:


If you want to get the remote picture size, try using getimagesize()



来源:https://stackoverflow.com/questions/3225852/reading-remote-file-size-using-filesize

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!