通过FTP上传php文件,所有换行和CR都会在上传时丢失

时间:2012-03-26 04:26:40

标签: ftp line-breaks

我可以下载我没有上传的文件,并且回车也很合适但是上传时我的文件放在一行上。

由于存在错误但所有内容都在第1行,因此很难对此应用进行问题排查。

为什么会这样?

2 个答案:

答案 0 :(得分:3)

FTP不太可能“将所有内容放在一条线上”。更有可能的是,该文件使用* nix样式的行结尾,并且您以二进制模式将文件上载到Windows机器或类似的东西。

请参阅,不同平台具有不同的字符序列来表示“新行”。在Windows中,最常见的是CR + LF,但在* nix上,它只是LF。问题在于,许多软件都假定有关文本文件结尾的行应该有什么内容,如果它看到LF字符,则不会将其视为换行符。所以一切看起来都在一条线上。 (我不认为PHP对于行结尾是如此肛门,但我已经看到其他语言因此而烦恼。)

二进制模式传输文件字节为字节,不转换行结尾。如果您正在下载或上传图像或其他内容,那就太棒了。但是,如果您在运行不同操作系统的计算机之间以二进制模式传输文本文件,则可能会看到“不正确”行结尾的结果。

解决方案:对PHP文件使用ASCII模式。大多数FTP客户端都具有使用何种模式的设置,甚至还有用于某些类型文件的模式。由于PHP文件是文本,因此在大多数情况下它们应该以ASCII模式传输。

答案 1 :(得分:1)

对我有用的解决方案:

  1. 使用Atom.io编辑器
  2. 安装Atom软件包line-ending-converter
  3. 在Atom中打开文件>全部标记>鼠标右键单击>将行结尾转换为> Unix格式
  4. 保存文件并上传到服务器(如果是JS文件,请在浏览器中打开以查看现在的换行符是否正确)
  5. 一些背景信息from here

      

    在文本/ ASCII模式下下载带有Windows行尾(CR + LF)的文件时,服务器用CR + LF替换LF,导致CR + CR + LF不正确。在WinSCP的内部编辑器中打开此类文件时,编辑器将序列解释为两行结尾(CR和CR + LF),在每个内容行之后产生一个空行。保存文件后,内部编辑器会保存两个Windows行结尾CR + LF和CR + LF。在上传时,它们会被转换为两个LF。解决方法是使用外部编辑器并确保WinSCP不强制编辑文件的文本模式。