【问题标题】:Best way to get file size of large files (> 2 GB) in PHP? [duplicate]在 PHP 中获取大文件(> 2 GB)文件大小的最佳方法? [复制]
【发布时间】:2013-05-31 22:00:19
【问题描述】:

我正在处理 PHP 中的大文件,需要一种可靠的方法来获取超过 4 GB 的大文件的文件大小,但是 PHP 在处理超过 2 GB 的文件时遇到了问题......到目前为止,我只看到了涉及的解决方案命令行exec 功能,但脚本将用作独立的控制台应用程序,因此,我对使用exec 有点犹豫,因为它在不同平台上的反应可能不同。我看到的唯一方法是读取所有数据并计算字节数,但这会非常慢......我需要一种快速可靠的方法,可以在许多不同的计算机(Linux、Windows、Mac)上做出同样的反应。

【问题讨论】:

标签: php file filesize


【解决方案1】:

这个先前提出的问题似乎非常相似,其中包含一些您可以探索的想法: PHP x86 How to get filesize of > 2 GB file without external program?

作者在其中提出了一个他在 GitHub 上托管的解决方案,链接位于此处:https://github.com/jkuchar/BigFileTools/blob/master/src/BigFileTools.php

除了你运行的是 32 位系统,因此超过 2 GB 的文件在 PHP 中会很麻烦 http://php.net/manual/en/function.filesize.php:

注意:因为 PHP 的整数类型是有符号的,很多平台都使用 32 位整数,某些文件系统函数可能会返回意外 大于 2GB 的文件的结果。

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
  • @Jeff 我不明白这怎么不能回答问题? BigFileTools 在 GitHub 页面上声明:“这个项目是在 PHP 中操作超过 2GB 的文件(甚至在 32 位系统上)所需的黑客集合。”
【解决方案2】:

以下代码适用于任何版本的 PHP / OS / Webserver / Platform 上的任何文件大小。

// http head request to local file to get file size
$opts = array('http'=>array('method'=>'HEAD'));
$context = stream_context_create($opts);

// change the URL below to the URL of your file. DO NOT change it to a file path.
// you MUST use a http:// URL for your file for a http request to work
// SECURITY - you must add a .htaccess rule which denies all requests for this database file except those coming from local ip 127.0.0.1.
// $tmp will contain 0 bytes, since its a HEAD request only, so no data actually downloaded, we only want file size
$tmp= file_get_contents('http://127.0.0.1/pages-articles.xml.bz2', false, $context);

$tmp=$http_response_header;
foreach($tmp as $rcd) if( stripos(trim($rcd),"Content-Length:")===0 )  $size= floatval(trim(str_ireplace("Content-Length:","",$rcd)));
echo "File size = $size bytes";

// example output .... 9 GB local file
File size = 10082006833 bytes

【讨论】:

  • 这不适用于本地文件。
猜你喜欢
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 2021-05-08
  • 2014-12-16
  • 1970-01-01
  • 2013-02-03
  • 2016-12-27
相关资源
最近更新 更多