3

以下のコードを使用してファイルをコピーする投稿リクエストを送信しています

 $.ajax({
     url:filename,
     type: 'post',
     dataType: 'html',
     data: {"data":someData}, 
     success: function(data) {
       console.log(data);
       alert(data);
     },
     error:function(err){
      console.log(err);
     }
   });

この以下の関数はファイルをコピーし、進行状況を示します

function copyfiles($filename,$filesize){
    $remote = fopen('../filestorage/'.$filename, 'r');
    $local = fopen('../uploads/'.$filename, 'w');
    $read_bytes = 0;
    while(!feof($remote)) {
      $buffer = fread($remote, 2048);
      fwrite($local, $buffer);
      $read_bytes += 2048;
      $progress = min(100, 100 * $read_bytes / $filesize);
  echo json_encode(array("progress"=>$progress));
    }
   fclose($remote);
   fclose($local);
}

しかし、私が得るのは以下のような1つの応答です

        {"progress":16.956449743335}{"progress":33.91289948667} 
         {"progress":50.869349230005}{"progress":67.82579897334}
         {"progress":84.782248716675}{"progress":100}

1つずつ取得して、どれだけコピーされているかの進行状況を表示したい。どうすればそれができるか提案してください。

4

2 に答える 2

1

私がそれをしたのは4年前だけです。それがあなたに役立つかどうかはわかりませんが、それは私のシステムでした:

  1. 長い処理 (ファイル転送だけでなく) を行う場合、PHP はプロセスをファイル (または mysql db...) に保存する必要がありました。読み取りのためにファイルを閉じることを忘れないでください (ファイルを選択した場合)。権利!

  2. この間、コールバック(ajax今では自動更新でしたが)は、ファイル(またはデータベース)を読み取っている現在のプロセス値を返すPHP関数を呼び出します

それが役立つことを願っています!

于 2013-10-25T16:07:18.753 に答える