2011-11-14 27 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 –