スクリプトの他のインスタンスがまだ実行されていない場合にのみ、実行したいphpスクリプトがあります。私はこのコードを持っています:
$lockfile = __DIR__.'/lock.file';
if(file_exists($lockfile) == false)
{
echo 'no lockfile. Job will execute.';
$handle = fopen($lockfile, 'x') or die('Cannot open file: '.$lockfile);
$data = 'This is the lockfile';
fwrite($handle, $data);
fclose($lockfile);
createLinks();
unlink($lockfile);
}
else
{
echo 'Lockfile present, job will not execute. Please try again later';
}
ただし、ファイルが存在するかどうかは正しくチェックされません。ブラウザでスクリプトを呼び出すと、lock.file が正しく作成され (ftp で表示できます)、その後削除されます。ただし、スクリプトを同時に複数回実行することはできます。自分で ftp を使用して lock.file を作成すると、スクリプトが実行されません。私は何時間も探していましたが、それは何でしょうか? 多分私は愚かですが、これはうまくいくと思いますよね?
編集:ジェップ、群れがやった. どうもありがとう!最終的なコード:
$lockfile = __DIR__.'/lock.file';
$handle = fopen($lockfile, "x");
if(flock($handle, LOCK_EX))
{
echo 'no lockfile. Job will execute.';
$data = 'This is the lockfile';
fwrite($handle, $data);
createLinks();
fclose($lockfile);
unlink($lockfile);
}
else
{
echo 'Lockfile present, job will not execute. Please try again later';
}