作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个通过 PHP 上传文件的过程,但结果文件最终比源文件大 2 个字节。我不确定这 2 个字节是从哪里来的。 (实际过程是分块上传,我将一个文件切片并上传切片,每个切片最终到达的时间比开始时长 2 个字节,但我已经用一个小文件进行了测试,它到达时也比开始时大 2 个字节来源)。
我正在附加我的 PHP...这是 PHP 的正常功能吗?我在想象某种空终止符或其他东西(每个文件的末尾确实有一个\n 最初不存在)。在重新组装原始文件之前,我是否需要将文件读入缓冲区并删除最后两个字节?我不得不想象我做错了什么,但我对它会是什么感到困惑。
如果我确实需要手动去除最后两个字节,那么正确的方法是什么(这是一个二进制文件),然后将其余部分附加到我正在重建的整个文件中?
编辑
当 PHP 将其保存到服务器时,每个上传的文件都会在末尾添加一个 0D0A 字。所以...我想问题是如何防止这种情况发生。
<?PHP
$target_path = $_REQUEST[ 'path' ];
$originalFileName = $_REQUEST['original_file_name'];
$target_path = $target_path . basename( $_FILES[ 'Filedata' ][ 'name' ] );
if ( move_uploaded_file( $_FILES[ 'Filedata' ][ 'tmp_name' ], $target_path ) )
{
$newFilePath = $originalFileName; //this is the overall file being re-assembled
$fh = fopen($newFilePath, 'ab') or die("can't open file");
$nextSlice = file_get_contents($target_path); //this is the slice that's 2 bytes too big each time
fputs($fh, $nextSlice);
fclose($fh);
// unlink($target_path); //normally I'd delete the slice at this point, but I'm hanging on to it while I figure out where the heck the 2 extra bytes are coming from.
fclose($fh);
echo "SUCCESS";
}
else
{
echo "FAIL:There was an error uploading the file, please try again!";
}
?>
最佳答案
文件是二进制文件吗?我在想 file_get_contents
会导致问题,因为它将它当作一个字符串来处理。也许你应该试试 fread相反?
关于PHP 向我上传的文件添加 2 个额外字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4858796/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!