2012-02-24 23 views
0

約40〜50回連続して出力を繰り返して停止するPHP印刷ステートメントに問題があります。私はそれが1行だけを印刷することになっていたと思った。私はまだPHPに少し新しかったので、私が間違っていることを理解していません。問題のコードはスニペットの一番下にあります。事前に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

それは繰り返されている 'あなたの検索結果は生成されませんでしたか? – spencercw

+0

はい、これは間違いです –

+0

おそらく、あなたはCheckfilesを繰り返し呼び出すことになります(spencercwのヒント)? - > check_files($ path);それはwhile()ループにあるので、セクションがループするたびに出力されます。 – user978122

答えて

2

「あなたの検索が何の結果を生じなかったが」あなたのループが見ているすべてのファイルに対して一度にプリントアウトされます。あなたがfind_files()を呼び出す前に、あなたがチェックを実行する必要があります。

if (!isset($str_to_find) || empty($str_to_find)) { 
    print '<p>Your search produced no results</p>'; 
} else { 
    find_files('.'); 
} 

その後、check_files()からのコードのそのビットを削除することができます。

+0

spencercw ......このお手上げに感謝します。非常にいい仕事 –

0

while...ループ内から呼び出されているcheck_files()関数内にprintステートメントがあります。つまり、ループが実行され条件が一致するたびに実行されます。

0

!==おそらく!=を意味しますか?

+0

'==='は単に '正確に等しい'を意味し、文字列をintに変換するようなことはしません。通常、 '==='と '!=='を使うのは良い考えです。 – spencercw

関連する問題