PHP base64_decode产生无效的图像文件

时间:2014-09-22 13:22:58

标签: php base64

我的问题:

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

当我获取此文件的内容并将其手动添加到图像标记中的数据src时,它显示正确。当我使用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 alt="" 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

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

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

b64集中不允许使用

%个字符。看起来你的字符串是url编码的。 urldecode()之前将其传递给base64_decode()

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