【问题标题】:PHP filesize of dynamically chosen file动态选择文件的 PHP 文件大小
【发布时间】:2012-12-27 15:32:47
【问题描述】:

我有一个 php 脚本,它需要在被单独的 php 脚本操作后确定文件系统上文件的大小。

例如,存在一个大小固定的 zip 文件,但会根据尝试访问它的用户将一个未知大小的附加文件插入其中。因此,提供文件的页面类似于 getfile.php?userid=1234。

到目前为止,我知道这一点:

filesize('getfile.php'); //returns the actual file size of the php file, not the result of script execution

readfile('getfile.php'); //same as filesize()

filesize('getfile.php?userid=1234'); //returns false, as it can't find the file matching the name with GET vars attached

readfile('getfile.php?userid=1234'); //same as filesize()

有没有办法读取 php 脚本的结果大小而不仅仅是 php 文件本身?

【问题讨论】:

  • 我也想过这个问题,我感觉要么不是,要么比上面的代码更复杂。
  • 我猜,如果我能够正确理解您的问题,您可以在脚本中使用 AJAX 来确定文件的大小。
  • 如果您无法知道文件名,事情就会变得棘手。您也许可以让我找到可能适用于您的情况的最新文件。
  • getfile.php 是输出文件的路径还是文件本身?
  • getfile.php 创建一个临时文件,输出该文件,然后删除该临时文件,因此一旦请求脚本获得结果,文件系统上将不再存在正在输出的实际文件。

标签: php filesize


【解决方案1】:

filesize

从 PHP 5.0.0 开始,这个函数也可以和一些 URL 一起使用 包装器。

类似

filesize('http://localhost/getfile.php?userid=1234');

应该够了

【讨论】:

  • 虽然这很难用于实际目的。 OP 可能希望在下载之前为用户显示文件大小。这个调用的作用是启动一个 Web 请求,执行脚本并生成下载文件,然后将下载文件传输到内存中并获取大小。这真的很贵。
  • 我尝试了这种方法,它会引发警告并返回 false。
【解决方案2】:

有人发布了使用 curl 执行此操作的选项,但在否决后删除了他们的答案。太糟糕了,因为这是我让它工作的一种方式。所以这是他们对我有用的答案:

$ch = curl_init('http://localhost/getfile.php?userid=1234');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //This was not part of the poster's answer, but I needed to add it to prevent the file being read from outputting with the requesting script
curl_exec($ch);

$size = 0;

if(!curl_errno($ch))
{
    $info = curl_getinfo($ch);
    $size = $info['size_download'];
}

curl_close($ch);

echo $size;

【讨论】:

  • 不过,我应该注意,如果可以的话,我会很乐意改变我的方法,因为这非常低效。
【解决方案3】:

获得输出大小的唯一方法是运行它然后查看。根据脚本的不同,结果可能会有所不同,但对于实际使用,最好的办法是根据您的知识进行估计。即,如果您有一个 5MB 的文件并添加另一个 5k 用户特定的内容,它最终仍然是大约 5MB 等等。

【讨论】:

  • 这是一个尴尬的业务需求,但文件大小被移交给系统的另一个组件,当它再次请求文件时,它期望大小完全匹配。关闭在这里不算数。
  • 那么最好的办法是在脚本中生成您需要大小的文件,并将生成的文件存储在某个“缓存”目录中,并在下一次请求时交付文件。这也有一个好处,您可以将文件交付完全留给 Web 服务器,并且不需要 PHP 脚本(但您需要一些清理工作来摆脱旧文件)
【解决方案4】:

扩展伊万的回答:

您的字符串是带有或不带有 GET 参数的“getfile.php”,这被视为本地文件,因此检索 php 文件本身的文件大小。

它被视为本地文件,因为它不是以 http 协议开头的。有关支持的协议,请参阅 http://us1.php.net/manual/en/wrappers.php。

【讨论】:

    【解决方案5】:

    当使用 filesize() 时,我收到了一个警告: 警告:filesize() [function.filesize]: stat failed for ...link... in ..file... on line 233

    我找到了两个工作选项来替换它,而不是 filesize():

    1) $headers = get_headers($pdfULR, 1); $fileSize = $headers['Content-Length']; 回声 $fileSize;

    2) echo strlen(file_get_contents($pdfULR));

    现在一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 2017-07-05
      • 2012-01-23
      • 2018-09-25
      • 1970-01-01
      • 2011-04-14
      相关资源
      最近更新 更多