我需要使用 PHP 对大文件进行 Base64 编码。
file() 和 file_get_contents() 不是选项,因为它们将整个文件加载到内存中。
我想到了使用这个:
$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
echo $buffer;
}
fclose($handle);
}
来源:Read and parse contents of very large file
这对于阅读来说效果很好,但是可以这样做吗:
读取行 -> Base64 编码 -> 写回文件
然后对文件中的每一行重复。
如果它可以直接执行,而不需要写入临时文件,那就太好了。
最佳答案
Base64 将 3 个字节的原始数据编码为 7 位安全文本上的 4 个字节。如果您输入的字节数少于 3 个字节,则会发生填充,并且不能在字符串中间发生这种情况。然而,只要您处理的是 3 的倍数,您就是黄金,所以:
$base_unit = 4096;
$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
while (($buffer = fread($handle, $base_unit*3)) !== false) {
echo base64_encode($buffer);
}
fclose($handle);
}
关于PHP - Base64 编码大文件并同步写回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29239243/