在php中通过ssh2_scp_recv获取文件

在php中通过ssh2_scp_recv获取文件,php,sftp,ssh2-sftp,ssh2,Php,Sftp,Ssh2 Sftp,Ssh2,对于一个项目,我需要检索sftp服务器上的所有文件,在所有文件中,总大小约为100 mb。我开发了一个脚本,它使用ssh2库和fread获取所有文件,但获取所有内容需要大约10分钟。我尝试了ssh2_scp_recv,希望获得更好的性能,如下面的代码所示,但是脚本运行得相当快,没有获得任何文件,就好像前面提到的函数从未运行过一样 function get_sftp_content(){ $url = 'someurl.com'; $port = 22; $username = &quo

对于一个项目,我需要检索sftp服务器上的所有文件,在所有文件中,总大小约为100 mb。我开发了一个脚本,它使用ssh2库和fread获取所有文件,但获取所有内容需要大约10分钟。我尝试了ssh2_scp_recv,希望获得更好的性能,如下面的代码所示,但是脚本运行得相当快,没有获得任何文件,就好像前面提到的函数从未运行过一样

function get_sftp_content(){
    
$url = 'someurl.com';
$port = 22;
$username = "user";
$password = "password";

// Make our connection
$connection = ssh2_connect($url);
 
// Authenticate
if (!ssh2_auth_password($connection, $username, $password)) throw new Exception('Unable to connect.');
 
// Create our SFTP resource
if (!$sftp = ssh2_sftp($connection)) throw new Exception('Unable to create SFTP connection.');

$localDir = '/ftp_files';
$remoteDir = '/download';

// download all the files
$files    = scandir('ssh2.sftp://' . $sftp . $remoteDir);
//echo '<pre>' . print_r($files, true) . '</pre>' ;
if (!empty($files)) {
  foreach ($files as $file) {
      ssh2_scp_recv($connection,$remoteDir.'/'.$file, $localDir.'/'.$file);
  }
}
}


get_sftp_content();  
函数get\u sftp\u content(){
$url='someurl.com';
$port=22;
$username=“user”;
$password=“password”;
//建立我们的联系
$connection=ssh2\u connect($url);
//鉴定
如果(!ssh2_auth_password($connection,$username,$password))引发新异常('cannot connect');
//创建我们的SFTP资源
if(!$sftp=ssh2_sftp($connection))抛出新异常('无法创建sftp连接');
$localDir='/ftp_文件';
$remoteDir='/download';
//下载所有文件
$files=scandir('ssh2.sftp://'。$sftp.$remoteDir);
//回显“”。打印($files,true)。“”;
如果(!空($files)){
foreach($files作为$file){
ssh2_scp_recv($connection,$remoteDir./'.$file,$localDir./'.$file);
}
}
}
获取内容();

您知道为什么会发生这种情况吗?有没有更快的方法来获取所有文件,而不必重复使用phpseclib?

根据远程端的文件类型(二进制文件、文本文件)以及它们的更改频率,重新同步它们会更快(假设:PHP脚本运行的本地端上的文件在脚本完成后不会被删除)。文件大约每半小时更改一次,并以json格式显示。Rsync听起来是个好主意。我将搜索相关主题。您不会对
ssh2\u scp\u recv
的结果进行错误检查,因此您可能希望从这一点开始。scp和SFTP在性能方面不会有明显的不同。在代码中,我发布了否,但我准备就绪,未显示任何错误。