文字

Example that implements inclued into an application

This example demonstrates the process of implementing inclued into an existing application, and viewing the results.

Example #1 Getting the data within the PHP application itself (function)

<?php
// File to store the inclued information
$fp  fopen ( '/tmp/wp.ser' 'w' );
if (
$fp ) {
    
$clue  inclued_get_data ();
    if (
$clue ) {
        
fwrite ( $fp serialize ( $clue ));
    }
    
fclose ( $fp );
}
?>

Now that some data exists, it's time to make sense of it in the form of a graph. The inclued extension includes a PHP file named gengraph.php that creates a dot file that requires the » graphviz library. However, this form is not required.

Example #2 Example use of gengraph.php

This example creates an image named inclued.png that shows the inclued data.

# First, create the dot file
$ php gengraph.php -i /tmp/wp.ser -o wp.dot# Next, create the image
$ dot -Tpng -o inclued.png wp.dot

Example #3 Listing data via inclued dumps (configuration)

When using the inclued.dumpdir directive, files (include clues) are dumped with every request. Here's one way to list those files, and unserialize() them.

<?php
$path 
ini_get ( 'inclued.dumpdir' );
if (
$path  &&  is_dir ( $path )) {

    echo 
"Path:  $path " PHP_EOL ;

    
$inclues  = new  GlobIterator ( $path  DIRECTORY_SEPARATOR  'inclued*' );

    if (
$inclues -> count () ===  0 ) {
        echo 
'No clues today' PHP_EOL ;
        exit;
    }

    foreach (
$inclues  as  $inclue ) {

        echo 
'Inclued file: ' $inclue -> getFilename (),  PHP_EOL ;

        
$data  file_get_contents ( $inclue -> getPathname ());
        if (
$data ) {
            
$inc  unserialize ( $data );
            echo 
' -- filename: ' $inc [ 'request' ][ 'SCRIPT_FILENAME' ],  PHP_EOL ;
            echo 
' -- number of includes: ' count ( $inc [ 'includes' ]),  PHP_EOL ;
        }
        echo 
PHP_EOL ;
    }
} else {
    echo 
'I am totally clueless today.' PHP_EOL ;
}
?>

以上例程的输出类似于:

PATH: /tmp/inclued
Inclued file: inclued.56521.1
 -- filename: /Users/philip/test.php
 -- number of includes: 1Inclued file: inclued.56563.1
 -- filename: /tmp/none.php
 -- number of includes: 0Inclued file: inclued.56636.1
 -- filename: /tmp/three.php
 -- number of includes: 3

用户评论:

[#1] g dot kuizinas at anuary dot com [2013-03-06 23:54:24]

If you install the module and execute it via CLI it will not produce any errors when not enabled. It took me quite a bit of time until I realised that by default the module is disabled, http://www.php.net/manual/en/inclued.configuration.php.

[#2] gtisza at gmail dot com [2012-08-03 15:07:24]

Note that inclued does not work correctly when xdebug is enabled (the includes array remains empty; consequently, graphing the classes works but graphing the files does not). Bug report: https://bugs.php.net/bug.php?id=59419

[#3] admin at eexit dot net [2010-08-05 08:14:34]

The new gengraph.php has ? -t ? parameter set to ? includes ? by default. Don't forget to specify it to ? classes ? for most of all projects.

Since PHP 5.3, namespace operators are stripped by Graphiz when the graph is generated. Add the following tips to escape namespace operators:

<?php
// Around line 254
else  
{
    
$filemap = array();

    foreach(
$data["classes"] as $k => $v) {
        
$class $v;

    
// Here is the tip to remove namespaces
        
$class['name'] = str_replace('\\''\\\\'$class['name']);
        
$class['mangled_name'] = str_replace('\\''\\\\'$class['mangled_name']);

// ...
?>


By the way, if you are looking for an easy way to use inclued, take a look at my library: http://www.eexit.net/projects/inclued.html

上一篇: 下一篇: