除了我之前发布的内容外,我还发现 sftp->fopen->file_get_contents->fwrite 的性能比 ssh2_scp_send 好得多。
我使用以下代码进行测试
<?php
$srcFile = '/var/tmp/dir1/file_to_send.txt';
$dstFile = '/var/tmp/dir2/file_received.txt';
// 创建与远程主机的连接
$conn = ssh2_connect('my.server.com', 22);
// 创建 SFTP 会话
$sftp = ssh2_sftp($conn);
$sftpStream = @fopen('ssh2.sftp://'.$sftp.$dstFile, 'w');
try {
if (!$sftpStream) {
throw new Exception("无法打开远程文件: $dstFile");
}
$data_to_send = @file_get_contents($srcFile);
if ($data_to_send === false) {
throw new Exception("无法打开本地文件: $srcFile.");
}
if (@fwrite($sftpStream, $data_to_send) === false) {
throw new Exception("无法从文件发送数据: $srcFile.");
}
fclose($sftpStream);
} catch (Exception $e) {
error_log('Exception: ' . $e->getMessage());
fclose($sftpStream);
}
?>
对于测试,我发送了三个总大小为 6kB 的文件,包括连接到服务器的发送时间为
SFTP -> 15 秒。
ssh2_scp_send -> 22 秒。
干杯!
Pimmy