正确的 fread() 应用程序?
Correct fread() application?
假设我正在上传一个分块文件,我必须重新组合它。我知道每次迭代的总块和数据。
我创建的代码是这样的:
for ($i = 1; $i <= $num_chunks; $i++) {
$file = fopen($target_file.$i, 'rb');
$buff = fread($file, 2097152);
fclose($file);
$final = fopen($target_file, 'ab');
$write = fwrite($final, $buff);
fclose($final);
unlink($target_file.$i);
}
显然,2097152 值没有任何意义,至少对我而言。我阅读了 php 文档,但无法理解太多。谁能解释我应该如何选择 fread 的第二个参数?它是如何工作的?
第二个参数是要读取的数据量,因为你在一个块中读取它,你必须确保它足以处理任何块。您设置的值是 2MB,这可能就足够了,但您可以更改代码,以便它以较小的块读取它并循环直到输入被完全读取。
我也将其更改为打开一次输出文件,然后边写边写内容...
$final = fopen($target_file, 'wb'); // Open for write and start from beginning of file
for ($i = 1; $i <= $num_chunks; $i++) {
$file = fopen($target_file.$i, 'rb');
while($buff = fread($file, 4096)) {
fwrite($final, $buff);
}
fclose($file);
unlink($target_file.$i);
}
fclose($final);
假设我正在上传一个分块文件,我必须重新组合它。我知道每次迭代的总块和数据。
我创建的代码是这样的:
for ($i = 1; $i <= $num_chunks; $i++) {
$file = fopen($target_file.$i, 'rb');
$buff = fread($file, 2097152);
fclose($file);
$final = fopen($target_file, 'ab');
$write = fwrite($final, $buff);
fclose($final);
unlink($target_file.$i);
}
显然,2097152 值没有任何意义,至少对我而言。我阅读了 php 文档,但无法理解太多。谁能解释我应该如何选择 fread 的第二个参数?它是如何工作的?
第二个参数是要读取的数据量,因为你在一个块中读取它,你必须确保它足以处理任何块。您设置的值是 2MB,这可能就足够了,但您可以更改代码,以便它以较小的块读取它并循环直到输入被完全读取。
我也将其更改为打开一次输出文件,然后边写边写内容...
$final = fopen($target_file, 'wb'); // Open for write and start from beginning of file
for ($i = 1; $i <= $num_chunks; $i++) {
$file = fopen($target_file.$i, 'rb');
while($buff = fread($file, 4096)) {
fwrite($final, $buff);
}
fclose($file);
unlink($target_file.$i);
}
fclose($final);