In most case, the basic detection is enough. But sometimes, we will need to adjust accuracy of parser to give the best result. It is possible with $option, the second parameter of each parser method. See parser options list for details.
Suppose we have to detect which PHP version we need to run this script named "math.php"
<?php $nb = bcsub(1.234, 5, 4); if (preg_match('/^-/', $nb)) { echo 'minus'; } ?> |
We will use this very simple detection script.
<?php require_once 'PHP/CompatInfo.php'; $source = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'math.php'; $info = new PHP_CompatInfo(); $info->parseFile($source); // you may also use unified method: $info->parseData($source); ?> |
Default output used the Array renderer (we will talk about it and other renderers later; don't be afraid if you don't know what is it yet). Here are the raw results we got on standard output :
array ( 'ignored_files' => array ( ), 'ignored_functions' => array ( ), 'ignored_extensions' => array ( ), 'ignored_constants' => array ( ), 'max_version' => '', 'version' => '4.0.0', 'extensions' => array ( 0 => 'bcmath', 1 => 'pcre', ), 'constants' => array ( ), 'tokens' => array ( ), 'cond_code' => array ( 0 => 0, ), ) |
Rather than parsing file after file of an application, you my give the root of your application path as the main directory to parse. Default is recursive parsing: that mean each directory children will be also parsed. And only files with extension php, php4, inc, phtml will be proceed.
Suppose we have to detect which PHP version we need to run the PEAR::File_Find package release 1.3.0
First begin to download the archive from http://pear.php.net/package/File_Find/download/1.3.0 and extract the full contents to a temporary directory (in our example its '/tmp')
We will use this very simple detection script.
<?php require_once 'PHP/CompatInfo.php'; $source = '/tmp/File_Find-1.3.0'; $info = new PHP_CompatInfo(); $info->parseDir($source); // you may also use unified method: $info->parseData($source); ?> |
Results displayed:
array ( 'ignored_files' => array ( 0 => '/tmp/File_Find-1.3.0/package.xml', 1 => '/tmp/File_Find-1.3.0/tests/01glob.phpt', 2 => '/tmp/File_Find-1.3.0/tests/02maptree.phpt', 3 => '/tmp/File_Find-1.3.0/tests/03maptreemultiple.phpt', 4 => '/tmp/File_Find-1.3.0/tests/04search.phpt', 5 => '/tmp/File_Find-1.3.0/tests/05search_inside.phpt', 6 => '/tmp/File_Find-1.3.0/tests/06match_shell.phpt', 7 => '/tmp/File_Find-1.3.0/tests/bug2773.phpt', ), 'ignored_functions' => array ( ), 'ignored_extensions' => array ( ), 'ignored_constants' => array ( ), 'max_version' => '', 'version' => '4.3.0', 'extensions' => array ( 0 => 'pcre', ), 'constants' => array ( 0 => '__FILE__', ), 'tokens' => array ( ), 'cond_code' => array ( 0 => 4, ), '/tmp/File_Find-1.3.0/Find.php' => array ( 'ignored_functions' => array ( ), 'ignored_extensions' => array ( ), 'ignored_constants' => array ( ), 'max_version' => '', 'version' => '4.3.0', 'extensions' => array ( 0 => 'pcre', ), 'constants' => array ( ), 'tokens' => array ( ), 'cond_code' => array ( 0 => 4, ), ), '/tmp/File_Find-1.3.0/tests/setup.php' => array ( 'ignored_functions' => array ( ), 'ignored_extensions' => array ( ), 'ignored_constants' => array ( ), 'max_version' => '', 'version' => '4.0.0', 'extensions' => array ( ), 'constants' => array ( 0 => '__FILE__', ), 'tokens' => array ( ), 'cond_code' => array ( 0 => 0, ), ), ) |
Caution |
cond_cond offset 0 is set to 4. That means there are conditional code (constant condition) implemented in source code (with php defined function). If you have a look on source code, you will see that all conditions referred to private package constant FILE_FIND_DEBUG |
Tip: You may avoid to read the source code to know the constant name, if you specify the debug option when parsing the directory.
<?php require_once 'PHP/CompatInfo.php'; $source = '/tmp/File_Find-1.3.0'; $info = new PHP_CompatInfo(); $info->parseDir($source, array('debug' => true)); ?>
'cond_code' => array ( 0 => 4, 1 => array ( 0 => array ( ), 1 => array ( ), 2 => array ( 0 => 'FILE_FIND_DEBUG', ), ), |
offset 0, give name of function conditions
offset 1, give name of extension conditions
offset 2, give name of constant conditions