小编wjh*_*sch的帖子

file_exists似乎无法正常工作

我有一个我想要执行的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 file-permissions file-exists

5
推荐指数
1
解决办法
1886
查看次数

在PHP中转义elasticsearch特殊字符

我想创建一个函数,通过在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特殊字符?

php regex elasticsearch

5
推荐指数
1
解决办法
2909
查看次数