将二进制转换为字符串再转回二进制

3
这是简介:PHP代码是以类似终端的字符串形式解释命令的解释器。基本上,PHP接收一个字符串参数,根据给定的正则表达式进行解释,并执行它。在这里,该代码接收类似于

的字符串。
ftp>fput -file(contents-of-file)

在这种情况下,该代码将把一个字符串通过ftp-fput方法发送到指定的服务器。当文件是ASCII类型时,它可以正常工作。但是如果文件是二进制文件(例如图像),那么正则表达式会出现错误。即使没有出错,我也需要对文件的二进制内容进行编码,以便符合命令字符串的格式,并且需要能够在解释器端进行解码。我已经尝试了base64编码/解码、hex2bin、bin2hex、pack和unpack等方法,但上传的文件总是无法被浏览器读取。当试图在Linux上打开生成的文件时,会产生一个错误。

Fatal error reading PNG image file: PNG file corrupted by ASCII-conversion

欢迎提出建议或澄清要求,
谢谢。

你需要更具体一些。请给出你想要发送的文件示例,你使用的命令以及最终的结果。 - Artefacto
1个回答

4

这个特定的错误是由PNG开发人员的智慧造成的。他们在标准PNG头中包含了回车和换行符,以便捕捉此问题。看起来期望的CRLF被转换为LF。

您能展示一下您正在使用的正则表达式吗?除非您明确地将\r转换为\n(或丢弃它),否则不应该发生这种情况。


非常准确,Charles。其他扩展名的图像都很顺利。当我比较原始png文件和生成的文件的二进制文件时,我可以在文件开头看到\r\n。我还没有将此问题归类为已回答,因为我仍在努力编写正则表达式以摆脱CRLF。 - fabjoa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接