2011-11-14 24 views
0

PHPファイルを再実行(またはリロード)しても、コードブロックまたはコード内の関数が複数回実行されないようにする方法はありますか?コードまたは関数が2回以上実行されないようにする

つまり、誰かがPHPスクリプトの実行を複数回制限することはできますか?私はこれを行う方法を見つけることができないようです。

+1

PHPファイル自体を削除することができます。誰もそれを "リロード"できないようにします。 *一度だけ実行することが保証されています。* –

+0

あなたがこれを望んでいた理由を説明すれば、より良い答えが得られます。ユーザーコントロールシステムを持たずに、100%信頼できる方法はありません。 –

+0

いいえ、ファイルを削除するだけではありません。 MySQLデータベースにデータを挿入するPHPスクリプトがあり、複数のデータをスクリプトが実行された回数だけ挿入したくないため、これが必要です – user765368

答えて

1

私はそれを行うアプリを持っています。

私たちが行ったことは、バージョンと呼ばれるdb内にテーブルを作成し、そこにバージョン番号を格納したことでした。スクリプトが実行されると、データベースのバージョン番号とphpスクリプトのバージョン番号が比較されます。それを新しいバージョンに「アップグレード」するために必要なものを実行し、データベースのバージョン番号を更新します。

バージョンテーブルが存在しない場合、コードはそれを作成し、それをバージョン0を格納するものとしてマークします。

2

はい、$ _SESSION変数を使用して、コードが実行されたかどうかを判断できます。セッション変数は、ユーザーがブラウザを閉じるまで設定されます。これ以上拡張したい場合は、クッキーを設定することができます。詳細については、次のリンクを参照してください。

Session Variables

Cookies

+0

session_idクッキーの有効期間を延長することもできます。 http://stackoverflow.com/questions/8311320/how-to-change-the-session-timeout-in-php – Aloso

2

あなたがセッションを使用している場合は、コードが実行された後、あなたは、ユーザーのセッション配列にフラグを設定することができます

function doSomething(){ 

    if (empty($_SESSION['completed'])){ 
     //Do stuff here if it has not been executed. 
    } 

    $_SESSION['completed'] = TRUE; 
} 

またsesisonをチェックする必要がありますタスクが以前に実行されたかどうかを確認します。これは、ユーザーがセッションCookieを受け入れることができることを前提としています。

+1

これは、 '$ php thescript.php'を介してコマンドラインで繰り返し呼び出しが行われることを防ぎません。繰り返し機能OPの質問はちょうど*非常に*不明です。 –

1

関数にカウンタを入れるだけです。カウンタが0より大きい場合は、何もしないでください。カウンタ変数は静的である必要があり、複数の呼び出しで「記憶」されます。必ずファイルを作るためのよう

function sample() { 
    static $call_counter = 0; 
    if ($call_counter>0) { 
     return; 
    } 
    ... 
    $call_counter++; 
} 

はばかりの代わりに、「()のinclude_once」は「は、()」を使用し、一度に実行されます。

+2

これは、ページがリロードされたときにコードが実行されることを防止しません。 –

+0

実際には、スクリプトを実行するたびに(PHPファイルをリロードする)、$ call_counterは0に設定されるので、コードが2回実行されるのを防ぐことはできません。 – user765368

+0

静的宣言された場合、が呼び出されます。後続の呼び出しは最後の値を記憶します。例5を読んでください。http://php.net/manual/en/language.variables.scope.php –

関連する問題