ホームページ バックエンド開発 PHPチュートリアル APC モジュールを使用してアップロードの進行状況バーを実装した PHP の共有例

APC モジュールを使用してアップロードの進行状況バーを実装した PHP の共有例

Dec 25, 2017 pm 02:13 PM
php アップロード スケジュール

この記事では主に、PHP が APC モジュールを使用してファイル アップロードのプログレス バーを実装する方法を紹介し、APC モジュールの具体的な使用方法を分析し、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モジュールのパラメータ設定のコードは次のとおりです:

Name Default Changeable Changelog  
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  
apc.cache_by_default On PHP_INI_SYSTEM  
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コードは次のとおりです:

<!–以下为上传表单–>  
<form enctype="multipart/form-data" id="upload_form" action="" method="POST">  
<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="upid"/>  
视频标题:<input type="text" id="subject" name="subject"/>  
视频说明:<input type="text" id="content" name="content"/>  
视频TAG(以逗号分割)<input type="text" id="tag" name="tags"/>  
<input type="file" id="upfile" name="upfile"/>  
<input type="submit" id="filesubmit" value="上传" onclick="startProgress(&#39;upid&#39;); return true;"/>  
<!–注意:startProgress(&#39;upid&#39;)中的参数是你从php中分配的唯一上传参数–>  
</form>  
<!–以下为上传进度条–>  
<p id="upstatus" style="width: 500px; height: 30px; border: 1px solid ##ffffde; color:#796140;">  
</p  
<p id="progressouter" style="width: 500px; height: 20px; border: 3px solid #de7e00; display:none;">  
<p id="progressinner" style="position: relative; height: 20px; color:#796140; background-color: #f6d095; width: 0%; "></p>  
</p>
ログイン後にコピー

最も重要なことは APC_UPLOAD_PROGRESS の隠しフィールドです。このスクリプトを使用すると、現在アップロードされているファイルのステータスにアクセスでき、 p を追加するだけでアップロード ステータスを表示できます

以下は、Ajax を処理するためのスクリプトです。メッセージを渡すためのJqueryフレームワークとjsonです

JavaScript コードは以下の通りです:

function getProgress(upid){  
var url = "<{$siteurl}>epadmin/upprocess";  
$.getJSON(  
url,  
{ progress_key: upid },  
function(json){  
$("#progressinner").width(json.per+"%");  
$("#upstatus").html(&#39;文件大小:&#39;+json.total+&#39;KB&#39;+&#39; 已上传:&#39;+json.current+&#39;KB&#39;);  
if (json.per < 100){  
setTimeout(function(){  
getProgress(upid);  
}, 10);  
}else{  
$("#upstatus").html("视频上传完成,正在处理数据,请稍后……");  
}  
}  
)  
}  
function startProgress(upid){  
$("#progressouter").css({ display:"block" });  
setTimeout(function(){  
getProgress(upid);  
}, 100);  
}
ログイン後にコピー


アップロードされたファイルの処理に関しては、通常通り記述できます。コードは次のとおりです:

//上传文件操作函数,可按照自己的需要编写  
function upflvAction()  
{  
if($_SERVER[&#39;REQUEST_METHOD&#39;]==&#39;POST&#39;){  
$subject = trim($this->f->filter($this->_request->getPost(&#39;subject&#39;)));  
$content = trim($this->f->filter($this->_request->getPost(&#39;content&#39;)));  
Zend_Loader::loadClass(&#39;Custom_FlvOp&#39;);  
$flv = new Custom_FlvOp;  
$flv->uploadFlv(&#39;upfile&#39;,$subject,$content);  
}
}  
//这就是读取上传状态的函数了~~  
function upprocessAction()  
{   
if(isset($_GET[&#39;progress_key&#39;])) {  
$status = apc_fetch(&#39;upload_&#39;.$_GET[&#39;progress_key&#39;]);  
$json = array(  
&#39;per&#39;=>$status[&#39;current&#39;]/$status[&#39;total&#39;]*100,  
&#39;total&#39;=>round($status[&#39;total&#39;]/1024),  
&#39;current&#39;=>round($status[&#39;current&#39;]/1024),  
);  
require_once("Zend/Json.php");  
echo Zend_Json::encode($json);  
}  
}
ログイン後にコピー


APC 設定に関する詳細な説明:

apc.enabled ブール値

apc.enabled を 0 に設定すると、APC が静的にコンパイルされる場合に主に役立ちます。 PHP を無効にする他の方法がないため、DSO としてコンパイルする場合は、php.ini の拡張行をコメント化できます。

apc.shm_segments 整数

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

apc.shm_size 整数

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

apc.optimization Integer

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

apc.num_files_hint 整数

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

apc.ttl 整数

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

apc.gc_ttl 整数

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

apc.cache_by_default ブール値

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

apc.filters String

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

apc.mmap_file_mask 文字列

apc.slam_defense 整数

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

apc.file_update_protection integer

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

apc.enable-cli 整数

は主に、PHP の CLI バージョンの APC 機能を有効にするためにテストとデバッグに使用されます。一般的に、CLI リクエストごとに APC キャッシュを作成、移植、破棄することは考えられません。ただし、さまざまなテスト状況では、CLI バージョンで APC を有効にするのは非常に簡単です。 + ファイルキャッシュのカプセル化実装コード

PHP OPCodeキャッシュAPCの詳細な紹介

以上がAPC モジュールを使用してアップロードの進行状況バーを実装した PHP の共有例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles