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

Php Can';通过HTTP包装器读取文件时无法获取文件大小,php,filesize,Php,Filesize,我尝试使用PHP获取可通过HTTP访问的远程文件的文件大小,但失败了 100%肯定地说,让我声明: 文件存在 返回1 返回列表上的http,然后 返回类型(流)的资源(119) 也就是说,远程文件是可以访问的。然而,我得到了: file_exists($filename): bool(false) is_file($filename): bool(false) is_writable($filename): bool(false) is_readable($filename): bool(f

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

100%肯定地说,让我声明:

  • 文件存在
  • 返回
    1
  • 返回列表上的
    http
    ,然后
  • 返回类型(流)的
    资源(119)
也就是说,远程文件是可以访问的。然而,我得到了:

file_exists($filename): bool(false)
is_file($filename): bool(false)
is_writable($filename): bool(false)
is_readable($filename): bool(false)
调用
filesize($filename)
的尝试以
filesize():stat因…
错误而失败而结束


我遗漏了什么?

答案可以在PHP的文档中找到。“”部分解释说,尽管此协议允许读取,但它不支持功能

因此,它像一个符咒一样工作,而其他需要
stat()
才能工作的函数则无法使用此包装器。请注意,PHP文档中说,这些函数只支持一些URL包装器:

从PHP5.0.0开始,这个函数也可以与一些URL包装器一起使用。和包装器,以确定哪些包装器支持功能系列

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

您可以尝试使用与此包装器一起使用的
fopen()
,来实现自己版本的文件大小确定函数。但是,由于
fopen()
实际上打开了文件(而
filesize()
从文件系统/元数据中读取文件大小),因此我可以想到,在任何情况下,这都是一种非常过分的做法。而且<代码>允许的内存大小为XXX字节(已尝试分配YYY字节),在…将是您今晚最亲密的朋友