One project I occassionally hack on is Xerte Toolkits.
Yesterday on the mailing list it came up that someone was trying to use XOT with PHP4.
After getting over some initial shock that people still use PHP4 (it was end-of-lifed in August 2008) I wondered how easy it would be to check the status of a code base to find how incompatible with PHP4 it now is.
My initial thought was to find a list of functions which had been added with PHP5 and then just grep the code for them, but it turns out there is a much nicer approach – PHP_CompatInfo
Installation was fairly straight forward – like :
pear channel-discover bartlett.laurent-laville.org
pear install bartlett/PHP_CompatInfo
Annoyingly the documentation seemed well hidden – but once I found it (http://php5.laurent-laville.org/compatinfo/manual/2.3/en/index.html#_documentation) it was pretty easy to use, and the ‘phpci’ command did all I needed –
Examples :
1. List global variables in use :
$ phpci print --reference PHP5 --report global -R . 436 / 436 [+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>] 100.00% BASE: /home/david/src/XOT/trunk ------------------------------------------------------------------------------- PHP COMPAT INFO GLOBAL SUMMARY ------------------------------------------------------------------------------- GLOBAL VERSION COUNT ------------------------------------------------------------------------------- $_GET 4.1.0 1 data $_GET 4.1.0 2 debug $_GET 4.1.0 2 export $_GET 4.1.0 2 file $_GET 4.1.0 1 firstname $_GET 4.1.0 1 ....
2. Find all PHP5 functions in use :
$ phpci print --report function -R . | grep 5. 436 / 436 [+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>] 100.00% spl_autoload_register SPL 5.1.2 1 simplexml_load_file SimpleXML 5.0.0 1 iconv_set_encoding iconv 4.0.5 1 iconv_strlen iconv 5.0.0 10 iconv_strpos iconv 5.0.0 38 iconv_strrpos iconv 5.0.0 3 iconv_substr iconv 5.0.0 33 dirname standard 4.0.0 53 fclose standard 4.0.0 51 file_put_contents standard 5.0.0 6 fopen standard 4.0.0 55 fread standard 4.0.0 57 fwrite standard 4.0.0 50 htmlentities standard 5.2.3 1 md5 standard 4.0.0 1 scandir standard 5.0.0 1 str_split standard 5.0.0 3 REQUIRED PHP 5.2.3 (MIN) Time: 0 seconds, Memory: 28.25Mb
and finally,
3. Class usage :
$ phpci print --report class -R . | grep 5. 436 / 436 [+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>] 100.00% Exception SPL 5.1.0 1 InvalidArgumentException SPL 5.1.0 2 REQUIRED PHP 5.1.0 (MIN)
4. All class usage :
i.e. without me grep’ping the results.
$ phpci print --report class -R . 436 / 436 [+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>] 100.00% BASE: /home/david/src/XOT/trunk ------------------------------------------------------------------------------- PHP COMPAT INFO CLASS SUMMARY ------------------------------------------------------------------------------- CLASS EXTENSION VERSION COUNT ------------------------------------------------------------------------------- Exception SPL 5.1.0 1 InvalidArgumentException SPL 5.1.0 2 PHP_CompatInfo 4.0.0 1 Snoopy 4.0.0 2 StdClass 4.0.0 2 Xerte_Authentication_Abstract 4.0.0 6 Xerte_Authentication_Factory 4.0.0 4 Xerte_Authentication_Guest 4.0.0 1 Xerte_Authentication_Ldap 4.0.0 1 Xerte_Authentication_Moodle 4.0.0 1 Xerte_Authentication_Static 4.0.0 1 Xerte_Authetication_Db 4.0.0 1 Zend_Exception 4.0.0 2 Zend_Locale 4.0.0 7 Zend_Locale_Data 4.0.0 19 Zend_Locale_Data_Translation 4.0.0 6 Zend_Locale_Exception 4.0.0 28 Zend_Locale_Format 4.0.0 3 Zend_Locale_Math 4.0.0 14 Zend_Locale_Math_Exception 4.0.0 9 Zend_Locale_Math_PhpMath 4.0.0 11 archive 4.0.0 3 bzip_file 4.0.0 1 dUnzip2 4.0.0 3 gzip_file 4.0.0 1 tar_file 4.0.0 3 toolkits_session_handler 4.0.0 1 zip_file 4.0.0 2 ------------------------------------------------------------------------------- A TOTAL OF 28 CLASS(S) WERE FOUND REQUIRED PHP 5.1.0 (MIN) ------------------------------------------------------------------------------- Time: 0 seconds, Memory: 27.50Mb -------------------------------------------------------------------------------
Which answers my question(s) and so on.
Hello David,
Nice article, but you should upgrade your post.
You probably din’t noticed it but since version 2.9.0 you can use a filter results system rather than use the grep linux command.
Example:
phpci print –report class -R –filter-version php_5 .
Replaced
phpci print –report class -R . | grep 5.
And so on. Check documentation at
http://php5.laurent-laville.org/compatinfo/manual/current/en/command-line.html
Using the “current” branch you will have the latest doc available, even if previous version are kept and available to direct reading.
There is also a better optimization in parsing loop since I used a new progress bar (since 2.12)
Don’t missed all these new features !
Regards,
Hello David,
I would like today to fix an error in my previous comment.
Link http://php5.laurent-laville.org/compatinfo/manual/current/en/command-line.html is only valid until version 2.26
And now, because the documentation was changed (a lot), the command line interface is located, since version 3.2 at URL http://php5.laurent-laville.org/compatinfo/manual/current/en/user-guide–commands.html
Merry Christmas
Hi Laurent — Thank you 🙂
A new major version 4.0 (API centric) is available.
As always the latest version is documented at URL http://php5.laurent-laville.org/compatinfo/manual/current/en/
And each minor version as its own doc URL. E.g:
v3.7 is at http://php5.laurent-laville.org/compatinfo/manual/3.7/en
v2.26 is at http://php5.laurent-laville.org/compatinfo/manual/2.26/en
php-compatinfo has evolved since your post David, but thanks (again) to wrote it !