2014-09-22 125 views
1

我的问题:PHP base64_decode产生无效图像文件

我正在使用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编码文件:使用5.3.8 FASTCGI

  • 操作系统是Windows 2008

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

    • PHP版本R2
    • Web服务器IIS是7.5

    任何帮助表示赞赏。

  • +0

    你能发布编码和保存数据的代码吗? – 2014-09-22 13:27:13

    +0

    如果你的意思是iPhone的代码,没有我没有访问。如果有帮助,我可以发布base64编码文件吗? – 2014-09-22 13:29:00

    +0

    好的,编辑 - 添加一个链接到base64编码文件。 – 2014-09-22 13:33:32

    回答

    1

    %字符不允许在b64集合中。它看起来像你的字符串是网址编码。它在将它传递给base64_decode()之前是urldecode()

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

    +0

    谢谢,这个伎俩。 – 2014-09-22 14:16:28