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?
我尝试从网络 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?