PHP ファイルのアップロードの進行状況バーは、セッションと Javascript_PHP チュートリアルに基づいて実装されています
5.4 より前の php を使用している場合は、ajax、iframe、またはその他の方法でのみ実現できます。php5.4 を使用している場合は、session.upload_progress を使用して js とすばやく組み合わせて、ファイル アップロードの進行状況バーを実装できます。
以下では、PHP 5.4 の新しい session.upload_progress 機能について詳しく紹介します。
原理紹介
ブラウザがサーバーにファイルをアップロードすると、PHP はファイルアップロードの詳細情報 (アップロード時間、アップロードの進行状況など) をセッションに保存します。その後、アップロードが進行するにつれて、セッション内の情報が定期的に更新されます。このようにして、ブラウザは Ajax を使用してサーバー側スクリプトを定期的にリクエストし、スクリプトはセッション内の進行状況情報を返します。ブラウザ側 JavaScript はこの情報に基づいて進行状況バーを表示/更新できます。
それでは、ファイルのアップロード情報はどのように保存されるのでしょうか?どうやってアクセスするのでしょうか?以下で詳しく説明しましょう。
一部の設定項目は PHP 5.4 で導入されました (php.ini で設定)
session.upload_progress.enabled = "1"
session.upload_progress.cleanup = "1"
session.upload_progress.prefix = "upload_progress_"
session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
session.upload_progress.freq = "1%"
session.upload_progress.min_freq = "1"
このうち、enabled は、upload_progress 関数を有効にするかどうかを制御します。デフォルトで有効になります。クリーンアップは、ファイルのアップロード要求が送信された後にセッション関連の情報をクリアするかどうかを設定します。これはデフォルトで有効になります。
prefix と name は、セッションに保存される進行状況情報の変数名/キー名を設定するために使用されます。これら 2 つのアイテムの詳しい使用方法については、以下を参照してください。
freq と min_freq は、サーバー側で進捗情報を更新する頻度を設定するために使用されます。これら 2 つの項目を適切に設定すると、サーバーの負荷を軽減できます。
ファイルをアップロードするためのフォームでは、このアップロードの識別子を設定し、この識別子を使用して後続のプロセスで進捗情報を参照する必要があります。具体的には、アップロード フォームに非表示の入力が必要です。その name 属性は php.ini の session.upload_progress.name の値であり、その値は自分で定義した識別子です。以下の通り:
name=""
value="テスト" />
ファイルアップロードフォームを受信した後、PHP は $_SESSION 変数に新しいキーを作成します。キー名は、session.upload_progress.prefix の値と上記のカスタム識別子を連結することによって取得される文字列です。
$name = ini_get('session.upload_progress.name');
$key = ini_get('session.upload_progress.prefix') $_POST[$name];
$_SESSION[$key]; // このファイルのアップロードの進行状況を示します
変数 $_SESSION[$key] の構造は次のとおりです:
$_SESSION["upload_progress_test"] = array(
"start_time" => 1234567890, // 開始時間
"content_length" => 57343257, // POSTリクエストの合計データ長
"bytes_processed" => 453489, // 受信データ長
"Done" = & gt; false, // リクエストが完了したかどうか、False は完了していません
//単一ファイルの情報
"ファイル" => 配列(
0 => 配列( ... ),
// 同じリクエストに複数のファイルを含めることができます
1 => 配列( ... ),
)
);このようにして、content_length と bytes_processed の 2 つの項目を使用して、進行状況のパーセンテージを取得できます。
プログラム例
原理を紹介したので、PHP と Javascript に基づいてファイル アップロードの進行状況バーを完全に実装してみましょう。
この例のコード リポジトリ: Github: pureweber/samples/php-upload-progress
フォームをアップロード
まず、アップロードフォームページのindex.phpを書きましょう。コードは次のとおりです:
Style="margin:15px 0" target="hidden_iframe">
フォーム>
ここでのフォームの target 属性には特別な注意を払う必要があります。ここでの設定は現在のページの iframe を指します。これは重要です。target 属性を設定すると、フォームが送信された後のページが iframe に表示され、現在のページへのジャンプが回避されます。現在のページに進行状況バーを表示する必要があるためです。
#progress この div は、進行状況バーを表示するために使用されます。
注:index.php の先頭に session_start() を追加することを忘れないでください。
アップロードされたファイルを処理する
フォームのアクションは、upload.php を指します。upload.php でアップロードされたファイルを処理し、現在のディレクトリに転送します。通常のアップロード処理と変わりはありません。
move_uploaded_file($_FILES['file1']['tmp_name'], "./{$_FILES['file1']['name']}");
}
?>Ajax で進捗情報を取得します
このステップが重要です。セッションの進行状況情報を読み取るために progress.php ファイルを作成し、index.php に Javascript コードを追加し、progress.php への Ajax リクエストを開始して、そのファイルを更新します。進行状況情報を取得しました。
session_start();
$i = ini_get('session.upload_progress.name');
$key = ini_get("session.upload_progress.prefix") . $_GET[$i];
if (!empty($_SESSION[$key])) {
$current = $_SESSION[$key]["bytes_processed"];
$total = $_SESSION[$key]["content_length"];
エコー $current
}その他{
エコー100;
}
?>ここでは、$_SESSION 変数内の進行状況情報を取得し、進行状況のパーセンテージを出力します。
関数 fetch_progress(){
$.get('progress.php',{ '' : 'test'}, function(data){
var progress = parseInt(data);
$('#progress .bar').css('width', progress + '%');
}その他{
$('#progress .label').html('完了!');
}
}, 'html');
}
$('#upload-form').submit(function(){
setTimeout('fetch_progress()', 100);
});
#upload-form が送信されると、進行状況バーが表示され、fetch_progress() を繰り返し呼び出して進行状況情報を取得し、ファイルがアップロードされて「Complete!」が表示されるまで進行状況バーを更新します。
完了!
完全なコードについては、Github: pureweber/samples/php-upload-progress を参照してください
メモ
inputタグの位置
session.upload_progress.name という名前の input タグは、ファイル input の前に配置する必要があります。
アップロードをキャンセル
setTimeout と setInterval

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。

tostoreauser'snameInappession、starthessession withsession_start()、thensignthenameto $ _session ['username']。1)ousession_start()toinitializethessession.2)assighttheuser'snameto $ _ session ['username']

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1
使いやすく無料のコードエディター

ホットトピック









