【问题标题】:SFTP transfer results in ^M in the uploaded fileSFTP 传输导致上传文件中的 ^M
【发布时间】:2015-05-31 15:07:56
【问题描述】:

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

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

它已经上传,但文件中有^M

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

12345

67890

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

12345^M

67890^M

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

【问题讨论】:

  • ftp 客户端通常具有二进制与 ascii 的设置,但我还没有看到允许该选择的 sftp 客户端。
  • 我猜您正在将在 Windows pc 上创建的文件上传到 Linux 服务器,然后您会看到回车符。检查这个:stackoverflow.com/questions/5843495/…

标签: php shell ssh sftp phpseclib


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 2014-12-29
    相关资源
    最近更新 更多