我编写了一个PHP程序,该程序在具有许多(大约1000个)目录的远程服务器上执行原始列表功能。 phpseclib SFTP rawlist方法可以使用,但是遍历服务器上的目录树需要花费12分钟以上的时间。另一方面,普通的旧FTP原始列表函数(ftp_rawlist)在大约30秒内返回相同的结果。
我知道SSH连接会因为加密而增加开销,但这似乎过多。从Windows Server 2012和Windows 7上运行的PHP 5.3和5.4系统获得的SFTP结果相同。两种安装都启用了mcrypt和gmp。
这里是我正在测试的程序的基本版本:
<?php
set_include_path(get_include_path() . PATH_SEPARATOR . 'C:/path-to/phpseclib');
include 'Crypt/RSA.php';
include 'Net/SFTP.php';
$rsa = new Crypt_RSA();
$priKey = file_get_contents('C:/path-to/my_private_key.ppk');
$rsa->loadKey($priKey);
$sftp = new Net_SFTP('my_ssh_server_URI', 22);
if (!$sftp->login('my_user_id', $rsa)) {
exit("Login Failed\n");
}
print_r($sftp->rawlist('starting_directory', true));
?>
[我只是想知道是否有人在使用SFTP“ _list”方法时遇到了相同的问题,并提出了一种解决方法来提高性能。谢谢。
TRY ftp_pasv($ conn_id,true);