加入收藏 | 设为首页 | 会员中心 | 我要投稿 安阳站长网 (https://www.0372zz.cn/)- 高性能计算、分布式云、混合云存储、云计算、视频终端!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

ftp软件的bug: 上传和下载的php文件换行丢失

发布时间:2022-07-05 09:46:05 所属栏目:PHP教程 来源:互联网
导读:最近发现一个奇怪的事件,刚编辑好的php文件上传到Linux服务器上,然后下载后就发现代码在一行,换行符丢失了,找了好久才找到解决办法,分享如下。 在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用f
  最近发现一个奇怪的事件,刚编辑好的php文件上传到Linux服务器上,然后下载后就发现代码在一行,换行符丢失了,找了好久才找到解决办法,分享如下。
 
  在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了,导致php文件无法正常运行。
 
  这个时候,再次通过ftp软件把刚才上传的php文件下载到本地windows,用notepad++编辑器打开后,发现php源代码变成了一行,换行丢失。
 
  发生这种情况的原因是什么呢?飘易就以一句话概括下:
 
  由于linux下换行是n,而windows下换行是rn,当ftp软件在上传时,默认是以ASCII方式上传的,而ASCII方式上传文件有个特点,会将文件里的换行符进行适当处理以符合上传服务器的运行环境。在这个过程中,部分文件就会处理不当,出现换行符丢失的bug。(注意,不是全部php文件,是小部分的php文件会出现这个问题)。
 
  上诉问题尤其在php源码里有单行注释符“//”时,会导致php源文件直接无法运行。因为源码变成了一行代码后,单行注释符把//后面所有的代码都注释掉了。
 
  FTP上传bug解决方法:
 
  方法1:将单行注释符 // 改成 多行注释符 /* 注释文字 */ 这样即使换行符丢失,也不影响后面源码的执行。(但是下载到本地二次修改时,依然是件头疼的事!)
 
  方法2:FTP上传php文件不要使用ASCII模式,全部使用二进制方式。这是最保险的。 如何设置ftp软件以二进制方式Binary上传,请网络搜索下自己使用的ftp软件的设置方式。
 
  知识补充:FTP的ASCII和Binary传输模式:
 
  FTP有ASCII和Binary两种传输模式:
 
  Binary模式不会对数据进行任何处理。
 
  Ascii模式会将回车换行转换为本机的回车字符。
 
  由于WINDOWS和UNIX的行结束符不一样。所以从WINDOWS用Binary传输方式传输文本文件到UNIX时可能会出现^M。同样从UNIX用Binary方式传输文件到WINDOWS时,也可能出现回车换行显示不正确的问题。
 
  WINDOWS下新建ftp_ascii.txt内容如下:
 
  hello word!
  WINDOWD TO UNIX !
  TEST FTP ASCII;
  我们分别用两种模式上传到UNIX.
 
  ASCII模式正常
 
  vi ftp_ascii.txt
  hello word!
  WINDOWD TO UNIX !
  TEST FTP ASCII;
  二进制模式 Binary有问题
 
  vi ftp_ascii.txt
  hello word!^M
  WINDOWD TO UNIX !^M
  TEST FTP Binary;  
  由此可知我们采用ASCII模式传输文本可以避免传输中的^M问题,FTP中虽然ASCII模式可以避免^M的问题,但大多数情况还是选择Binary方式,这样可以保证传输的内容不会被改变,尤其是在传输可执行文件如php源码时,大多选用binary方式.
 
  在FlashFXP中可以在菜单->会话->传输模式中 选择ASCII,BINARY,自动三种模式.
 
  另外,我们以ssh登录sftp的方式上传文件时,也可以避免换行丢失的问题

(编辑:安阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读