我的 PHP 网络应用程序有一个 API,可以接收相当大的 base64 编码文件(最大 32 MB)。目标是将这些文件写入我的文件系统中的某处。当然解码了。执行此操作所需资源最少的方法是什么?
编辑:通过 API 接收文件意味着我的 PHP 应用程序中有一个 32MB 的字符串,而不是磁盘上某处的 32MB 源文件。我需要将该字符串解码到文件系统中。
使用 PHP 自己的 base64_decode() 并没有削减它,因为它使用了很多内存,所以我一直遇到 PHP 的内存限制(我知道,我可以提高该限制,但我没有允许 PHP 每个进程使用 256MB 左右感觉很好。
还有其他选择吗?我可以手动完成吗?或者将文件编码写入磁盘并调用一些外部命令?有什么想法吗?
最佳答案
尽管这个答案已经被接受,但我有一个不同的建议。
如果您从 API 中提取数据,则不应将整个负载存储在变量中。使用 curl 或其他 HTTP 提取程序,您可以自动将数据存储在文件中。
假设您通过一个简单的 GET url 获取数据:
$url = 'http://www.example.com/myfile.base64';
$target = 'localfile.data';
$rhandle = fopen($url,'r');
stream_filter_append($rhandle, 'convert.base64-decode');
$whandle = fopen($target,'w');
stream_copy_to_stream($rhandle,$whandle);
fclose($rhandle);
fclose($whandle);
好处:
- 应该更快(减少对巨大变量的复制)
- 非常小的内存开销
如果你必须从临时变量中获取数据,我可以建议这种方法:
$data = 'your base64 data';
$target = 'localfile.data';
$whandle = fopen($target,'w');
stream_filter_append($whandle, 'convert.base64-decode',STREAM_FILTER_WRITE);
fwrite($whandle,$data);
fclose($whandle);
关于php - 如何在 PHP 中对大文件进行 base64 解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/888461/