使用ftp软件上传下载php文件时换行丢失bug(全部变为一行)
文章来源:http://www.piaoyi.org/computer/ftp-php-r-n-bug.html
正 文:
在使用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: 将单行注释符 // 改成 多行注释符 /* 注释文字 */ 这样即使换行符丢失,也不影响后面源码的执行。(但是下载到本地二次修改时,依然是件头疼的事!)
方法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内容如下:
WINDOWD TO UNIX !
TEST FTP ASCII;
我们分别用两种模式上传到UNIX.
ASCII模式正常
hello word!
WINDOWD TO UNIX !
TEST FTP ASCII;
二进制模式 Binary有问题
hello word!^M
WINDOWD TO UNIX !^M
TEST FTP Binary;
由此可知我们采用ASCII模式传输文本可以避免传输中的^M问题。 FTP中虽然ASCII模式可以避免^M的问题。但大多数情况还是选择Binary方式,这样可以保证传输的内容不会被改变。尤其是在传输可执行文件如php源码时, 大多选用binary方式。
在FlashFXP中可以在菜单->会话->传输模式中 选择ASCII ,BINARY ,自动三种模式。
另外,我们以ssh登录sftp的方式上传文件时,也可以避免换行丢失的问题。
使用ftp软件上传下载php文件时换行丢失bug(全部变为一行)的更多相关文章
- 使用ftp软件上传下载php文件时换行丢失bug
正 文: 在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了, ...
- ****使用ftp软件上传下载php文件时换行符丢失bug
在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了,导致php文件 ...
- Java语言实现简单FTP软件------>上传下载队列窗口的实现(七)
1.首先看一下队列窗口的界面 2.看一下上传队列窗口的界面 3.看一下下载队列窗口的界面 4.队列窗口的实现 package com.oyp.ftp.panel.queue; import stati ...
- Java语言实现简单FTP软件------>上传下载管理模块的实现(十一)
1.上传本地文件或文件夹到远程FTP服务器端的功能. 当用户在本地文件列表中选择想要上传的文件后,点击上传按钮,将本机上指定的文件上传到FTP服务器当前展现的目录,下图为上传子模块流程图 选择好要上传 ...
- Linux 终端访问 FTP 及 上传下载 文件
今天同事问我一个问题,在Linux 下访问FTP,并将文件上传上去. 我之前一直是用WinSCP工具的. 先将文件从linux copy到windows下,然后在传到ftp上.google 一下. 方 ...
- Linux 终端訪问 FTP 及 上传下载 文件
今天同事问我一个问题,在Linux 下訪问FTP,并将文件上传上去. 我之前一直是用WinSCP工具的. 先将文件从linux copy到windows下,然后在传到ftp上. google 一下. ...
- Linux 终端访问 FTP 及 上传下载 文件[转]
1. Linux 终端连接FTP [oracle@Dave ~]$ ftp 10.85.7.97 Connected to 10.85.7.97. 220 Serv-U FTP Server ...
- linux下常用FTP命令 上传下载文件【转】
1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...
- Xshell5下利用sftp上传下载传输文件
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH ...
随机推荐
- Java多线程高并发学习笔记(二)——深入理解ReentrantLock与Condition
锁的概念 从jdk发行1.5版本之后,在原来synchronize的基础上,增加了重入锁ReentrantLock. 本文就不介绍synchronize了,有兴趣的同学可以去了解一下,本文重点介绍Re ...
- [07] ServletContext上下文对象
1.上下文的概念 我们在说到Servlet的继承关系时,提到自定义Servlet实际上间接实现了Servlet和ServletConfig两个接口,其中ServletConfig接口中定义了一个方法叫 ...
- Intellij idea使用Junit
之前使用idea做Junit测试的时候,都是一个一个方法来写,然后在方法名@Test这样测试-.. 后来发现eclipse有直接把整个类的方法都可以抽取出来,自动生成Junit测试方法-于是在找Ide ...
- websphere部署--web应用-以自己的项目为例
启动websphere: 1) 启动Manager: /home/wasadmin/IBM/WebSphere/AppServer/bin/startManager.sh 2) 启动Node: ...
- struts1.3整合spring2.5(将spring委托给struts方式)
前提是配置完struts1.3 导包 spring-2.5.6.jar //spring核心包 spring-webmvc-struts-2.5.5.jar //struts整合spring使用 lo ...
- asp.net core合并压缩资源文件引发的学习之旅
0. 在asp.net core中使用BuildBundlerMinifier合并压缩资源文件 在asp.net mvc中可以使用Bundle来压缩合并css,js 不知道的见:http://www. ...
- hdu 5952 连通子图
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- Sets 比赛时想错方向了。。。。 (大数不能处理负数啊)
Sets Time Limit: 6000/3000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatus P ...
- 项目常用Javascript分享,包含常用验证和Cookie操作
function IsEmail(str) { var r = /^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; if (r.test(str)) ...
- Echarts数据可视化parallel平行坐标系,开发全解+完美注释
全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...