2013-11-26 79 views
4

我是一名初級程序員,在那裏工作。我們的網站是用PHP 4編寫的。我們正在從PHP 4遷移到PHP 5.3。大約595個目錄中大約有5000個PHP文件。所以,如你所想,這個項目的範圍非常大。爲什麼PHP CodeSniffer凍結?

我們使用Subversion進行版本控制。我有兩個單獨的結賬。我有兩個虛擬機作爲獨立的虛擬主機 - 一個堆棧模擬我們的實際網絡服務器(CentOS 4,PHP4等),另一個是PHP 5.3堆棧(Ubuntu 12.04 LTS)。

我花時間來檢查使用以下命令基本語法錯誤的文件:

編輯:我跑了下面的遞歸搜索從網站的根。

find ./ -type f -name \*.php -exec php -l {} \; < ~/php5_basic_syntax_assessment.txt 
find ./ -type f -name \*.inc -exec php -l {} \; < ~/php5_basic_syntax_inc_assessment.txt 

我認識到,使用PHP -l來檢查基本語法不揭示棄用代碼的結構/功能,並且不提供警告(IE:使用preg_slice()而不是切片())。因此,我決定安裝PHP CodeSniffer。

首先,我安裝了PEAR:[我接受所有的默認參數]

cd ~/ 
mkdir pear 
cd pear 
wget http://pear.php.net/go-pear.phar 
php go-pear.phar 

接下來,我安裝的git:

cd ~/ 
sudo apt-get update 
sudo apt-get install git 

接下來,我安裝了PHP代碼嗅探器

pear install PHP_CodeSniffer 

最後,我爲PHP代碼嗅探器安裝了以下PHP 5.3兼容性標準:

git clone git://github.com/wimg/PHP53Compat_CodeSniffer.git PHP53Compatibility 

我做了以上所有的事情,以便我可以以自動方式評估5K PHP文件。通過每個文件來確保他們手動遵循PHP 5.3編碼標準是非常繁瑣和耗時的。

最後,這裏是我用來運行PHP代碼嗅探器的命令:

phpcs --standard=/home/my_user_name/PHP53Compatibility -p --report-file=/home/my_user_name/php53_assessment.txt /path/to/web/root 

爲了確保特定的標準都沒有問題,我也使用默認的標準跑PHP代碼嗅探器:

phpcs -p --report-file=/home/my_user_name/php53_assessment.txt /path/to/web/root 

無論哪種方式,報告凍結在同一個地方。我已經醒了超過24小時。我等了18個小時,然後用CTRL + C停止第一次運行。第二場比賽還在進行中,已經跑了大約一個半小時。

那麼,是什麼導致我的PHP代碼嗅探器凍結?

所有幫助非常感謝。

+0

CodeSniffer有非常糟糕的表現。你知道你的5000個文件中有多少個LOC?文件的數量與它們的大小無關。 – EkoostikMartin

+0

某些文件非常大。但是,在詳細模式下運行標準後,我瞭解到所有文件都與標準進行了比較。我們的Web目錄中有很多種文件(圖片,pdf和其他類型的二進制文件)。 CodeSniffer並不僅僅檢查具有PHP的文件,而是將結構中的所有文件與指定的編碼標準進行比較。二進制文件導致CodeSniffer停止工作。因此,在查看了GitHub文檔之後,我將擴展開關添加到了命令中,以指導CodeSniffer只檢查php和inc文件。 – dqfan2012

+0

對於許多文件,您可能還想使用當前的測試版(1.5.0RC4),因爲它包含對報告系統的完整重寫,以節省大量內存。支票的整體表現將基於您使用什麼樣的嗅探以及他們在每個文件上做了多少工作,因此我無法評論所花費的時間。但我可以告訴你,PHPCS默認只檢查PHP文件。二進制文件肯定會被忽略,除非它們碰巧有.php,.inc,.css或.js擴展名。您可以使用-v命令行參數確認文件列表。 –

回答

2

位遲了,但我遇到了同樣的問題。限制文件只是PHP文件應該做的伎倆:phpcs -p -- ./**/*.php