PHP Velho Oeste 2024

Ejemplo que implementa inclued en una aplicación

Este ejemplo muestra el proceso de implementar inclued en una apliación existente, viendo los resultados.

Ejemplo #1 Obtener la información dentro de la aplicación misma de PHP (función)

<?php
// Archivo donde almacenar la información de inclued
$fp fopen('/tmp/wp.ser''w');
if (
$fp) {
    
$clue inclued_get_data();
    if (
$clue) {
        
fwrite($fpserialize($clue));
    }
    
fclose($fp);
}
?>

Ahora que existe alguna información es hora de hacer que tenga sentido en la forma de un gráfico. La extension inclued incluye un archivo PHP llamado gengraph.php que crea un archivo dot que requiere la biblioteca » graphviz. Sin embargo, en esta forma no se requiere.

Ejemplo #2 Ejemplo de uso de gengraph.php

Este ejemplo crea una imagen llamada inclued.png que muestra la información de inclued.

# Primero, creamos el archivo dot
$ php gengraph.php -i /tmp/wp.ser -o wp.dot

# Lo siguiente, creamos la imagen
$ dot -Tpng -o inclued.png wp.dot

Ejemplo #3 Listar información mediante volcados (configuración)

Cuando se usa la directiva inclued.dumpdir, los archivos (incluidos rastros) son volcados con cada petición. Aquí hay una manera de listar esos archivos, y deserializarlos (unserialize()).

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

    echo 
"Ruta: $ruta"PHP_EOL;

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

    if (
$inclues->count() === 0) {
        echo 
'No hay rastros hoy'PHP_EOL;
        exit;
    }

    foreach (
$inclues as $inclue) {

        echo 
'Archivo inclued: '$inclue->getFilename(), PHP_EOL;

        
$data file_get_contents($inclue->getPathname());
        if (
$data) {
            
$inc unserialize($data);
            echo 
' -- nombre de archivo: '$inc['request']['SCRIPT_FILENAME'], PHP_EOL;
            echo 
' -- número de inclusiones: 'count($inc['includes']), PHP_EOL;
        }
        echo 
PHP_EOL;
    }
} else {
    echo 
'Hoy estoy lleno de rastros.'PHP_EOL;
}
?>

El resultado del ejemplo sería algo similar a:

Ruta: /tmp/inclued
Archivo inclued: inclued.56521.1
 -- nombre de archivo: /Users/philip/test.php
 -- número de inclusiones: 1

Archivo inclued: inclued.56563.1
 -- nombre de archivo: /tmp/none.php
 -- número de inclusiones: 0

Archivo inclued: inclued.56636.1
 -- nombre de archivo: /tmp/three.php
 -- número de inclusiones: 3

add a note add a note

User Contributed Notes 3 notes

up
1
g dot kuizinas at anuary dot com
11 years ago
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.
up
1
gtisza at gmail dot com
11 years ago
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
up
0
admin at eexit dot net
13 years ago
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 /* classes */
{
   
$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
To Top