#php セッション読み取り/書き込みロック
まず関数の例を見てみましょう:
#1. ページ上のボタンをクリックすると、ajax が php を実行し、php でセッションが実行ステップを記録します。2. ajax を使用して別の PHP をポーリングし、セッション内のデータを取得し、実行ステップを出力します。
#session.html
php を呼び出して実行ステップを実行し、出力します。 #<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<title> session lock </title>
</head>
<body>
<input type="button" value="handle" onclick="handle()">
<p id="result"></p>
<script type="text/javascript">
function handle(){
$.get("handle.php"); // 执行handle
// 每500毫秒请求,获取执行到第几步
var et = setInterval(function(){
$.get("getstep.php",
function(data){
$('#result').html('当前执行:' + data + '<br>');
if(data=='complete'){
clearInterval(et);
}
}
);
},500);
}
</script>
</body>
</html>
実行して実行ステップを記録します <?php
session_start();
$_SESSION['step'] = '';
$n = 1;
while($n<=10){
$_SESSION['step'] = $n;
sleep(1);
$n++;
}
$_SESSION['step'] = 'complete';
?>
##getstep.php
<?php session_start(); echo isset($_SESSION['step'])? $_SESSION['step'] : ''; ?>実行すると、ステップごとに返されるのではなく、10 秒待った後に直接 complete が返されることがわかりました。
session_start() を実行すると、セッションがロックされます。ページの実行が完了するまで。
したがって、ページの実行中、セッションへの書き込みはメモリに保存されるだけであり、セッション ファイルには書き込まれません。
#セッションを読み取るには、セッションのロックが解除されるまで待つ必要があります。
session_write_close() を使用して、セッション ファイルにデータを書き込み、セッション プロセスを終了できます。このようにすると、ページの実行が完了するまで待つ必要がなく、実行ステップも取得できます。
しかし、これには問題があります。つまり、session_write_close() を実行した後は、セッションへの書き込み操作が機能しなくなります。セッションプロセスが終了したためです。
したがって、セッションを再度記述する必要がある場合は、前に session_start() を追加します。
session_start
— 新しいセッションを開始するか、既存のセッションを再開します ##session_write_close
— セッション データを書き込み、セッションを終了します #handle.php 次の変更をクリックして実行ステップを取得します。 #<?php
session_start();
$_SESSION['step'] = '';
$n = 1;
while($n<=10){
$_SESSION['step'] = $n;
session_write_close(); // 将数据写入session文件,并结束session进程
session_start(); // 重新创建session进程
sleep(1);
$n++;
}
$_SESSION['step'] = 'complete';
?>
この記事では、php セッションの読み取り/書き込みロックの内容について説明します。 php中国語ウェブサイトに従ってください。
関連する推奨事項: PHP を使用して水仙の数を最適化する
PHP で ID 番号を確認する方法
##以上がPHPセッションの読み取り/書き込みロックに関する関連コンテンツの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。