搜索并打开文件

时间:2013-12-23 12:07:08

标签: php file search while-loop timeout

到目前为止,我有一个脚本,它在当前目录中查找指定的文件,如果不存在,它将上一个目录并再次搜索。

如果文件存在,则脚本可以正常工作,但是如果不存在则脚本会在脚本被取消超过30秒后继续运行,即使使用计数器限制执行就行了。

$path = 'log.log';

$file_exists = 0;

$search_count = 0;
$search_limit = 3;

while($file_exists == 0) {
    while($search_count < $search_limit) {
        if(file_exists($path)) {
            $file_exists = 1;
            $search_count = $search_limit + 1;

            $resource = fopen($path, "r");  
            while (!feof($resource)) {
               echo fgetss($resource);
            }
            fclose($resource);
        } else {
            $path = '../'.$path;
            $search_count++;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

while($file_exists == 0)

将是无限的,因为您只在找到文件时将$file_exists设置为1

假设文件不在那里,那么内部循环将只运行三次,但外部循环将无限运行(尽管没有任何可执行语句)

编辑:

您可以将条件合并为

while($file_exists == 0 && $search_count < $search_limit) {

//your entire code

}

答案 1 :(得分:0)

我认为你正在寻找这样的东西:

$path = 'log.log';
$file_exists = false;
$search_count = 0;
$search_limit = 3;

while (!$file_exists and $search_count < $search_limit) {
    if(file_exists($path)) {
        $file_exists = true;
        $resource = fopen($path, "r");
        while (!feof($resource)) {
           echo fgetss($resource);
        }
        fclose($resource);
    } else {
        $path = '../'.$path;
        $search_count++;
    }
}

编辑:如果您刚刚访问了log.log文件的内容,可以使用file_get_contents($path)这样的文件:

...
if(file_exists($path)) {
    $file_exists = true;
    $contents = file_get_contents($path);
    echo $contents;
}
...

查找有关file_get_contents方法here的更多信息。