1

リモート サーバーからファイルのバッチをアップロードするためssh2_scp_recv()に、php プログラムの for ループで使用します。それはある時点でうまく機能します。ただし、1 つのフォルダーに 67 個を超えるファイルがある場合、次のようなエラー メッセージが表示されるようになります。

PHP 警告: 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); 

誰か私に何か提案をしてもらえますか?

4

1 に答える 1

0

への 1 回の呼び出しでfread()は、すべてのファイル名を取得できない場合があります。stream_get_contents最後まで読むために使用します。

$cmd = stream_get_contents($stream);
于 2013-08-30T21:13:54.073 に答える