PHP 5.4 sprawdzanie kompatybilności kodu

Mamy aplikację napisaną w starym klimacie i chcemy przejść na php 5.4 a nie jesteśmy pewni czy wszystko będzie działać poprawnie? Ręcznie sprawdzać co jest grane to przy większej ilości kodu proszenie się o problemy, dlatego fajnie zautomatyzować proces.

Opcja 1

Wykorzystać crawler’a i przeglądać logi z błędami. Jasne, zadziała zakładając, że mamy dobrego crawler’a (trzeba pamiętać o obsłudze JS’a, jeżeli crawl’er jest napisany w php to musimy się pobawić  SpiderMonkey – opis biblioteki znajdziecie na DevZone)

Opcja 2

Za pomocą pear’a instalujemy sobie PHP_CodeSniffer. Po poprawnej instalacji musimy odszukać katalog, w którym zainstalował się CodeSniffer, u mnie wygląda to tak:

ls -l `php-config –prefix`/lib/php/PHP/CodeSniffer

Za pomocą komendy php-config –prefix uzyskujemy katalog w którym znajdują się źródła PHP.

Output powyższej komendy na moim latopie:

13:43:12-paramah@lobo:~$ ls -l `php-config --prefix`/lib/php/PHP/CodeSniffer
total 336
-rw-r--r-- 1 root admin 26715 1 lip 04:06 CLI.php
drwxr-xr-x 13 root admin 442 1 lip 04:06 CommentParser
drwxr-xr-x 5 root admin 170 1 lip 04:06 DocGenerators
-rw-r--r-- 1 root admin 1009 1 lip 04:06 Exception.php
-rw-r--r-- 1 root admin 101016 1 lip 04:06 File.php
-rw-r--r-- 1 root admin 1433 1 lip 04:06 MultiFileSniff.php
-rw-r--r-- 1 root admin 1443 1 lip 04:06 Report.php
-rw-r--r-- 1 root admin 7712 1 lip 04:06 Reporting.php
drwxr-xr-x 13 root admin 442 1 lip 04:06 Reports
-rw-r--r-- 1 root admin 3074 1 lip 04:06 Sniff.php
drwxr-xr-x 13 root admin 442 9 sie 13:06 Standards
drwxr-xr-x 5 root admin 170 1 lip 04:06 Tokenizers
-rw-r--r-- 1 root admin 15821 1 lip 04:06 Tokens.php

Katalog z CodeSniffer’em jest dla nas o tyle istotny, bo musimy dograć do niego wzór standardu kodowania, na którym nam zależy. Standard o którym mowa znajdziecie na GitHub. Klonujemy repozytorium do katalogu Standards:

13:43:17-paramah@lobo:~$ ls -l `php-config --prefix`/lib/php/PHP/CodeSniffer/Standards
total 112
-rw-r--r-- 1 root admin 35839 1 lip 04:06 AbstractPatternSniff.php
-rw-r--r-- 1 root admin 6472 1 lip 04:06 AbstractScopeSniff.php
-rw-r--r-- 1 root admin 7976 1 lip 04:06 AbstractVariableSniff.php
drwxr-xr-x 5 root admin 170 1 lip 04:06 Generic
-rw-r--r-- 1 root admin 1090 1 lip 04:06 IncorrectPatternException.php
drwxr-xr-x 4 root admin 136 1 lip 04:06 MySource
drwxr-xr-x 5 root admin 170 1 lip 04:06 PEAR
drwxr-xr-x 3 root admin 102 1 lip 04:06 PHPCS
drwxr-xr-x 6 root admin 204 9 sie 13:06 <span style="color: #008000;">PHPCompatibility</span>
drwxr-xr-x 5 root admin 170 1 lip 04:06 Squiz
drwxr-xr-x 4 root admin 136 1 lip 04:06 Zend

Po wszystkim powinno to wyglądać tak jak powyżej ;-)

Teraz prosta komenda:

phpcs –standard=PHPCompatibility <ścieżka_do_kodu> –report-file=report.txt

Po chwili (w przypadku dużej ilości kodu może to potrwać deko długo) otrzymamy raport z  przeprowadzonego testu, wszystkie informacje będą się znajdować w pliku określonym przez parametr –report-file