der Schrott muss weg
dey
- projektverwaltung
Hallo,
gibt es eine Software (möglichst freie Ware) mit der ich die Verzeichnisse in denen ich meine Web-Projekte habe dahingehend durchforsten kann was aktuell noch benutzt wird und was Leichen sind.
So a'la index-follow.
bydey
Ich habe mir vor zwei Tagen ein kleines Script gebastelt, dass meinen kompletten htdocs-Ordner nach Projekten durchforstet und auflistet (sucht eigentlich nur nach den index.*-Dateien = Projekte). Leichen kann es zwar nicht anzeigen aber man hat eine schöne Übersicht in Form eines Verzeichnisbaums. Vielleicht bringt es dir ja was...
P.S.:
Ja ja, die Funktion "db_build_navigation" ist jenseits von Gut und Böse :-/ . Das ist eigentlich nicht mein normaler Stil. Sonst trenne ich brav Logik von Aussehen ;-)
<?php
function db_get_pages($directory = '',$pages = array()) {
foreach(glob($directory . '*') as $file) {
if($file != $directory . '.' && $file != $directory . '..') {
if(is_dir($file) && (!file_exists($file . '/index.php') &&
!file_exists($file . '/index.htm') &&
!file_exists($file . '/index.html'))) {
$pages = db_get_pages($file . '/',$pages);
}
else if(file_exists($file . '/index.php') ||
file_exists($file . '/index.htm') ||
file_exists($file . '/index.html')) {
$pages[] = $file;
}
}
}
return $pages;
}
function db_navigation_add_folders($folders,$navigation) {
$struct = array();
for($i = 0;$i < count($folders);$i++) {
$struct[$folders[$i]] = array();
}
$name = array_keys($struct);
$path = array();
for($i = count($name) - 2;$i >= 0;$i--) {
$struct[$name[$i]] = array($name[$i + 1] => $struct[$name[$i + 1]]);
if($i == 0) {
$path[$name[0]] = $struct[$name[0]];
return array_merge_recursive($navigation,$path);
}
}
}
function db_create_navigation($directories) {
$navigation = array();
$split = array();
sort($directories);
for($i = 0;$i < count($directories);$i++) {
$path = explode('/',$directories[$i]);
$split[] = $path;
}
for($i = 0;$i < count($split);$i++) {
$navigation = db_navigation_add_folders($split[$i],$navigation);
}
return $navigation;
}
function db_build_navigation($navigation,$indent = 8,$path = '') {
if(count($navigation) > 0) {
$name = array_keys($navigation);
for($i = 0;$i < count($name);$i++) {
$directory = ($path != '')? $path . '/' . $name[$i] . '/': $name[$i];
$id = md5($directory);
if(count($navigation[$name[$i]]) > 0) {
echo str_repeat(' ',$indent) . '<div style="cursor:pointer;color:rgb(0,0,0)" onClick="if(document.getElementById(\'sf_' . $id . '\').style.display == \'none\') { document.getElementById(\'sf_' . $id . '\').style.display = \'block\'; } else { document.getElementById(\'sf_' . $id . '\').style.display = \'none\'; }" onMouseMove="this.style.color=\'rgb(0,0,200)\'" onMouseOut="this.style.color=\'rgb(0,0,0)\'">' . htmlentities($name[$i]) . '</div>' . "\n";
echo str_repeat(' ',$indent) . '<div id="sf_' . $id . '" style="padding-left:1.5em;display:none">' . "\n";
db_build_navigation($navigation[$name[$i]],$indent + 2,$directory);
echo str_repeat(' ',$indent) . '</div>' . "\n";
}
else {
echo str_repeat(' ',$indent) . '<a href="' . $directory . '"><i>' . htmlentities($name[$i]) . '</i></a><br>' . "\n";
}
}
}
}
if(!empty($_GET['show']) && $_GET['show'] == 'phpinfo') {
phpinfo();
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>DirBrowser</title>
<style type="text/css">
<!--
a:link {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
text-decoration: none;
color: rgb(0,0,0);
}
a:visited {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
text-decoration: none;
color: rgb(0,0,0);
}
a:hover {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
text-decoration: none;
color: rgb(0,0,200);
}
a:active {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
text-decoration: none;
color: rgb(0,0,0);
}
a:focus {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
text-decoration: none;
color: rgb(0,0,200);
}
body {
background-color: rgb(255,255,255);
}
body, table {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
text-decoration: none;
color: rgb(0,0,0);
}
.content {
margin-left: auto;
margin-right: auto;
width: 30em;
}
-->
</style
</head>
<body>
<div class="content">
<span style="font-size:2.5em"><b>DirBrowser</b></span>
<br><br>
<b>Projektübersicht</b>
<div style="padding-left:0.5em">
<?php
$directories = db_get_pages();
$navigation = db_create_navigation($directories);
db_build_navigation($navigation);
?>
</div>
<br><br>
<a href="index.php?show=phpinfo"><span style="color:gray">über PHP</span></a>
|
<span style="color:gray"><?php echo htmlentities(date('d.m.Y - H:i')) ?></span>
</div>
</body>
</html>
Hallo,
und was macht das Ding.
Soll ja wohl alle Unterverzeichnisse rekursiv durchsuchen?
Bei mir wird nur das Verzeichnis angezeigt in dem sich dein Script befindet.
Ausserdem findest du etwas ähnliches wenn du mal meinem Link in der Signatur folgst.
bydey
und was macht das Ding. Soll ja wohl alle Unterverzeichnisse rekursiv durchsuchen?
Macht es auch - bei mir zumindest (das Script war nicht zur weitergabe gedacht ;-) ). Wenn er Ordner auflistet, kannst du mit der Maus da drauf klicken und wie in einem TreeView durch die Verzeichnisse wechseln.
Bei mir wird nur das Verzeichnis angezeigt in dem sich dein Script befindet.
Falls er Probleme beim Auslesen der Verzeichnisse hat, kannst du auch manuell einen Start-Pfad in dem ersten Parameter $directory der Funktion db_get_pages() eingeben (Funktion ist ganz oben im Script).
Ausserdem findest du etwas ähnliches wenn du mal meinem Link in der Signatur folgst.
Ich klick ja nicht auf jeden Link, den ich sehe ;-) Außerdem verstehe ich nicht so ganz, warum du ein anderes Programm suchst, wenn du es quasi schon hast. Ist ja alles ausbaufähig. Dein "PHP Project Nabigator" wirft bei mir Fehler in den Zeilen 66 und 62. array_merge bekommt falsche Parameter...
Hallo,
Ich klick ja nicht auf jeden Link, den ich sehe ;-) Außerdem verstehe ich nicht so ganz, warum du ein anderes Programm suchst, wenn du es quasi schon hast. Ist ja alles ausbaufähig. Dein "PHP Project Nabigator" wirft bei mir Fehler in den Zeilen 66 und 62. array_merge bekommt falsche Parameter...
Na eigentlich suche ich nicht etwas ausbaufähiges. Um das zu erreichen was ich will müsste ich alle Dateien öffnen und alle Links, includes und Verweise auf weitere Dateien herausholen, um danach die Dateien zu listen auf die es keine Verweise gibt.
Technisch ist das schon machbar. Ich hatte aber tatsächlich eine Software zur Projektverwaltung gesucht.
Wenn ich die nicht finde werde ich den PHP Project Navigator aufbohren.
Dass mein Script bei dir einen Fehler erzeugt wundert mich schon. Welches PHP benutzt du.
Bei mir funktioniert es sowohl auf dem Server als auch hier lokal unter IIS
Im umgekehrten Fall kann ich dein glob() nicht ausführen.
bydey
Dass mein Script bei dir einen Fehler erzeugt wundert mich schon. Welches PHP benutzt du.
Bei mir funktioniert es sowohl auf dem Server als auch hier lokal unter IIS
PHP 5.0.4 auf einem etwas veralteten Apache 1.3 unter Mac OS X (10.3.9).
Im umgekehrten Fall kann ich dein glob() nicht ausführen.
Existiert die Funktion glob() nicht oder hat dein Server Probleme, nach "*" zu suchen?
Hallo,
Existiert die Funktion glob() nicht oder hat dein Server Probleme, nach "*" zu suchen?
Fehlermeldung bekomme ich keine.
Ich sehe nur den Link bzgl. PHP info von dir.
bydey
Fehlermeldung bekomme ich keine.
Ich sehe nur den Link bzgl. PHP info von dir.
Wie gesagt kann es sein, dass Windows Probleme mit dem Pfad hat. Gib mal bei $directory einen Slash ein...
Hallo,
Wie gesagt kann es sein, dass Windows Probleme mit dem Pfad hat. Gib mal bei $directory einen Slash ein...
Habe das bis jetzt auf 2 Windows und einem Linux probiert... erfolglos.
bydey
Hallo,
Wie gesagt kann es sein, dass Windows Probleme mit dem Pfad hat. Gib mal bei $directory einen Slash ein...
<?php
foreach (glob("../*") as $filename) {
echo "$filename size " . filesize($filename) . "<br>\n";
}
echo "test<br>";
Aber deine Rekursivität schlägt seltsame Kapriolen.
bydey
Aber deine Rekursivität schlägt seltsame Kapriolen.
Und was genau? Den Pfad musst du in den Parameter $directory eingeben; ala
db_get_pages($directory = '../') {
...
}
Hallo,
Und was genau? Den Pfad musst du in den Parameter $directory eingeben; ala
db_get_pages($directory = '../') {
...
}
Das funktioniert nicht.
Wenn ich diesen Weg gehe schlägt der Vergleich
is_dir($file) && (!file_exists($file . '/index.php')
immer fehl
Ich habe es mal so versucht:
function db_get_pages($directory = '/',$pages = array(),$wxp="..") {
if (!isset($wxp)){$wxp="";}
echo $wxp.$directory."<br>";
foreach(glob($wxp.$directory . '*') as $file) {
if($file != $directory . '.' && $file != $directory . '..') {
echo $directory." -- ".$file."<br>";
if(is_dir($file) && (!file_exists($file . '/index.php') &&
!file_exists($file . '/index.htm') &&
!file_exists($file . '/index.html'))) {
$pages = db_get_pages($file . '/',$pages);
}
else if(file_exists($file . '/index.php') ||
file_exists($file . '/index.htm') ||
file_exists($file . '/index.html')) {
$pages[] = $file;
}
}
}
Das Ergebnis ist wohl nicht wie gewünscht. Ausser dem Verzeichnis temp wird nix rekursiv durchsucht.
DirBrowser
Projektübersicht
../
/ -- /1 HTML Hilfe
/ -- /Fuji
/ -- /Grandprix
/ -- /LimboCMS
/ -- /ToendaCMS
/ -- /ahzwei
/ -- /asptest
/ -- /bsv
/ -- /div-tests
/ -- /dream1
/ -- /filemanager
/ -- /fme_new
/ -- /ftmed
/ -- /games
/ -- /guestphp
/ -- /hp
/ -- /index.php
/ -- /minixml-1.3.0
/ -- /myhp
/ -- /pear
/ -- /php-project-browser
/ -- /phptest
/ -- /programmingprojects
/ -- /projekte.php
/ -- /temp
../temp/
/temp/ -- /temp/78143_75_Stück.txt
/temp/ -- /temp/78162_60_Stück.txt
/temp/ -- /temp/78332_30_Stück.txt
/temp/ -- /temp/79413_30_Stück.txt
/temp/ -- /temp/80141_200_Stück.txt
/temp/ -- /temp/80152_250_Stück.txt
/temp/ -- /temp/80491_20_Stück.txt
/temp/ -- /temp/81011_360_Stück.txt
/temp/ -- /temp/81431_40_Stück.txt
/temp/ -- /temp/81491_40_Stück.txt
/temp/ -- /temp/81962_24_Stück.txt
/temp/ -- /temp/82241_230_Stück.txt
/temp/ -- /temp/82261_1500_Stück.txt
/temp/ -- /temp/82722_100_Stück.txt
/temp/ -- /temp/83192_250_Stück.txt
/temp/ -- /temp/83212_15_Stück.txt
/temp/ -- /temp/83411_150_Stück.txt
/temp/ -- /temp/83563_5000_Stück.txt
/temp/ -- /temp/83671_96_Stück.txt
/temp/ -- /temp/83692_7500_Stück.txt
/temp/ -- /temp/84001_500_Stück.txt
/temp/ -- /temp/K004427_98_Stück.txt
/temp/ -- /temp/K004433_100_Stück.txt
/temp/ -- /temp/index.php
Array
(
)
/ -- /w3cxslref
/ -- /wm-tipp
/ -- /xml brinkster
Array
(
)
Hast du eine Vorstellung warum?
bydey
Hast du eine Vorstellung warum?
Ja, ich denke schon. Mein Script rechnet damit, dass auf der obersten Ordner-Ebene, die es durchsucht, keine Projekte liegen. Mein Web-Sites-Ordner sieht zum Beispiel so aus:
htdocs
meinscript.php
Homepages
www.eineseite.de
index.php
www.nocheineseite.de
index.php
Tools
phpMyAdmin
index.php
roundcube
index.php
Jedes Projekt wird nach einem Thema sortiert. So landen die ganzen Homepages im Ordner Homepages, Tools landen im Ordner Tools und so weiter. Mein Script liegt auf der obersten Ebene und liest diese Ordner aus. Tiefer verschachtelte "Themen-Ordner" sind auch möglich. Nur die erste ebene muss frei von Projekten sein. Eine Ordner-Struktur wie deine kann es nicht auslesen:
htdocs
meinscript.php
deinprojekt
index.php
nocheinsdeinerprojekte
index.php
Würdest du stattdessen so eine Ordner-Struktur machen ...
htdocs
meinscript.php
Projekte
deinprojekt
index.php
nocheinsdeinerprojekte
index.php
... sollte es klappen. Wenn ich nähmlich eine Ordner-Struktur wie deine mache, liest es auch nichts mehr aus. Mein Script geht halt von einem aufgeräumten htdocs-Order aus ;-) . So geordnet könntest du rein theoretisch den $directory-Parameter wieder auf '' (leer) setzen...
Hallo,
danke für deine Bemühungen.
bydey
danke für deine Bemühungen.
Kein Problem. Funktioniert es denn jetzt?
Hallo,
Kein Problem. Funktioniert es denn jetzt?
Nein!
Teile meiner Verzeichnisse sind so wie du beschrieben hast. Desweiteren habe ich weitere Verzeichnisse, die aussehen wie temp aber bicht rekursiv durchsucht werden.
Wichtiger war für mich, dass ich nach x Monaten glob() ans laufen gebracht habe.
bydey
Teile meiner Verzeichnisse sind so wie du beschrieben hast. Desweiteren habe ich weitere Verzeichnisse, die aussehen wie temp aber bicht rekursiv durchsucht werden.
Schön und Gut. Nur sobald ein Verzeichnis auftaucht, das auf der obersten Ebene liegt und direkt eine index.*-Datei enthält, listet dp_get_pages() nichts mehr auf, egal ob sich auf der obersten Ebene noch andere Ordner befinden, die nicht direkt eine index.*-Datei enthalten und eigentlich rekursiv durchsucht werden sollten. Du musst alle deine Projekte in einen Ordner schieben, der zusammen mit meinem Script auf einer Ebene liegt - dann sollte es klappen...
hi,
Ich habe mir vor zwei Tagen ein kleines Script gebastelt, [..] hat eine schöne Übersicht in Form eines Verzeichnisbaums.
Also auf eine XP Kiste nehm ich dafür das tree Kommando:
tree /f
Zeigt den Verzeichnisbaum und die Dateien.
--roro
Moin!
gibt es eine Software (möglichst freie Ware) mit der ich die Verzeichnisse in denen ich meine Web-Projekte habe dahingehend durchforsten kann was aktuell noch benutzt wird und was Leichen sind.
Wie soll das genau gehen? Die Seiten können ja von irgendwoher verlinkt sein, aber nicht intern bei dir. Wie willst du das gesamte Internet nach Links auf deine Seiten durchsuchen?
Aber als Handreichung: Erstelle eine Liste aller Dateien in deinem Document-Root, und erstelle eine Liste aller im Access-Log gelisteten Dateien. Vergleiche beide Listen (je mehr Access-Log-Zeitraum du erfaßt, desto besser).
Die Differenz zwischen Liste (Dateisystem) und Liste (Logfile) sind deine mutmaßlichen Leichen, deren Entfernung du gegebenenfalls in Erwägung ziehen könntest.
- Sven Rautenberg
Hallo,
Moin!
gibt es eine Software (möglichst freie Ware) mit der ich die Verzeichnisse in denen ich meine Web-Projekte habe dahingehend durchforsten kann was aktuell noch benutzt wird und was Leichen sind.
Wie soll das genau gehen? Die Seiten können ja von irgendwoher verlinkt sein, aber nicht intern bei dir. Wie willst du das gesamte Internet nach Links auf deine Seiten durchsuchen?
Den Lösungweg beschreibe ich hier, glaube ich.
bydey