我遇到一个PHP打印语句的问题,它会连续重复输出大约40或50次,然后停止。我以为它应该只打印一行。我对PHP仍然有点新,所以我不明白我做错了什么。相关代码位于代码段的底部。
提前致谢.....
<?php
$query = $_POST['query'];
find_files('.');
function find_files($seed) {
if(! is_dir($seed)) return false;
$files = array();
$dirs = array($seed);
while(NULL !== ($dir = array_pop($dirs))) {
if($dh = opendir($dir)) {
while( false !== ($file = readdir($dh))) {
if($file == '.' || $file == '..') continue;
$path = $dir . '/' . $file;
if(is_dir($path)) {
$dirs[] = $path;
} else {
if(preg_match('/^.*\.(php[\d]?|js|txt)$/i', $path)) {
check_files($path);
}
}
}
closedir($dh);
}
}
}
function check_files($this_file) {
$query = $_POST['query'];
$str_to_find = $query;
if ((isset($str_to_find)) && (empty($str_to_find))) {
print '<p>Your search produced no results</p>';
} else {
if(!($content = file_get_contents($this_file))) {
echo("<p>Could not check $this_file</p>\n");
} else {
if(stristr($content, $str_to_find)) {
echo("<p>$this_file -> contains $str_to_find</p>\n");
}
}
unset($content);
}
}
?>
答案 0 :(得分:2)
&#39;您的搜索没有产生任何结果&#39;将为您的循环看到的每个文件打印一次。您应该在致电find_files()
之前进行检查:
if (!isset($str_to_find) || empty($str_to_find)) {
print '<p>Your search produced no results</p>';
} else {
find_files('.');
}
然后,您可以从check_files()
删除该位代码。
答案 1 :(得分:0)
您在check_files()
函数内部有print语句,该函数是从while...
循环内部调用的。所以,是的,它会在每次循环执行且条件匹配时执行。
答案 2 :(得分:0)
!==
你可能意味着!=
?