我尝试将文件从Web PHP上传到shell服务器并使用此命令运行它(phpseclib)
$sftp->put("$upload", "$imageupload", NET_SFTP_LOCAL_FILE)
它已上传但文件中有^M
这是我上传到服务器之前的文件
12345
67890
然后这是来自shell服务器的文件
12345 ^ M
67890 ^ M
我应该怎么处理这个问题?有办法使用sftp->put
并且它没有^M
吗?
答案 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?