当前位置: 首页 > 面试题库 >

PHP x86如何在不使用外部程序的情况下获取大于2 GB的文件大小?

姜鸿
2023-03-14
问题内容

我需要获取文件大小超过2 GB的文件。(在4.6 GB文件上测试)。没有外部程序,有没有办法做到这一点?

当前状态:

  • filesize()stat()并且fseek()失败
  • fread()feof()作品

有可能通过读取文件内容来获取文件大小(极慢!)。

$size = (float) 0;
$chunksize = 1024 * 1024;
while (!feof($fp)) {
    fread($fp, $chunksize);
    $size += (float) $chunksize;
}
return $size;

我知道如何在64位平台(使用fseek($fp, 0, SEEK_END)ftell())上获取它,但是我需要32位平台的解决方案

解决方案: 为此,我已经开始了开源项目。


问题答案:

我已经开始了一个名为Big FileTools的项目。它被证明可以在Linux,Mac和Windows(甚至32位变体)上运行。即使对于大文件(>4GB),它也可以提供字节精确的结果。在内部,它使用积木/数学 -任意精度算术库。

使用composer安装它。

composer install jkuchar/BigFileTools

并使用它:

<?php
$file = BigFileTools\BigFileTools::createDefault()->getFile(__FILE__);
echo $file->getSize() . " bytes\n";

结果是BigInteger,因此您可以计算结果

$sizeInBytes = $file->getSize();
$sizeInMegabytes = $sizeInBytes->toBigDecimal()->dividedBy(1024*1024, 2, \Brick\Math\RoundingMode::HALF_DOWN);    
echo "Size is $sizeInMegabytes megabytes\n";

大文件工具内部使用驱动程序来可靠地确定所有平台上的确切文件大小。这是可用的驱动程序列表(2016年2月5日更新)

| Driver           | Time (s) ↓          | Runtime requirements | Platform 
| ---------------  | ------------------- | --------------       | ---------
| CurlDriver       | 0.00045299530029297 | CURL extension       | -
| NativeSeekDriver | 0.00052094459533691 | -                    | -
| ComDriver        | 0.0031449794769287  | COM+.NET extension   | Windows only
| ExecDriver       | 0.042937040328979   | exec() enabled       | Windows, Linux, OS X
| NativeRead       | 2.7670161724091     | -                    | -

您可以将BigFileTools与以下任何一种配合使用,或者默认情况下选择的是最快的(BigFileTools::createDefault()

 use BigFileTools\BigFileTools;
 use BigFileTools\Driver;
 $bigFileTools = new BigFileTools(new Driver\CurlDriver());


 类似资料:
  • 问题内容: 关于sqlite中的BLOB,我有以下问题: sqlite是否跟踪BLOB的大小? 我猜想它确实可以,但是然后length函数使用它,还是读取BLOB的内容? 如果sqlite跟踪BLOB的大小而长度不使用它,那么是否可以通过其他功能访问该大小? 我之所以这样问,是因为我想知道是否应该实现在其他列中设置BLOB大小的触发器,我是否可以动态获取大小而不会导致sqlite读取BLOB的性能

  • 您好,我想在webview或外部应用程序中显示pdf文件 1)我使用此url<代码>https://docs.google.com/gview?embedded=true 以下是完整的urlhttps://docs.google.com/gview?embedded=true

  • 问题内容: 我有一个用React编写并与Webpack捆绑在一起的Web应用程序。该应用程序具有一个JSON配置文件,我想在运行时将其包含在内,而不是与webpack捆绑在一起。 在应用程序的入口点,我使用json-loader导入内容,但是这样做会强制将文件嵌入应用程序中,并且一旦捆绑了配置文件,便无法更新。 如何配置webpack.config.js文件以排除config.json文件,但仍允

  • 我有一个NetBeans java项目。 这个项目(src文件夹)由6.java文件组成。该项目还使用了一个外部库library.jar和apache commons中的variouus jar文件(日志、配置等) 所有java文件(编译后)都由一个外部类使用。 Netbeans生成一个构建xml文件。 大多数错误是这样的: 其中是包含在外部jar库中的类/对象的名称。 我该怎么办?我的目标是能够

  • 我有一个应用程序,返回一个保健食品的列表。将有大约10000-20000食品(文件)在产品集合。 这些食物由多个字段使用查询。这可能是类别、子类别,当用户在搜索栏中搜索时,它是关键字数组上的arrayContains。 但是在这个例子中,他们说要使用计数器,这似乎并不实际,因为当用户搜索时,我使用的是查询关键字,当用户过滤时,我使用的是类别和子类别的混合。 谢谢

  • 首先,如果这是一个很长的代码段,我很抱歉,但是,我想做一个模态窗口,它将你在我的用户表单中写的东西写下来,并要求你确认它。我目前正在学习Javascript,我不允许使用innerHTML,我必须动态地编写“名字”等(名字的文本),不允许只在弹出窗口内写它。我已经让大多数东西工作,但“名字”“名字”等显示为“未定义”,或者(正如你可以看到的,我在这种情况下只用名字尝试的事情)显示为“空”。 希望有