今日、PHP の APC を使用すると、ファイルのアップロードの進行状況も取得できることを発見しました。この記事ではその方法を説明します。
APC をインストールしますまず、APC をインストールする方法は、インターネット上で多くの PHP モジュールを見つけることができます
phpinfo で、APC のデフォルト設定が次のとおりであることがわかります。設定項目 apc.rfc1867 を見てください:
http://cn2.php.net/manual/en/apc.configuration.php#ini.apc.rfc1867
このドキュメントには、次のようなファイルをアップロードすると記載されています。 POST の APC_UPLOAD_PROGRESS フィールドを指定すると、APC はこの値を使用して Upload_key キャッシュを自動的に作成します
この時点で、ユーザーは ajax を使用して再度呼び出すことができ、現在のファイル アップロード ステータスを取得できます
このステータスには以下が含まれます:
ファイルサイズ 現在アップロードされているファイルサイズ ファイルアップロード速度 (アップロード後にのみ利用可能) 実験: 1 rfc1867 設定項目をオンにしますapc.rfc1867=on
2 オンになっていることが phpinfo() で確認できます
3 php コードをサーバー
apc.php<?phpif($_FILES['file']['error'] == UPLOAD_ERR_OK){ $path = '/tmp/upload/'; $path .= basename($_FILES['file']['name']); if(move_uploaded_file($_FILES['file']['tmp_name'], $path)){ // upload successful echo 'sucess'; }}
http://10.16.15.118:7702/apc.php からアクセスできます
getprocess.php<?phpprint_r(apc_fetch("upload_6226f7cbe59e99a90b5cef6f94f966fd"));
ネットワーク経由でページにアクセスできることを確認してください
これは http://10.16.15.118 :7702/getprocess.php を介してアクセスできます
5 単純なクライアント HTML<html><body><form enctype="multipart/form-data" method="POST" action="http://10.16.15.118:7702/apc.php"><input type="hidden" name="APC_UPLOAD_PROGRESS" value="6226f7cbe59e99a90b5cef6f94f966fd"/><input type="file" name="file" /><input type="submit" value="submit" /></form></body></html>
注意が必要ですここで、APC_UPLOAD_PROCESS をアップロードするファイルの前に置く必要があること (これはドキュメントにも書かれています)。そうしないと、プロセスを取得できません
6 ファイルをアップロードして apc.php にアクセスします 7 getprocess.php を表示します次の質問は、中間の遷移状態が本当に存在するのかということです。 1. 大きなファイル (20M+) を見つけます。 2. nginx+php がファイル サイズを 20M を超えて制限していることを確認します。 3. 速度制限のために fidder を有効にします。
この記事に従ってください: http://donchevp.blogspot.com/2009/ 11/limiting-your-internet-connection-speed.html
ルールを設定します - 顧客 - このコードを設定します
if (m_SimulateModem) { // Delay sends by 300ms per KB uploaded. oSession["request-trickle-delay"] = "1"; // Delay receives by 150ms per KB downloaded. oSession["response-trickle-delay"] = "150"; }
このリクエスト-トリクル遅延を変更します
次に、シミュレート モードをオンにします。
4 この 20M ファイルを a.html ページからアップロードします 5 getprocess.php を更新し続けます現在の進行状況を確認できます。アップロードが完了していない場合は、レート フィールドが利用できないことがわかります~~~soいいですね~~
参考記事:http://www.phppan.com/2012/04/php-upload-progress/
http://donchevp.blogspot.com/2009/11/limiting-your-internet-接続速度.html