2012-01-11 138 views
0

我有一個php代碼我只想執行一次,也就是說它應該在第一次安裝時加載,第二次不應該執行。我試着用forif的條件,但它不適合我。PHP代碼只能執行一次

這是我的代碼:

$table = self::checkTablesExist(); 

    if(empty($table)) { 
    self::createTables(); 

    self::createRootUser(self::$preflight_config); 
     if(self::$preflight_config->sample_data == 1) { 
      self::installSampleData(); 
     } 
    } 
+0

你能解釋一下你的意思是「應該得到加載時它是第一次安裝「? – 2012-01-11 06:29:58

+0

什麼不行? checkTablesExist()做什麼?它檢測到已經存在的表嗎? – 2012-01-11 06:32:35

+0

將數據填充到數據庫中 checkTableExist方法檢查特定數據庫中是否存在表 – Frankdf 2012-01-11 06:51:07

回答

1

你可以嘗試做類似數據庫鎖的系統。

所以,第一次運行代碼的時候你創建了一個文件run.lock,空了,沒關係,然後在每隔一個執行檢查那個文件的存在,如果存在,代碼已經運行,否則你應該運行代碼。

務必小心,以創建一個永久位置的文件,而不是像/tmp

或者,也許更好,如果存在於DB這些表,不運行的代碼。

+0

否則,您可以爲run.lock文件提供一個可以在創建表時刪除的安裝文件。只有當這個文件存在時才執行你的表格創建代碼。例如。 if(file_exists(「run.lock」)){create tables} – daya 2012-01-11 11:16:11

0

這一切都取決於你想要做什麼,我可以從你的問題看是你想安裝一個mysql數據表...這是正確的,你應該如果表存在檢查..

什麼
<?php 
if (mysql_num_rows("show tables like `tablename`")!==1) { 

    // Install table 

} 
?> 

要是你想基於完全不同的東西,只運行一次代碼,即不依賴一個數據庫上,你會最好使用平面備案:

<?php 
if (file_exists("should-we-run.cfg") && file_get_contents("should-we-run.cfg")=="Y") { 

    // Execute code 
    file_put_contents("should-we-run.cfg","No"); 
    // OR 
    unlink("should-we-run.cfg"); 

} 
?> 
+0

如何在執行任何其他代碼之前計劃創建一個文件「should-we-run.cfg」?創建一個創建該文件的腳本不僅是開銷,而且該腳本可以重新運行以重新創建該文件,所以他的有問題的代碼可以重新運行。 – Paul 2012-01-11 06:37:10

+0

所以翻轉規則,如果文件不存在 - >執行代碼並創建文件(空),並使用file_exists();除非我們談論巨大的性能需求,否則我不會看到開銷問題...然後使用數據庫配置表來確定布爾值索引 – Prof83 2012-01-11 06:43:30