Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 文件上载在4g以上的文件上返回错误的文件大小_Php_Upload - Fatal编程技术网

Php 文件上载在4g以上的文件上返回错误的文件大小

Php 文件上载在4g以上的文件上返回错误的文件大小,php,upload,Php,Upload,嗨,伙计们,我有一个文件上传系统,可以上传一些大文件,当我上传一个超过4gig的文件时,它返回的文件大小是-2323223。有没有办法解决这个问题呢?现在它只是一个基本的形式,所以我假设它是一个php配置,或者限制在4gig以下的文件,它返回的大小是正确的 <form method="POST" action="upload.php" enctype="multipart/form-data"> <input type="file" name="file"> <in

嗨,伙计们,我有一个文件上传系统,可以上传一些大文件,当我上传一个超过4gig的文件时,它返回的文件大小是-2323223。有没有办法解决这个问题呢?现在它只是一个基本的形式,所以我假设它是一个php配置,或者限制在4gig以下的文件,它返回的大小是正确的

<form method="POST" action="upload.php" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit">
</form>

echo $_FILES["file"]["size"];

echo$_文件[“文件”][“大小”];

32位整数只能寻址相同的地址。您需要更多位来寻址超过4GB点的字节,这个数字大于32位,逻辑上是64位

为了使其正常工作,您需要在64位CPU和64位操作系统上运行64位PHP,然后您将能够处理多达1.024 PB的文件

整数的大小取决于平台,尽管通常的最大值约为20亿(即32位有符号)。64位平台的最大值通常约为9E18,Windows除外,Windows始终为32位。PHP不支持无符号整数。整数大小可以使用常量PHP_INT_size确定,最大值可以使用自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX确定


32位整数只能寻址相同的地址。您需要更多位来寻址超过4GB点的字节,这个数字大于32位,逻辑上是64位

为了使其正常工作,您需要在64位CPU和64位操作系统上运行64位PHP,然后您将能够处理多达1.024 PB的文件

整数的大小取决于平台,尽管通常的最大值约为20亿(即32位有符号)。64位平台的最大值通常约为9E18,Windows除外,Windows始终为32位。PHP不支持无符号整数。整数大小可以使用常量PHP_INT_size确定,最大值可以使用自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX确定


获取上传文件的路径,并使用以下函数获取其大小:

<?php
  /**
   * Get the size of file, platform- and architecture-independant.
   * This function supports 32bit and 64bit architectures and works fith large files > 2 GB
   * The return value type depends on platform/architecture: (float) when PHP_INT_SIZE < 8 or (int) otherwise
   * @param   resource $fp
   * @return  mixed (int|float) File size on success or (bool) FALSE on error
   */
  function my_filesize($fp) {
    $return = false;
    if (is_resource($fp)) {
      if (PHP_INT_SIZE < 8) {
        // 32bit
        if (0 === fseek($fp, 0, SEEK_END)) {
          $return = 0.0;
          $step = 0x7FFFFFFF;
          while ($step > 0) {
            if (0 === fseek($fp, - $step, SEEK_CUR)) {
              $return += floatval($step);
            } else {
              $step >>= 1;
            }
          }
        }
      } elseif (0 === fseek($fp, 0, SEEK_END)) {
        // 64bit
        $return = ftell($fp);
      }
    }
    return $return;
  }
?>


SRC:

获取上传文件的路径,并使用以下函数获取其大小:

<?php
  /**
   * Get the size of file, platform- and architecture-independant.
   * This function supports 32bit and 64bit architectures and works fith large files > 2 GB
   * The return value type depends on platform/architecture: (float) when PHP_INT_SIZE < 8 or (int) otherwise
   * @param   resource $fp
   * @return  mixed (int|float) File size on success or (bool) FALSE on error
   */
  function my_filesize($fp) {
    $return = false;
    if (is_resource($fp)) {
      if (PHP_INT_SIZE < 8) {
        // 32bit
        if (0 === fseek($fp, 0, SEEK_END)) {
          $return = 0.0;
          $step = 0x7FFFFFFF;
          while ($step > 0) {
            if (0 === fseek($fp, - $step, SEEK_CUR)) {
              $return += floatval($step);
            } else {
              $step >>= 1;
            }
          }
        }
      } elseif (0 === fseek($fp, 0, SEEK_END)) {
        // 64bit
        $return = ftell($fp);
      }
    }
    return $return;
  }
?>


SRC:

这是一个有充分证据证明的32位整数限制在windows上移动到64位整数的最佳解决方案?不知道,从未在windows切片上使用过PHP。这是一个有充分证据证明的32位整数限制在windows上移动到64位整数的最佳解决方案?不知道,从未在windows切片上使用过PHP。这并不能真正解决用户的问题。64位windows,32位PHP,提供的文件为51GB。如果(0===fseek($fp,0,SEEK_END))(32位部分)并且没有
else
,则在
处不满足该条件,因此脚本结束。@r3wt我认为Pedro的意思是在上传后可以使用脚本检查实际大小。提问者从未说过上传本身出错,只是报告的大小有误。并没有真正解决用户问题。64位windows,32位PHP,提供的文件是51GB。如果(0===fseek($fp,0,SEEK_END))
(32位部分)并且没有
else
,则在
处不满足该条件,因此脚本结束。@r3wt我认为Pedro的意思是在上传后可以使用脚本检查实际大小。询问者从未说过上传本身出错,只是报告的大小错误。