我有一个我想要执行的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';
}
Run Code Online (Sandbox Code Playgroud)
但它无法正确检查文件是否存在.如果我用浏览器调用脚本,则会正确创建lock.file(我可以用ftp查看),然后删除.但是,我仍然可以同时多次运行脚本.如果我自己用ftp创建一个lock.file,它就不会执行脚本.我现在一直在寻找几个小时,它能成为什么?也许我很蠢,但我觉得这应该有用,对吧?
编辑:Jep,flock做到了.非常感谢!最终代码:
$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 …Run Code Online (Sandbox Code Playgroud) 我想创建一个函数,通过在PHP中的字符之前添加\来转义elasticsearch特殊字符.Elasticsearch使用的特殊字符是:+ - = && || > <!(){} [] ^"〜*?:\ /
我对正则表达式不是很熟悉,但是我发现了一段代码,它只是删除了特殊的字符,但我更愿意逃避它们,因为它可能是相关的.我使用的代码:
$s_input = 'The next chars should be escaped: + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ / Did it work?';
$search_query = preg_replace('/(\+|\-|\=|\&|\||\!|\(|\)|\{|\}|\[|\]|\^|\"|\~|\*|\<|\>|\?|\:|\\\\)/', '', $s_input);
Run Code Online (Sandbox Code Playgroud)
这输出:
The next chars should be escaped / Did it work
Run Code Online (Sandbox Code Playgroud)
所以有两个问题:这个代码删除了特殊的字符,而我想用它来转义它们\.此外:这段代码没有逃脱\.有谁知道如何逃避Elasticsearch特殊字符?