PHP base64_decode 产生无效的图像文件

Posted

技术标签:

【中文标题】PHP base64_decode 产生无效的图像文件【英文标题】:PHP base64_decode yields invalid image file 【发布时间】:2014-09-22 13:22:58 【问题描述】:

我的问题:

我正在使用 php 将上传的 base64 字符串保存到文件中。此字符串来自 iPhone 应用程序,是一个 base64 编码的 jpeg 文件。

当我将该文件的内容手动添加到图像标签中的数据源中时,它会正确显示。当我使用 file_get_contents 读取它并将结果字符串添加到 img 数据标签时,它可以正常工作。

我的问题:当我使用 file_get_contents 读取文件并使用 base64_decode() 保存结果时,生成的 jpeg 文件为 INVALID

我的问题是,为什么明显有效的 base64 编码字符串在解码和保存时无法生成有效的 JPEG 文件?

部分来源摘录:

这个功能正常,输出图像:

$imagepath = "D:\\path\\to\\image\\mybase64image.txt";
$imagecontent = file_get_contents($imagepath);
header("Content-type:text/html");
$d = '<img  src="data:image/jpeg;base64,' . $imagecontent . '"/>';
echo $d;

这不起作用,文件无效:

$imagepath = "D:\\path\\to\\image\\mybase64image.txt";
$imagecontent = file_get_contents($imagepath);
file_put_contents('img.jpg', base64_decode($imagecontent));

-- img.jpg 是无效文件。 路径是有效的,文件在那里,权限也在那里(生成的文件 img.jpg 是一个二进制文件,只是无效),正如我所说,它作为数据 src 工作。

这是base64编码的文件:

http://www.mailnet.de/7E072017-DAEB-41E1-B02E-23FB51A05B80.txt

使用 FASTCGI 的 PHP 版本是 5.3.8 操作系统是 Windows 2008 R2 Web 服务器是 IIS 7.5

感谢任何帮助。

【问题讨论】:

你能贴出编码和保存数据的代码吗? 如果您指的是 iPhone 代码,不,我无权访问它。如果有帮助,我可以发布 base64 编码的文件吗? 好的,已编辑 - 添加了指向 base64 编码文件的链接。 @onetrickpony - 请输入带有该建议的答案,这是正确的并解决了我的问题。如此愚蠢的事情不容错过。谢谢。 【参考方案1】:

% 字符不允许在 b64 集中。看起来您的字符串是 url 编码的。 urldecode() 传递给 base64_decode() 之前。

它可以在浏览器中正常工作,因为它们总是解码 url 属性。

【讨论】:

以上是关于PHP base64_decode 产生无效的图像文件的主要内容,如果未能解决你的问题,请参考以下文章

php解密 base64

php base64_encode 如何在java中decode

PHP base64_decode+gzinflate压缩和解密代码图文教程

如何摆脱像PHP病毒文件一样的eval-base64_decode?

php unserialize(): Error at offset 65482 of 65534 bytes

php 解密eval(gzinflate(str_rot13(base64_decode