Php 文件上载在4g以上的文件上返回错误的文件大小
嗨,伙计们,我有一个文件上传系统,可以上传一些大文件,当我上传一个超过4gig的文件时,它返回的文件大小是-2323223。有没有办法解决这个问题呢?现在它只是一个基本的形式,所以我假设它是一个php配置,或者限制在4gig以下的文件,它返回的大小是正确的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
<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的意思是在上传后可以使用脚本检查实际大小。询问者从未说过上传本身出错,只是报告的大小错误。