2011-12-19 73 views
5

我一直在給PHP程序工作。然而,這個計劃多年來一直由幾個不同的人開展。隨着時間的推移,事物已被刪除並添加。但大部分文件仍然存在。分析一個PHP程序

我想知道是有一個工具,在那裏,可以分析一個PHP程序。例如餵它index.php,這個工具將檢查並看到女巫文件被調用和使用,所以我可以刪除所有不再使用的死木頭。

我打算寫我自己,但其他人可能已經做了這樣的事情。

歡迎任何建議,Thx! Mike

+1

PHP不適合這種分析,因爲它允許你編寫include $ _GET ['file']'。並不是說你應該做這樣的事情,但這意味着它不可能涵蓋所有可能包含文件的情況...... – deceze 2011-12-19 07:59:56

+2

這條路線已經成熟,有誤報。您可以使用源分析器查找文件名交叉引用的概述。捕捉動態的確定性是非常困難的。但是,您可以使用http://pecl.php.net/package/inclued可靠地確定實際包含的文件。和[PHP Depend和其他](http://stackoverflow.com/questions/4156157/tool-for-php-code-analysis)可能會提供更多有用的列表。 – mario 2011-12-19 08:06:23

回答

1

你有幾個選項,一個使用xdebug和基本上調試你的應用程序,而你正在逐步通過你會發現正在使用的文件。

另一個是蠻力:))開始刪除文件逐一檢查應用程序是否壞掉與否。如果有很多要測試的話,這可能需要一段時間。

如果你正在尋找一個應用程序,搜索相關性檢查,有使用這些應用程式還挺向服務之間的檢查依賴,像亞馬遜軍團。

+0

我會嘗試xdebug看看有什麼。蠻力並不是真正的選擇,其程序的大小和選項的數量都是可以選擇的。這將需要永遠。 – 2011-12-19 08:04:01

+0

它是一個調試工具,您可以輕鬆地進出文件和類。 – DarthVader 2011-12-19 08:05:00

3

正如deceze提到你不能保證找到所有被引用的文件,因爲它們可能依賴於用戶輸入。然而,最簡單的方法是使用grep工具(如果這是您的平臺,那麼可以下載一個「windows grep」應用程序),並查找所有出現的「include」和「require」。如果您遇到欺騙(包含或需要後跟變量名稱)的情況,則該文件需要手動檢查,但如果指定了文件名,則可以將其添加到「使用的列表」中。

也許不是最有效的解決方案,但快速直觀。

+0

讓我試一試,沒關係,如果它不是100%準確的,如果我能得到所有死代碼的90%,它仍然是一個很大的改進。 – 2011-12-19 08:19:59

+0

這裏的一個大問題是關注自動加載器。 – pinkgothic 2011-12-19 16:26:15

1

你可以得到它通過調用get_included_files()函數包含的所有文件的數組。您可以使用以下代碼附加每個文件,這會將所有包含的文件寫入「included.php」中的數組,最簡單的方法是使用auto_append_file。接下來,點擊整個應用程序。當你完成所有包含的文件將在included.php,所以你可以發現哪些文件沒有實際使用。

<?php 
function writeIncludes(array $includes) { 
    $filename = __DIR__ . '/included.php'; 

    $output = "<?php\nreturn "; 
    if(file_exists($filename)) { 
    $files = include($filename); 
    } 
    else { 
    $files = array(); 
    } 

    $files = array_merge($files, $includes); 
    $output .= var_export($files, true); 

    file_put_contents($filename, $output); 
} 

writeIncludes(get_included_files()); 

當然,這個腳本是不是比你現在sitation調試其他有用的,但它應該讓你和運行速度不夠快。它可能很醜,但它會完成它的工作。