在 PHP 中获取大文件(> 2 GB)文件大小的最佳方法? [复制]

Posted

技术标签:

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

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

【问题讨论】:

32 位 PHP 文件 >2GB 有问题,64 位 PHP 可以处理更大的文件 我不知道除了执行 ls 命令之外的任何解决方案。 PHP 的整数是有符号的,因此您将无法使用 PHP 的内部函数(在 32 位系统上) 类似的问题? ***.com/questions/5501451/… php x64 可以在 x32 系统上运行吗?我在哪里可以买到? :) github.com/jkuchar/BigFileTools 来自***.com/questions/5501451/… 【参考方案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

【讨论】:

这不适用于本地文件。

以上是关于在 PHP 中获取大文件(> 2 GB)文件大小的最佳方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery File Upload 上传超过 1GB 到 2GB 的大文件 - blueimp(基于 Ajax)php / yii 它在 Firefox 浏览器中显示错误

在 php 中解析非常大的 XML 文件

如何在lua中读取大文件(> 1GB)?

逐行处理非常大 (>20GB) 的文本文件

使用 fileinfo 获取 mime 类型,是大文件的好方法吗?

如何在 R 中读取大 (~20 GB) xml 文件?