SFTP传输导致上传文件中的^ M.

时间:2015-03-27 10:12:07

标签: php shell ssh sftp phpseclib

我尝试将文件从Web PHP上传到shell服务器并使用此命令运行它(phpseclib)

$sftp->put("$upload", "$imageupload", NET_SFTP_LOCAL_FILE)

它已上传但文件中有^M

这是我上传到服务器之前的文件

  

12345

     

67890

然后这是来自shell服务器的文件

  

12345 ^ M

     

67890 ^ M

我应该怎么处理这个问题?有办法使用sftp->put并且它没有^M吗?

1 个答案:

答案 0 :(得分:3)

您正在将Windows格式的文本文件上传到Unix服务器。

某些Unix应用程序无法处理Windows样式的行结尾。

通常使用文本模式传输解决问题。但是,虽然FTP客户端和服务器广泛支持文本模式传输,但很少有SFTP客户端和服务器支持它。它绝对不受phpseclib的支持。 phpseclib仅支持SFTP协议版本3。并且仅支持SFTP协议版本4的文本模式。

所以你需要在上传之前将文件转换为Unix格式

有关PHP中的转换,请参阅示例:how to convert text file from DOS to Unix line endings?

有关更多背景信息,另请参阅我的文章Why are text file line breaks wrong after the file is transferred or edited?