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

   在使用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的方式上传文件时,也可以避免换行丢失的问题。

时间: 2024-10-31 18:59:37

使用ftp软件上传下载php文件时php文件中换行丢失的相关文章

Java通过FTP服务器上传下载文件的方法_java

对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案. 关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程.之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到FileZilla Server都没有该问题,朋友们可以放心使用该代码. FavFTPUtil.Java package com.favccxx.favsoft.util; import jav

linux下lftp连接ftp服务器上传下载命令

  linux下lftp连接ftp服务器上传&下载 Java代码 用法: lftp ftp://用户名:密码@IP > 下载目录 mirror DIRNAME [下载整个目录里包含子目录,推荐此命令] 上传目录 mirror -R DIRNAM 下载目录 ... 用法: lftp ftp://用户名:密码@IP > 下载目录 mirror DIRNAME [下载整个目录里包含子目录,推荐此命令] 上传目录 mirror -R DIRNAM 下载目录 方法一 > mget -d D

java做的比较完善的FTP连接上传下载文件

比较|上传|下载 这是偶第一次写java程序实现公司要求的FTP数据同步,所有原代码如下,以供各位参考并提出宝贵意见!另外俺还有两个功能没有实现,有请高手指点一二:1.如何删除FTP服务器上已经下载过的文件?2.如何将上传的文件改名?上传时在文件名前加"temp_",上传完毕后需要把文件名改回来.3.如何使用openPassiveDataConnection()方法将ftp连接更改为主动连接,因为要从unix系统配置的ftp服务器下载文件的话,就需要主动连接. /***********

【FTP】使用org.apache.commons.net.ftp.FTPClient 实现FTP的上传下载

在此之前,在项目中加上FTP的架包   第一步:配置FTP服务器的相关配置 FtpConfig.java  实体类(配置类) 1 package com.sxd.ftp; 2 3 public class FtpConfig { 4 //主机ip 5 private String FtpHost = "192.168.18.252"; 6 //端口号 7 private int FtpPort = 21; 8 //ftp用户名 9 private String FtpUser = &q

在Java程序中实现FTP的上传下载

FtpList部分是用来显示FTP服务器上的文件:GetButton部分为从FTP服务器下传一个文件:PutButton部分为向FTP服务器上传一个文件. 别忘了在程序中还要引入两个库文件(importsun.net.*,import sun.net.ftp.*). 以下是这三部分的JAVA源程序: (1)显示FTP服务器上的文件 void ftpList_actionPerformed(ActionEvent e) { String server=serverEdit.getText(); /

用vb实现ftp的上传下载

上传|下载 Option Explicit Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _(ByVal sAgent As String, ByVal LAccessType As Long, ByVal sProxyName As String, _ByVal SProxyBypass As String, ByVal lFlags As Long) As

flashfxp设置FTP软件上传参数?

开通主机后-登录www.56dr.com&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;主机管理-控制-查询主机账户密码信息 FTP软件有很多种,但每种软件都要设置以下几项内容: 1] FTP主机地址:您站点主机的IP地址 2] FTP端口:用默认的21 3] 用户名:即您的用户ID 4] 密码:您的FTP用户名和密码请参见您的主机开通时给您发的开通通知 flashfxp为例 下载地址 打开工具-会话-快速链接 连

关于c#连接ftp进行上传下载实现原理及代码_实用技巧

复制代码 代码如下: using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO; namespace ftponload { class Program { static void Main(string[] args) { //上传文件的方法 onload("D://outPut.txt"); //下载文件的方法 fload(); } pub

silvrlight 怎么实现与ftp的上传下载 求教之前用wcf可是偏移量是个问题啊

问题描述 longoffset=file.Offset;Streamstream=filerequest.GetRequestStream();stream.Write(file.Data,(int)file.Offset,(int)file.Data_Length);file.Offset+=file.Data_Length;file.Data=null; 解决方案