2011-11-14 26 views
0

即使我重新執行(或重新加載)PHP文件,是否有辦法阻止代碼中的代碼塊或函數運行多次?阻止代碼或函數多次執行

我的意思是,我可以限制某人不止一次執行php腳本嗎?我似乎無法找到辦法做到這一點。

+1

你可以讓PHP文件自己刪除;這確保沒有人可以「重新加載」它。 *保證只運行一次。* –

+0

如果你解釋了爲什麼你想要這個,那麼你會得到一個更好的答案。沒有用戶控制系統,沒有辦法100%可靠。 – 2011-11-14 02:32:03

+0

不,我不只是想刪除該文件。我想這樣做是因爲我有一個php腳本,它將一些數據插入到MySQL數據庫中,並且我不希望多次插入多次數據作爲腳本執行的次數 – user765368

回答

1

我有一個應用程序可以做到這一點。

我們所做的是在db調用的版本中創建一個表,並在其中存儲一個版本號。腳本運行時,它將數據庫中的版本號與php腳本中的版本號進行比較。並執行任何需要將其「升級」到新版本,然後更新數據庫中的版本號。

如果版本表不存在,代碼將創建它並將其標記爲存儲版本零。

2

是的,您可以使用$ _SESSION變量來確定代碼是否已被執行。會話變量將被設置,直到用戶關閉瀏覽器。如果你想進一步擴展它,你可以設置一個cookie。請參閱以下鏈接瞭解更多詳情。

Session Variables

Cookies

+0

您也可以延長session_id cookie的使用期限。 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,那麼不要做任何事情。計數器變量應該是靜態的,以便在多次調用中「記住」。至於確保一個文件只執行一次,只需使用「include_once()」而不是「include()」即可。

+2

這不會阻止代碼在頁面重新加載時被執行。 –

+0

事實上,這不會阻止代碼被執行兩次,因爲每次運行腳本(重新加載php文件)時,您的$ call_counter將被設置爲0 – user765368

+0

如果聲明爲靜態,它只會在第一次設置函數叫做。隨後的調用記住最後一個值。閱讀示例#5 http://php.net/manual/en/language.variables.scope.php –