2012-09-13 57 views
7

PHP文件中的空白有時會出現問題,所以我試圖找到符合常見問題標準的文件。我試圖找到所有具有以下一個或兩個條件的遞歸文件:查找空白注入PHP文件

1)不以<#字符開頭。

和/或

2)不以>字符結尾,除非它在結束之後是換行的任何量的接近支架。

我認爲,第一個條件是:$[^<#]

我認爲,第二個條件是:[ [^>^] | [}\n*^]]

但是,請注意,我天真的正則表達式$^代表的開始和結束文件,而不是文件中的任何行。即使這些,假設他們是正確的,我將如何結合他們呢?像這樣?

[$[^<#]] | [[ [^>^] | [}\n*^]]] 

然後,他們將在grep的:

grep -r [$[^<#]] | [[ [^>^] | [}\n*^]]] * 

很顯然,這是行不通的(TM)。有人能教我如何糾正錯誤嗎?謝謝。

這是一個很好的文件:

<?php 

?> 

所以是這樣的:

<?php 
function someFunc(){ 
} 


‏ 

而且這也很好:

#!/usr/bin/php -q 
<?php 
?> 

領先的HTML是好的:

<html> 
<?php 
echo '</html>'; 
?> 

尾隨HTML是罰款太:

<?php 
echo '<html>'; 
?> 
</html> 

這是不好的(領導換行符):

‏ 
<?php 

?> 

這是太糟糕(前導空格):

‏ <?php 

?> 

這是壞(尾隨換行符):

<?php 

?> 
‏ 
+0

避免這個問題最簡單的方法之一就是在文件末尾不要包含關閉'?>'。這是有效的PHP,並且包含在許多主流PHP編碼標準中,包括PEAR編碼標準。用'?>'結尾的文件是要求麻煩的。 –

+0

你可能會考慮一個想法:打開輸出緩衝,include()這個文件,看看它包含它的輸出是否有前/後空格。 –

+0

謝謝弗蘭克。然而,以'?>'結尾的文件是有效的PHP文件,不會觸發錯誤,並且非常常見。我不會和其他開發者討論這個主題,並改變他們的編碼風格,我只是想自動爲我找到有問題的文件。 – dotancohen

回答

2

拋出一個真正快速的表達,我認爲做你想做的事情。這裏很晚,出於某種原因,我在使用stackoverflow。無論如何,我希望我的要求正確。

試試這個正則表達式/\A(?:\s+.*>|[^<#].*>\s*|<.*>\s+)\Z/s。在這裏解釋:http://regex101.com/r/cT7eY5

我希望這能幫上忙。如果我以任何方式誤解了你,請澄清,我會嘗試調整表達方式。

+0

謝謝。它確實需要很多工作,但是這讓我朝着正確的方向發展,我認爲。它在這裏也晚了! – dotancohen

+0

我忘記了這個表達式工作所必需的's'-flag。如果你以前沒有使用它,請確保你現在就使用它。 –

+0

謝謝Lindrian。回到這裏,在我看來,'\ A'與我的grep版本(Debian派生髮行版中的2.9)中的文件的開始處不匹配。 '\ A'實際上是否匹配系統上文件的開頭?哪個系統?謝謝。 – dotancohen