Werkzeug zur Visualisierung von Includes

Liebe Mitlesende,

ich suche ein Werkzeug zur Visualisierung von Include-/
Require-Beziehungen - mir fehlen leider gute Suchbegriffe, um bei
Google fündig zu werden - oder es gibt einfach nichts entsprechendes.

Aus dem folgenden Quelltext sollte ein Gozintograph automatisch erstellt
werden:

bar.php:

<?php
require 'foo.php';
require 'gazonk.php';
require 'gazonk.php';
?>

Daraus soll dieser Gozintograph entstehen, an den Kanten sollte jeweils
die Wertigkeit (= Anzahl der Einbindungen) angegeben werden

+-----------+
| bar.php |
+-----+-----+
|
1 +--------+--------+ 2
| |
+-----+-----+ +------+------+
| foo.php | | gazonk.php |
+-----------+ +-------------+

Kennt jemand ein entsprechendes Werkzeug?

Gruß
Christoph

--
Today is Prickle-Prickle, the 9th day of Chaos in the YOLD 3174
Christoph Jeschke [ Mi, 09 Januar 2008 18:22 ] [ ID #1903834 ]

Re: Werkzeug zur Visualisierung von Includes

Christoph Jeschke schrieb:

> ich suche ein Werkzeug zur Visualisierung von Include-/
> Require-Beziehungen - mir fehlen leider gute Suchbegriffe, um bei
> Google fündig zu werden - oder es gibt einfach nichts entsprechendes.

> Aus dem folgenden Quelltext sollte ein Gozintograph automatisch erstellt
> werden:

> bar.php:
>
> <?php
> require 'foo.php';
> require 'gazonk.php';
> require 'gazonk.php';
> ?>

Solange es sich nur um solch einfache Pfade handelt ist das nicht
wirklich schwierig zu bewerkstelligen (s.u.). Wenn der Pfad jedoch
dynamisch ist, dann muss das Ganze zur Laufzeit ausgewertet werden.

> Daraus soll dieser Gozintograph entstehen, an den Kanten sollte jeweils
> die Wertigkeit (= Anzahl der Einbindungen) angegeben werden
>
> +-----------+
> | bar.php |
> +-----+-----+
> |
> 1 +--------+--------+ 2
> | |
> +-----+-----+ +------+------+
> | foo.php | | gazonk.php |
> +-----------+ +-------------+
>
> Kennt jemand ein entsprechendes Werkzeug?

Ich hab mal irgendwann sowas gebastelt, allerdings gibt das keine Grafik
oder ASCII, sondern einen HTML-Tree mit <ul> und <li> aus. Vielleicht
reicht dir das ja schon. Ist ne Quick'n'Dirty-Lösung die ich nur zwei
mal gebraucht hab.

<?php
class ScriptFile {
private $path;
private $childs;
private $parent;
private $level;
private $count;

public function __construct($path, $parent = null) {
$this->path = $path;
$this->childs = array();
$this->level = 0;
$this->count = 1;

if($parent !== null) {
$this->parent = $parent;
$this->level = $parent->level + 1;
}

$this->parse();
}

public function parse() {
if(file_exists($this->path)) {
$tokens = token_get_all(file_get_contents($this->path));

for($i = 0, $n = count($tokens); $i < $n; $i++) {
if(is_array($tokens[$i]) && ($tokens[$i][0] == T_REQUIRE ||
$tokens[$i][0] == T_REQUIRE_ONCE ||
$tokens[$i][0] == T_INCLUDE ||
$tokens[$i][0] == T_INCLUDE_ONCE)) {
while($tokens[++$i] !== ';') {
if($tokens[$i][0] ==
T_CONSTANT_ENCAPSED_STRING) {
$path =
stripslashes(substr($tokens[$i][1], 1, -1));

if(!isset($this->childs[$path])) {
$this->childs[$path] = new
ScriptFile($path, $this);
}
else {
$this->childs[$path]->count++;
}
}
}
}
}
}
}

public function render() {
$html = '';

if($this->parent === null) {
$html .= '<ul>';
}

$html .= '<li>';
$html .= $this->path;

if($this->parent !== null) {
$html .= " ({$this->count}x)";
}

if($this->childs) {
$html .= '<ul>';

foreach($this->childs as $child) {
$html .= $child->render();
}

$html .= '</ul>';
}

$html .= '</li>';

if($this->parent === null) {
$html .= '</ul>';
}

return $html . '</li>';
}
}

$f = new ScriptFile('php/core/Object.php');
?>

<h1>Dependencies</h1>
<?php echo $f->render() ?>

--
"Faulheit ist die Wurzel allen Fortschritts!"
(Inhalt eines Knallbonbons, 2002)
dafox [ Mi, 09 Januar 2008 21:09 ] [ ID #1903843 ]

Re: Werkzeug zur Visualisierung von Includes

Thomas Hamacher:

Hallo,

Danke für dein Feedback.

> Ich hab mal irgendwann sowas gebastelt, allerdings gibt das keine
> Grafik oder ASCII, sondern einen HTML-Tree mit <ul> und <li> aus.
> Vielleicht reicht dir das ja schon. Ist ne Quick'n'Dirty-Lösung die
> ich nur zwei mal gebraucht hab.

Ich habe mir zwischenzeitlich selbst einen Parser geschrieben, der - wie
dein Vorschlag - auf dem Tokenizer aufsetzt und XML ausgibt (welchen
man weiterverarbeiten kann, in meinem Falle habe ich mir einen
Perl-Parser geschrieben, der mit Hilfe von Graphviz Graphiken erzeugt).

Gruß
Christoph

--
Today is Sweetmorn, the 11st day of Chaos in the YOLD 3174
Christoph Jeschke [ Fr, 11 Januar 2008 23:10 ] [ ID #1905609 ]
PHP » de.comp.lang.php.misc » Werkzeug zur Visualisierung von Includes

Vorheriges Thema: Sessions sichtbar machen?
Nächstes Thema: Type-Hinting und NULL