通过HTTP包装器读取文件时无法获取文件大小

时间:2015-07-17 09:34:51

标签: php filesize

我尝试使用PHP wrappers获取可通过HTTP访问的远程文件的文件大小失败。

为了100%确定,让我说明一下:

这意味着,该远程文件是可访问的。但是,我得到了:

file_exists($filename): bool(false)
is_file($filename): bool(false)
is_writable($filename): bool(false)
is_readable($filename): bool(false)

调用filesize($filename)的尝试以filesize(): stat failed for...错误结束。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

答案可以在PHP HTTP/HTTPS protocol wrappers的文档中找到。 " Options"部分解释说,尽管此协议允许阅读,但它不支持stat()功能。

因此,fopen()就像一个魅力,而filesize()和其他需要stat()工作的函数,对于这个包装器来说是失败的。请注意,PHP文档说,这些函数仅支持 某些 URL包装器:

  

从PHP 5.0.0开始,此函数也可以与某些URL包装器一起使用。 Refer to Supported Protocols和Wrappers确定哪些包装器支持stat()系列功能。

似乎,HTTP / HTTPS包装器不在其中。

您可以尝试使用与此包装器一起使用的fopen()来实现自己版本的文件大小确定功能。但是,由于fopen()实际上打开了文件(而filesize()从文件系统/元数据中读取文件大小),所以在任何情况下,这都是一个真正的过度杀戮,我能想到。并且...... Allowed memory size of XXX bytes exhausted (tried to allocate YYY bytes) in...将成为你最亲密的朋友。