@traylz 清楚地说明了为什么它可能会在不应该失败的情况下失败。但是,base64_decode()
即使是大图像也可能会失败。我已经很好地处理了 6 到 7 MB 的文件,我还没有超过这个大小,所以对我来说它应该很简单:
$dir = dirname(__FILE__);
// get the base64 encoded file and decode it
$o_en = file_get_contents($dir . '/base64.txt');
$d = base64_decode($o_en);
// put decoded string into tmp file
file_put_contents($dir . '/base64_d', $d);
// get mime type (note: mime_content_type() is deprecated in favour
// for fileinfo functions)
$mime = str_replace('image/', '.', mime_content_type($dir . '/base64_d'));
rename($dir . '/base64_d', $dir . '/base64_d' . $mime);
如果以下失败尝试添加chunk_split()
功能到解码操作:
$d = base64_decode(chunk_split($o_en));
那么我在说什么...忘记循环,除非需要它...如果您不信任 php 的 mime 检测,请保留原始文件扩展名。如果处理大文件,请chunk_split()
使用操作。base64_decode()
注意:所有理论都未经检验
编辑:对于很可能会冻结的大文件file_get_contents()
,读入您需要的内容,输出到文件,因此使用的 RAM 很少:
$chunkSize = 1024;
$src = fopen('base64.txt', 'rb');
$dst = fopen('binary.mime', 'wb');
while (!feof($src)) {
fwrite($dst, base64_decode(fread($src, $chunkSize)));
}