****使用ftp软件上传下载php文件时换行符丢失bug

简介: 在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了,导致php文件无法正常运行。

在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了,导致php文件无法正常运行。

 

    这个时候,再次通过ftp软件把刚才上传的php文件下载到本地windows,用notepad++编辑器打开后,发现php源代码变成了一行,换行丢失。

 

    发生这种情况的原因是什么呢?飘易就以一句话概括下:
    由于linux下换行是\n,而windows下换行是\r\n,当ftp软件在上传时,默认是以ASCII方式上传的,而ASCII方式上传文件有个特点,会将文件里的换行符进行适当处理以符合上传服务器的运行环境。在这个过程中,部分文件就会处理不当,出现换行符丢失的bug。(注意,不是全部php文件,是小部分的php文件会出现这个问题)。

 

    上诉问题尤其在php源码里有单行注释符“//”时,会导致php源文件直接无法运行。因为源码变成了一行代码后,单行注释符把//后面所有的代码都注释掉了。

 

    FTP上传bug解决方法:
方法1: 将单行注释符 // 改成 多行注释符 /* 注释文字 */ 这样即使换行符丢失,也不影响后面源码的执行。(但是下载到本地二次修改时,依然是件头疼的事!)
方法2FTP上传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的方式上传文件时,也可以避免换行丢失的问题

如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/
目录
相关文章
|
4天前
thinkphp5.1隐藏index.php入口文件
thinkphp5.1隐藏index.php入口文件
32 0
thinkphp5.1隐藏index.php入口文件
|
4天前
File和FTP和HTTP软件配置
File和FTP和HTTP软件配置
|
4天前
|
存储 Unix Linux
LabVIEW与实时目标之间的FTP文件
LabVIEW与实时目标之间的FTP文件
|
4天前
|
安全 PHP
【PHP开发专栏】PHP文件上传与下载实现
【4月更文挑战第30天】本文介绍了在PHP中实现文件上传和下载的详细步骤。文件上传通过`$_FILES`全局数组处理,包括设置HTML表单、PHP脚本处理上传及安全性考虑。文件下载则可使用`readfile()`、`fpassthru()`或`file_get_contents()`函数,同时关注安全问题,如防止目录遍历漏洞。文中还提供了一个简单的图片分享网站案例,演示了上传和下载功能的集成。
|
4天前
|
安全 PHP 数据库
【PHP开发专栏】PHP文件包含漏洞与防范
【4月更文挑战第30天】本文探讨了PHP文件包含漏洞,该漏洞让攻击者能执行恶意代码或访问敏感信息。文章分为三部分:原理、影响和防范。文件包含函数(如`include`和`require`)在攻击者控制文件名时可能导致漏洞。影响包括执行恶意代码、泄露敏感信息和影响服务器性能。防范措施包括验证文件名安全性、使用安全包含函数、设置安全包含路径和参数,以及定期更新和维护代码及库。开发者应重视此问题,采取相应措施保障应用安全。
|
4天前
|
PHP
php下载MP4视频
php下载MP4视频
13 0
|
4天前
|
监控 安全 测试技术
使用pyftpdlib组件实现FTP文件共享
使用pyftpdlib组件实现FTP文件共享
37 0