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

如何获取phpseclib SFTP操作的日志及服务器错误响应?

问题描述

使用以下PHP代码通过phpseclib3向SFTP服务器传输文件:

use phpseclib3\Net\SFTP;

$sftp = new SFTP('localhost');

$sftp->login('user', 'password');
error_log($sftp->pwd());

foreach ($fileList as $key => $value) {
    $output = $sftp->put("//data//myfile.txt, //sourceFile.txt, SFTP::SOURCE_LOCAL_FILE);
    error_log($output);
}

error_log($sftp->getLastError());
// error_log($sftp->getSFTPLastError());
error_log('------------------------------------');
error_log("<pre>" . print_r($sftp->getErrors(), true) . "</pre>");
// error_log("<pre>" . print_r($sftp->getSFTPErrors(), true) . "</pre>");
error_log("<pre>" . print_r($sftp->getLog(), true) . "</pre>");
error_log("<pre>" . print_r($sftp->getSFTPLog(), true) . "</pre>");

代码能正常运行,但文件传输失败时仅$output变为null,无法获取错误日志或SFTP服务器的响应信息,请问需要修改哪些内容才能获取有效的日志消息或SFTP服务器响应?


解决方法

1. 修复语法错误

put方法调用存在引号未闭合的语法问题,这会导致逻辑异常,先修正:

$output = $sftp->put("//data//myfile.txt", "//sourceFile.txt", SFTP::SOURCE_LOCAL_FILE);

确保每个字符串参数都被正确闭合。

2. 启用完整错误捕获与日志

phpseclib3默认未完全开放错误日志,需调整以下配置:

  • 开启PHP错误报告,确保运行时错误能被捕获:
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    
  • 取消代码中注释的SFTP专属错误方法调用,获取协议层面的错误和日志:
    error_log($sftp->getSFTPLastError());
    error_log("<pre>" . print_r($sftp->getSFTPErrors(), true) . "</pre>");
    
  • 测试阶段可改用var_dump直接输出日志内容,比error_log更直观:
    var_dump($sftp->getSFTPErrors());
    var_dump($sftp->getSFTPLog());
    

3. 修正路径格式

SFTP服务器路径通常使用单斜杠,双斜杠可能被解析为无效路径,建议调整:

$output = $sftp->put("/data/myfile.txt", "/sourceFile.txt", SFTP::SOURCE_LOCAL_FILE);

4. 校验登录状态

登录操作可能失败但未被检测,增加登录结果判断:

if (!$sftp->login('user', 'password')) {
    die('SFTP登录失败: ' . $sftp->getLastError());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:32:15