StackOverflow はこの件について十分に説明していないように見えるので、これは質問に値すると思います。
プログレスバー付きのPHPを使用してSFTPしたい
プログレスバーが大好きです。しかし、今回は少し違うことをしたいと思っています。PHPで次のことをしたいのですが、これは前回よりもずっと難しいようです:
- SFTP経由でダウンロードを実行します(SSH経由?)
- ユーザーにダウンロードの進行状況を視覚的に示す
- ダウンロードの一時停止と続行を有効にする
FileZillaを考えてみてください。ただし、PHP で構築されたブラウザー内です。Apache をハッキングしたり、Apache の mod を追加したりしたくありません。
実際のダウンロードのオプション
基本的な SFTP ダウンロードについては、ここ、ここ、ここ、ここにたくさんの質問があります。
これらのドキュメントは、 PHP の SSH2 拡張機能(現在使用しています - これは pecl 経由でインストールします) と、私が使用していない代わりのPHPSecLibですが、後で調べる可能性があります。
私のインターフェースは簡単にスワップイン/アウトできます-実装ではなくインターフェースへのコーディングなど...
それは素晴らしいことですが、彼らは実際のダウンロードを実行するだけです。
ダウンロードの進行状況
PHP には と呼ばれる非常に興味深いコールバックがstream_notification_callback
あります。詳細については、こちらを参照してください。
これは見栄えがよく、有望なステップでしたが、誰かが PHP のソース コードを調べたところ、残念ながら SSH2 / SFTPではこれとの統合が許可されていないことがわかりました。
これを調査する努力をしてくれた hek2mgl に感謝します。
アイデアstream_notification_callback
は、データが取得されるたびに現在のダウンロード サイズの通知を渡すことでした。したがって、現在ダウンロードされている量と合計ファイル サイズを使用してパーセンテージを計算するために必要なデータを提供します。しかし、それはSSH2とSFTPには当てはまりません...
そして、一時停止/継続はどうですか?
私の意見では、これは達成するのが最も難しいでしょう。データを一時ファイルにダウンロードすることは可能です...これが私がなんとか掘り起こしたものです: http://ee.php.net/manual/en/function.fread.php#84115 - しかし、そのようなコードをプログレスバーがおかしいようです。
ついに
cURL もありますが、これを SFTP 経由でダウンロードを一時停止/再開することはできませんでした。私が間違っている場合は修正してください。
では、PHP を使用してブラウザー内で前述の要件を統合するにはどうすればよいでしょうか。クライアント側のことは忘れて、ブラウザにデータを取得するだけで十分なので、これを実行するための推奨事項は素晴らしいでしょう.