PHP函数stat():远程映像的统计信息失败

时间:2018-08-03 14:26:40

标签: php filesize stat

manysimilarquestions this Mechanize,但是全部都涉及在本地文件上执行stat()或filesize(),这是行不通的,因为您需要完整路径。

此问题有所不同,因为我有一些具有完整路径的远程映像,但仍无法获取它们的大小。这是一个示例:

stat("https://cdn-img.health.com/sites/default/files/1532113674/1-opener-sleep-a-z-GettyImages-485559412.jpg");

这将引发错误,提示“统计失败”。我也无法从filesize()函数获取图像大小,也无法获取“ Content-Length”或“ X-Original-Content-Length”标头(未传递),或者无法卷曲图像并获取CURLINFO_CONTENT_LENGTH_DOWNLOAD字段。类似地,在Ruby中,除了{{3}}库之外,我无法使用传统方法来获得此图像的大小,该库只能工作。以下是示例中图片的标题:

HTTP/1.1 200 OK
Content-Type:   image/jpeg
Transfer-Encoding:  chunked
Connection: keep-alive
Cache-Control:  max-age=1800
Date:   Fri, 03 Aug 2018 14:08:39 GMT
ETag:   "90c755-5717304f98380-gzip"
Expires:    Fri, 03 Aug 2018 14:38:39 GMT
Last-Modified:  Fri, 20 Jul 2018 19:08:22 GMT
P3P:    CP='PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA PRE CUR ADMa DEVa TAIo PSAo PSDo IVAo IVDo CONo TELo OTPi OUR UNRo PUBi OTRo IND DSP CAO COR'
Server: Apache
TI-Varnish-Age: 0
Via:    1.1 varnish, 1.1 ba150248cd293ea895c35304503c9f27.cloudfront.net (CloudFront)
X-Varnish:  1920400558
Vary:   Accept-Encoding
Age:    19
X-Cache:    Hit from cloudfront
X-Amz-Cf-Id:    pKXUfsB5egUfk4Te7oxIG7TgFLoUfMSUWqGZxd5822_ejvorITbFsg==

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

为了使stat()确定远程文件的文件大小,底层包装器需要支持PHP manual中的stat:

  

从PHP 5.0.0开始,此功能还可以与 some URL包装器一起使用。请参阅受支持的协议和包装器,以确定哪些包装器支持stat()系列功能。

如果您在文档中查找HTTP wrapper

  

支持stat()-否

大多数将文件作为参数的函数都依赖包装器来执行远程操作,因此这些函数都无法获取远程文件的大小。如果您可以使用该扩展名,cURL functions可能是您最好的选择。

答案 1 :(得分:1)

您可以通过以下操作获得尺寸:

strlen(file_get_contents('http://link.of/image.jpg'));

只要您启用了allow_url_fopen,它就会起作用。否则,您将需要使用cURL。

答案 2 :(得分:0)

您可以使用curl来获取文件信息,假设您要获取任何URL上任何文件的大小,请使用此功能:

            function getFileSizeByCurl($url) {  
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch, CURLOPT_VERBOSE, 1);
                curl_setopt($ch, CURLOPT_HEADER, 1);
                $response = curl_exec($ch);
                return curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD);
            }


                            //Calling a function 
            echo getFileSizeByCurl('https://cdn-img.health.com/sites/default/files/1532113674/1-opener-sleep-a-z-GettyImages-485559412.jpg');