2013-08-30 2 views
1

Чтобы загрузить пакет файлов с удаленного сервера, я использую ssh2_scp_recv() в цикле for php для программы. В какой-то момент это работает хорошо. Но когда есть более 67 файлов в одной папке, то начинают иметь сообщение об ошибке, какssh2_scp_recv(): Не удается получить удаленный файл

PHP Warning: ssh2_scp_recv(): Не удается получить удаленный файл,

Программа Я использую как и следующие:

<?php 
$connection = ssh2_connect('host', 22); 
ssh2_auth_password($connection, 'user', 'password'); 

$remote_dir="/remote_dir/"; 
$local_dir="/local_dir/"; 

$com ="ls $remote_dir"; 
$stream = ssh2_exec($connection, $com); 
stream_set_blocking($stream,true); 
$cmd=fread($stream,4096); 

$arr=explode("\n",$cmd); 

$total_files=sizeof($arr); 

for($i=0;$i<$total_files;$i++){ 
    $file_name=trim($arr[$i]); 
    if($file_name!=''){ 
     $remote_file=$remote_dir.$file_name;  
     $local_file=$local_dir.$file_name; 

     if(ssh2_scp_recv($connection, $remote_file,$local_file)){ 
      echo "File ".$file_name." was copied to $local_dir<br />"; 
     } 
    } 
} 

fclose($stream); 

Может ли кто-нибудь дать мне какое-нибудь предложение?

ответ

1

Один звонок в fread() может не получить все имена файлов. Использовать stream_get_contents для чтения до конца:

$cmd = stream_get_contents($stream); 
+0

Спасибо, Barmar, работает. – user2730676

Смежные вопросы