ホームページ >バックエンド開発 >PHPチュートリアル >PHP は APC モジュールを使用してファイル アップロードの進行状況バーを実装します。_PHP チュートリアル

PHP は APC モジュールを使用してファイル アップロードの進行状況バーを実装します。_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:09:02831ブラウズ

PHP は APC モジュールを使用してファイルアップロードの進行状況バーを実装します

この記事の例では、PHP が APC モジュールを使用してファイル アップロードの進行状況バーを実装する方法について説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです:

php5.2 より前のバージョンでは、そのような APC モジュールが存在しなかったため、APC モジュールを使用できませんでした。APC モジュールを使用してアップロードプログレスバーを実装したい場合は、php5.2 以降である必要があります。

5.2 以降、APC は APC_UPLOAD_PROGRESS と呼ばれるものを追加しました。これにより、長い間誰もが悩まされてきたプログレス バーの問題が解決されます。また、アップロード中にすべての一時ファイルをメモリにキャッシュするという元の方法を、一時ファイルが設定値に達すると自動的にハードディスクに保存するように変更し、メモリ使用率を効果的に改善しました。

アップロード時に各アップロードに一意の ID を与えることで機能します。PHP スクリプトがアップロードされたファイルを受け取ると、インタープリターは $_POST 配列内の APC_UPLOAD_PROGRESS という名前の隠しフィールドを自動的にチェックします。このフィールドは、アップロードに関する情報を保存します。これにより、スクリプトはアップロード ID を介して、アップロードされたファイルに関するステータス情報にアクセスできるようになります。

APC は Alternative PHP Cache の略称で、無料で公開されている PHP 用に最適化されたコード キャッシュです。これは、PHP 中間コードをキャッシュおよび最適化するための、無料でオープンかつ堅牢なフレームワークを提供するために使用されます。

APCモジュールのパラメータ設定、コードは次のとおりです:

コードをコピーします コードは次のとおりです:
名前 デフォルト 変更可能 変更履歴
apc.enabled 1 PHP_INI_ALL
apc.shm_segments 1 PHP_INI_SYSTEM
apc.shm_size 30 PHP_INI_SYSTEM
apc.optimization 0 PHP_INI_ALL
apc.num_files_hint 1000 PHP_INI_SYSTEM
apc.ttl 0 PHP_INI_SYSTEM
apc.gc_ttl 3600 PHP_INI_SYSTEM
PHP_INI_SYSTEM 上の apc.cache_by_default
apc.filters "" PHP_INI_SYSTEM
apc.mmap_file_mask "" PHP_INI_SYSTEM
apc.slam_defense 0 PHP_INI_SYSTEM
apc.file_update_protection 2 PHP_INI_SYSTEM
apc.enable_cli 0 PHP_INI_SYSTEM > APC 3.0.6
設定が完了したので、プログラムを書き始めましょう

XML/HTML コードは次のとおりです:

コードをコピーします コードは次のとおりです:
動画のタイトル: 動画の説明: 動画タグ (カンマ区切り) から割り当てる唯一のアップロード パラメーターです。


最も重要なことは、APC_UPLOAD_PROGRESS の隠しフィールドです。これを使用すると、スクリプトは現在アップロードされているファイルのステータスにアクセスし、アップロード ステータスを表示できます。
以下は、Jqueryフレームワークとjsonを使用してメッセージを送信するためのスクリプトです。

JavaScript コードは次のとおりです
:



コードをコピーします

コードは次のとおりです:
関数 getProgress(upid){
var url = "<{$siteurl}>epadmin/upprocess"; $.getJSON(
URL、
{ progress_key: upid }、
関数(json){
$("#progressinner").width(json.per+"%"); $("#upstatus").html('ファイル サイズ:'+json.total+'KB'+' アップロード済み:'+json.current+'KB'); if (json.per setTimeout(function(){
getProgress(upid)
}、10); }その他{
$("#upstatus").html("ビデオのアップロードが完了しました。データは処理中です。お待​​ちください..."); }
}
)
}
関数 startProgress(upid){
$("#progressouter").css({ 表示:"ブロック" }); setTimeout(function(){
getProgress(upid)
}、100); }

次に、アップロードステータスを読み取るための PHP コードです。アップロードされたファイルの処理については、次のように記述できます。


コードをコピーします

コードは次のとおりです:

//アップロードファイル操作関数、必要に応じて記述できます
関数 upflvAction()
{ if($_SERVER['REQUEST_METHOD']=='POST'){ $subject = トリム($this->f->filter($this->_request->getPost('subject'))); $content = trim($this->f->filter($this->_request->getPost('content'))); Zend_Loader::loadClass('Custom_FlvOp'); $flv = 新しい Custom_FlvOp ; $flv->uploadFlv('upfile',$subject,$content); } }
//これはアップロードステータスを読み取る関数です~~
関数 upprocessAction()
{
if(isset($_GET['progress_key'])) {
$status = apc_fetch('upload_'.$_GET['progress_key']); $json = 配列(
'per'=>$status['current']/$status['total']*100,
'total'=>round($status['total']/1024),
'current'=>round($status['current']/1024),
); require_once("Zend/Json.php"); エコー Zend_Json::encode($json); }
}

APC 構成に関する詳細な説明:

apc.enabled ブール値

apc.enabled を 0 に設定すると、APC を無効にすることができます。これは、APC が静的に PHP にコンパイルされる場合に主に役立ちます。DSO にコンパイルされる場合は、コメントアウトで php.ini を変更できるためです。内線

apc.shm_segments 整数

コンパイル キャッシュに割り当てられた共有メモリ ブロックの数。APC が共有メモリを使い果たし、apc.shm_size をシステムが許可する最大値に設定している場合は、このパラメータの値を増やすことを試みることができます。

apc.shm_size 整数

各共有メモリ ブロックのサイズは MB 単位です。デフォルトでは、一部のシステム (ほとんどの BSD バリアントを含む) では、共有メモリ ブロック サイズの制限が非常に低く設定されています。

apc.optimization 整数

最適化レベル。最適化を無効にするには 0 に設定します。値が大きいほど、より強力な最適化が使用されます。多少の速度向上が期待できます。これはまだ実験的な性質のものです。

apc.num_files_hint 整数

Web サーバーに含まれ、リクエストされているさまざまなソース ファイルの数に関するヒント。よくわからない場合は、0 に設定するか省略してください。この設定は、主に何千ものソース ファイルがあるサイトで役立ちます。

apc.ttl 整数

キャッシュ内のキャッシュ エントリの場所が別のエントリで必要とされる場合、考慮する必要があるのは、キャッシュ内のこのキャッシュ エントリの場所がアイドル状態にできる秒数です。このパラメータを 0 に設定すると、キャッシュが古いエントリでいっぱいになる可能性があり、新しいエントリはキャッシュされなくなります。

apc.gc_ttl 整数

キャッシュ エントリがガベージ コレクション リスト内に存在する秒数。この値は、キャッシュされたソース ファイルが実行され、同時にサーバー プロセスが停止した場合のエラー保護を提供します。そのソース ファイルが変更された場合、古いバージョンのキャッシュ エントリに割り当てられたメモリは、このパラメータで設定された TTL 値に達するまで再利用されません。 0 に設定すると、この機能が無効になります。

apc.cache_by_default ブール値

デフォルトはオンですが、オフに設定して、プラス記号で始まる apc.filters とともに使用すると、ファイルはフィルターに一致する場合にのみキャッシュされます。

apc.filters 文字列

POSIX 拡張正規表現のカンマ区切りリスト。いずれかのパターンがソース ファイル名と一致する場合、そのファイルはキャッシュされません。一致に使用されるファイル名は、絶対パスではなく、include/require に渡されたファイル名であることに注意してください。正規表現の最初の文字が + の場合、その式は、その式に一致するファイルがキャッシュされることを意味し、最初の文字が - の場合、一致するファイルはキャッシュされません。 - はデフォルト値なので省略できます。

apc.mmap_file_mask文字列

apc.slam_defense 整数

非常に負荷の高いサーバーでは、サービスを開始するかファイルを変更するかにかかわらず、同じファイルを同時にキャッシュしようとする複数のプロセスで競合が発生します。このオプションは、プロセスがキャッシュされていないファイルのキャッシュ試行をスキップする割合を設定します。または、これを単一プロセスがキャッシュをスキップする確率と考えてください。たとえば、apc.slam_defense を 75 に設定すると、プロセスは 75% の確率でキャッシュされていないファイルをキャッシュしないことになります。したがって、設定を高くすると、キャッシュの衝突確率が低下する可能性が高くなります。この機能を無効にするには、0 に設定します。

apc.file_update_protection 整数

実行中のサーバー上のファイルを変更するときは、アトミック操作を実行する必要があります。つまり、最初に一時ファイルを書き込み、終了したらファイルの名前を最終的な場所に変更 (mv) します。多くのテキスト エディタ、cp、tar、およびその他の同様のプログラムは、このようには動作しません。これは、ファイルの書き込み中にファイルにアクセスして (キャッシュする) 機会があることを意味します。 apc.file_update_protection の設定により、キャッシュによる新しいファイルのマーク付けが遅延します。デフォルト値は 2 です。これは、ファイルの変更時間がアクセス時間から 2 秒未満であることが判明した場合、ファイルはキャッシュされないことを意味します。不運なユーザーが書きかけのファイルにアクセスすると、奇妙な動作が発生する可能性がありますが、少なくとも永続的なものではありません。ファイルの更新にアトミック操作を頻繁に使用することが確実な場合は、このパラメータを 0 に設定することでこの保護をオフにできます。システムに IO 操作が殺到し、更新プロセスに 2 秒以上かかる場合は、この値を増やす必要がある場合があります。

apc.enable-cli 整数

主にテストとデバッグのために、PHP の CLI バージョンで APC 機能を有効にします。一般的に、CLI リクエストごとに APC キャッシュを作成、移植、破棄することは考えられませんが、さまざまなテスト状況で、これは CLI バージョンで APC を簡単に有効にします。 .

この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/947913.html技術記事 PHP は、APC モジュールを使用してファイル アップロードの進行状況バーを実装します。この記事では、APC モジュールを使用してファイル アップロードの進行状況バーを実装する PHP の例について説明します。皆さんの参考に共有してください。具体的な分析は以下の通りです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。