如何确保我只有一个通过Apache运行的PHP脚本实例?

Ric*_*ich 10 php apache

我有一个index.php脚本,我在Google Code网站上用作提交后的URL.此脚本克隆目录并构建可能需要一些工作的项目.我想避免让这个脚本并行运行多次.

是否有一种机制可以用来避免执行该脚本,如果另一个已经在会话中?

Lon*_*ars 24

您可以使用羊群LOCK_EX获得对文件的独占锁定.

例如:

<?php
$fp = fopen('/tmp/php-commit.lock', 'r+');
if (!flock($fp, LOCK_EX | LOCK_NB)) {
    exit;
}

// ... do stuff

fclose($fp);
?>
Run Code Online (Sandbox Code Playgroud)

对于5.3.2之后的PHP版本,您需要使用flock手动释放锁($ fp,LOCK_UN);

  • 另外,为确保此功能按预期工作,您可能需要将fopen模式更改为:`$ fp = fopen('/ tmp / php-commit.lock','c'); 如果commit.lock文件不存在,使用'r +'将引发PHP错误。 (2认同)