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

SFTP transfer results in ^M in the uploaded file

我尝试从网络 PHP 上传文件到 shell 服务器,然后 运行 使用此命令 (phpseclib)

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

已上传但文件中有 ^M

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

12345

67890

那么这是来自shell服务器的文件

12345^M

67890^M

这个问题我该怎么办?有办法用sftp->put没有^M?

您正在将 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?