2012-01-11 144 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