You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel生成的Zip文件经SFTP上传至服务器后损坏问题排查

解决SFTP上传Zip文件损坏的问题

嘿,我之前也碰到过一模一样的情况!本地生成的Zip好好的,一通过phpseclib的SFTP上传到服务器就损坏,核心原因就是文件传输模式不对——phpseclib的put()方法默认用的是文本模式,而Zip这类二进制文件必须用二进制模式传输,不然换行符转换之类的操作会直接破坏文件结构。

直接改代码就行

把你上传文件的那行代码,加上二进制模式的参数:

$s = $sftp->put($filename, $file.$filename, SFTP::BINARY);

或者更完整的写法(明确指定本地文件源+二进制模式):

$s = $sftp->put($filename, $file.$filename, SFTP::SOURCE_LOCAL_FILE | SFTP::BINARY);

为啥会这样?

文本模式下,SFTP会自动处理换行符(比如把Windows的\r\n换成Linux的\n),但Zip是二进制格式,每一个字节都不能乱改,一转换就直接损坏了。二进制模式会原封不动地把本地文件的所有字节传上去,自然就不会有问题了。

额外可以检查的点

  • 先确认$file.$filename这个路径是对的,别拼接错了传了个空文件或者别的文件上去
  • 上传前后对比下本地和服务器上文件的大小,如果大小不一样,那肯定是传输过程中字节被改了,二进制模式就能解决
  • 也可以试试先把本地Zip文件手动通过SFTP工具(比如FileZilla)传上去,如果能正常解压,那就坐实是代码里的传输模式问题了

内容的提问来源于stack exchange,提问作者LordGrim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:31:48