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_encode 如何在java中decode
PHP base64_decode+gzinflate压缩和解密代码图文教程
如何摆脱像PHP病毒文件一样的eval-base64_decode?