session_register_shutdown()は、セッションを登録する関数です。 PHPスクリプトが実行される前に、自動的にsession_write_close()を呼び出します。これは、スクリプト実行の最後の段階で、 session_start()が呼び出されるかどうかに関係なく、関数によって登録された書き込み動作が実行されることを意味します。
これにより、ユーザーのセッションが終了するため、ユーザー編集されたコンテンツ、フォームステータス、一時的な設定など、重要なデータをキャプチャして保存する機会が提供されます。
オンラインドキュメントエディターを開発しているとします。ユーザーは、編集中にブラウザまたはネットワークの中断を突然閉じることができます。データの損失を避けるために、出発する前にユーザーのドラフトコンテンツを自動的に保存する必要があります。
各要求に自動保存ロジックを登録し、セッションメカニズムを使用してデータを保持することにより、「一時保存」関数を実装できます。
session_register_shutdown()を使用して自動保存機能を実装する方法を示すために、簡単なエディターページを例として見てみましょう。
サーバーにセッションサポートが有効になっていることを確認し、PHPファイルの開始時にsession_start()を呼び出してください。
<?php
session_start();
次に、 session_register_shutdown()を使用して関数を登録して、現在ユーザーが編集しているコンテンツを保存します。
function autoSaveDraft() {
if (isset($_POST['content'])) {
$_SESSION['autosave'] = $_POST['content'];
file_put_contents('/tmp/autosave_' . session_id() . '.txt', $_POST['content']);
}
}
session_register_shutdown('autoSaveDraft');
ここでは、コンテンツを$ _Sessionに保存するだけでなく、それを一時的なファイル/tmp/ autosave_< session_id> .txtに書き込み、その後の回復もします。
次に、ユーザーが入力できるようにページにシンプルなフォームを作成します。
<form method="POST" action="http://m66.net/editor.php">
<textarea name="content" rows="10" cols="50"><?php echo htmlspecialchars($_SESSION['autosave'] ?? ''); ?></textarea>
<br>
<input type="submit" value="保存">
</form>
フォームが送信されるたびに、コンテンツはセッションに書き込まれ、自動保存メカニズムを介してファイルをファイルし、ユーザーが誤って離れても、ページに戻るときに編集ステータスを復元できるようにします。
ページが再開されたときにユーザーの最後のドラフトを自動的に復元する場合は、ページを読み込むときに次のロジックを追加できます。
if (file_exists('/tmp/autosave_' . session_id() . '.txt')) {
$_SESSION['autosave'] = file_get_contents('/tmp/autosave_' . session_id() . '.txt');
}
これにより、ユーザーは手動で保存することなくシームレスに編集作業を続けることができます。