2014-03-06 62 views
0

我該如何繼續寫一個程序來查找我的所有php文件的第一行或第二行是否包含N個以上的字符?我想顯示的文件名和行的查找所有php文件的第一行或第二行有N個以上的字符

我能夠通過文件,此去文件中的內容:

<html><head><title>Find String</title></head><body> 
    <?php 
    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]?)$/i', $path)) { check_files($path); }} 
       } 
       closedir($dh); 
      } 
     } 
    } 

    function check_files($this_file){ 

     if(!($content = file_get_contents($this_file))) 
     { echo("<p>Could not check $this_file You should check the contents manually!</p>\n"); } 
     else 
     { 
      // What to do here?? 
     } 
     unset($content); 
    } 
    ?> 
</body></html> 
+0

這是一個現實世界的需求? :-) – 2014-03-06 19:11:31

+0

@Dagon你是什麼意思?我已經在我的PHP文件中注入了代碼,並且通常將內容注入第一行或第二行... –

+2

@HommerSmith您不知道還有哪些內容已被注入或更改,也不知道在哪裏。唯一明智的做法是刪除所有內容並從乾淨的備份中恢復。之後,修補軟件以關閉攻擊所在的洞。 – Sammitch

回答

0

我會的意見去從備份中恢復,也找出並消除漏洞。但是,爲了回答這個問題:

foreach(glob('path/*.php') as $file) { 
    $lines = file($file); 

    if(strlen($lines[0]) > $N) { 
     echo "$file : line 1 : {$line[0]}\n"; 
    } 
    elseif(strlen($lines[1]) > $N) { 
     echo "$file : line 2 : {$line[1]}\n"; 
    } 
} 

有從昨天一個類似的問題:Find php files with strings that have more than 50 characters有同樣的問題。

+0

如何以更性感的方式做到這一點的Linux腳本? 我還不知道,但我很確定「發現」可以做這樣的事情。 –

+0

是的,檢查OP的其他問題的鏈接。 – AbraCadaver

相關問題