セッションを使用して、スクリプトが1回の訪問(ユーザーごと)に1回だけ実行されるようにする方法の非常に基本的な例を概説しました。ここで重要な点は、複数のユーザーがシステムを使用している場合でも、スクリプトが複数回実行されることです。
これを回避するには、ローカルデータベースを使用して、スクリプトが最後に実行された日時を追跡します。したがって、最後の「実行」がいつ実行されたかを追跡する日時列をデータベースに含めることができます。
- したがって、PHPコードでは($ _SESSIONをチェックする代わりに)、データベースにクエリを実行して日時値を取得します。
- 最終実行日時を取得したら、現在の日時が許容される「更新時間」(たとえば24時間)を超えているかどうかを確認します。
- 時間が割り当てられた「更新時間」を過ぎた場合、たとえば25時間コードが実行され、日時がnow()に更新されます。
- 時間が割り当てられた時間内であれば、何も起こらず、dbの更新もスクリプトも実行されません。
- 3〜4を繰り返します。
上記の方法では、すべてのチェックが中央のデータセット(つまりデータベース)に対して実行されるため、ユーザーの数は関係ありません。また、ブラウザやユーザーに依存しないため、おそらくもう少し堅牢になります。
とにかくここにセッション(ユーザーごと)メソッドがあります:
<?php
/*
* Set PHP sessions to suit:
*
* session.gc_maxlifetime is the number of seconds after which the data
* will be seen as garbage and cleaned up (session life) -
*
* Set to 86400 to in theory make the session last 24 hours - adjust this
* number to suit.
*
* If this doesn't work you may have to try and adjust the php session lifetime
* in either the php.ini file directly or htaccess file.
*
*/
ini_set('session.gc_maxlifetime',86400);
/*
* not strictly neccessary as this is default setting (but just to make sure)
* This will keep the cookie alive (the link to your session) until the user
* closes their browser.
*
* You could set it to > 86400 if you want that extra bit of certainity that
* the session will get renewed @ 24 hrs / the time you wanted to.
*/
ini_set('session.cookie_lifetime',0);
// Start PHP session
session_start();
// Check if the session is empty / exists (which it will be on first page entry)
if ( empty($_SESSION['hasVisited']) ) {
/*
* Add your ETL script logic here:
*
* This will only run on the first visit to the site
*/
}
// Now set the session as the scripts have run once
$_SESSION['hasVisited'] = true;
// Continue on with your app...................................................
?>
あなたがやろうとしていたことを私が見逃した場合、または何かについてさらに説明が必要な場合は、私に知らせてください。