Добро пожаловать на форум PHP программистов!
За последние 24 часа нас посетили 18916 программистов и 2000 роботов. Сейчас ищут 1068 программистов ...

Basic detection

Вернуться к: Getting started

Basic detection

Basic detection – parse data source with default options

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.23454);
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',   'classes' =>   array (   ),   'extensions' =>   array (     0 => 'bcmath',     1 => 'pcre',   ),   'constants' =>   array (   ),   'tokens' =>   array (   ),   'cond_code' =>   array (     0 => 0,   ), )     

It means that we need at least PHP 4.0.0 to run the "math.php" script. with two PHP extensions

  • bcmath
  • pcre
loaded.

Detection of a directory

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',   'classes' =>   array (     0 => 'File_Find',   ),   'extensions' =>   array (     0 => 'pcre',   ),   'constants' =>   array (     0 => 'FALSE',     1 => 'NULL',     2 => 'PHP_OS',     3 => 'PREG_SPLIT_DELIM_CAPTURE',     4 => 'PREG_SPLIT_NO_EMPTY',     5 => 'TRUE',     6 => '__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',     'classes' =>     array (       0 => 'File_Find',     ),     'extensions' =>     array (       0 => 'pcre',     ),     'constants' =>     array (       0 => 'FALSE',       1 => 'NULL',       2 => 'PREG_SPLIT_DELIM_CAPTURE',       3 => 'PREG_SPLIT_NO_EMPTY',       4 => 'TRUE',     ),     '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',     'classes' =>     array (     ),     'extensions' =>     array (     ),     'constants' =>     array (       0 => 'PHP_OS',       1 => '__FILE__',     ),     'tokens' =>     array (     ),     'cond_code' =>     array (       0 => 0,     ),   ), )     

means that package PEAR::File_Find 1.3.0 need at least PHP 4.3.0 with extension pcre.

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

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));
?>

And you will see in displayed results, something like :

   'cond_code' =>   array (     0 => 4,     1 =>     array (       0 =>       array (       ),       1 =>       array (       ),       2 =>       array (         0 => 'FILE_FIND_DEBUG',       ),     ),     

cond_code offset 1 is an array available only when debug mode is set to true. In this array :

  • offset 0, give name of function conditions

  • offset 1, give name of extension conditions

  • offset 2, give name of constant conditions



Вернуться к: Getting started

© 2025 «PHP.RU — Сообщество PHP-Программистов»
Главная | Форум | Реклама на сайте | Контакты VIP Сувениры
Разработка компании ODware