2013-11-26 80 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