PHP - Base64 编码大文件并同步写回

标签 php base64 synchronous

我需要使用 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);
}

http://en.wikipedia.org/wiki/Base64#Examples

关于PHP - Base64 编码大文件并同步写回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29239243/

相关文章:

asynchronous - Dart - 区分同步和异步 void 回调

node.js - node.js 中 readFileSync 的错误处理

php - 将变量放入 PDO 语句中

php - 更改 Monolog 中的日志路径 - Symfony2

java - 我应该使用哪个字符集来解码java中的这个字节数组?

java - 如何将 Base64 字符串发送到 API (MathPix OCR)?

oauth - 使用base64编码生成Oauth授权 token

PHP - 查询 mysql 时的错误处理

php - 当 php 使用 shell_exec() 执行脚本时,Python 'No module named ...'

javascript - 异步任务何时在 javascript 中启动?