|
PHP - findet Variable nicht, obwohl diese deklariert ist
von languitar |
ach *g* du musst in der zweiten Funktion auch ganz oben ein
global $dateien;
einfügen, dann gehts ;) |
von seth |
übrigens, wenn ich die funktion 2 nicht mehr als funktion lass sonder direkt die zu durchsuchende datei eingeb, funzts. also so gesehen problem behoben, ich werd aber niemanden daran hindern die anomalie der globalen variable $dateien nochmal zu durchdenken
|
von seth |
ok, ich weiß mitlerweilen was das problem ist, nur nicht ,wie es so was geben kann. die globale variable $dateien, die in der 1. funktion deklariert wird, ist in der 2. nicht mehr vorhanden, in der 3. funktion schon wieder. nun ist es aber so, das:
funktion 1 in funktion 2 included ist
funktion 2 in funktion 3 included ist
d.h. in funktion 2 lässt sich der wert von $dateien nicht abfragen, bleibt aber zwischengespeichert, in funktion 3 geht wieder alles. ich bin radlos, das widerspricht allem was ich bis jetzt über globale variablen und programmiern überhaupt weiß. HILFE!!!! |
von languitar |
setz mal ganz an den anfang der zweiten Datei ein
$dateien = array(); |
von seth |
ok hab ich gemacht, und siehe da, die funktion wird ausgeführt, gleich 7x (weil sie sich ja selbst aufruft) was nun? |
von languitar |
Erst mal war das leider das falsche Forum ;)
Pack doch mal in die Funktioen read_tree testweise ein echo "test" und lass das Script dann noch mal ausführen. Wenn dann auf der Seite irgendwo ein Test oder halt mehrere erscheinen weißt du schon mal, ob er die Funktion überhaupt ausführt oder nicht. |
von seth |
hab vergessen, die Fehlermeldung:
Notice: Undefined variable: dateien in C:\daten\Rudi Mangst homepage\WEB\PHP\Unterverzeichnis-Suche.php on line 18 |
von seth |
Also das Problem ist, das die Funktion Unterverzeichnis_Suche($dir), der die Funktion read_tree($dir) included wird, die globale Datei $dateien nicht kennt. Wenn jemand eine Ahnung hat, warum, bitte melden. Ach ja, Unterverzeichnis_Suche wird später noch aufgerufen, der Aufruf ist nicht hier, weil er nichts zur Sache tut.
READ_TREE FUNKTION
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20: | <?php
function read_tree ($dir)
{
global $dateien;
$fp = opendir($dir);
while($datei = readdir($fp)) {
if (is_dir("$dir/$datei") && $datei!="." && $datei!="..") {
read_tree("$dir/$datei");
} else {
if (preg_match("/^index/", $datei)) continue;
if (preg_match("/\.\.?$/", $datei)) continue;
$dateien[] = "$dir/$datei";
}
}
closedir($fp);
}
?> |
UNTERVERZEICHNIS_SUCHE FUNKTION
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44: | <?php
include "dateisuche.php";
global $verzeichnisse;
$verzeichnisse = array();
function Unterverzeichnis_Suche($dir)
{
read_tree($dir);
$temp = array();
$pos = 0;
/*leert den Array $verzeichnisse, sollte dieser bereits Werte enthalten
for($i = 0; $i < count($verzeichnisse); $i++)
unset($verzeichnisse[$i]);*/
/*durchläuft alle gefundenen Verzeichnisse*/
for($n = 0; $n < count($dateien); $n++)
{
$tok = strtok($dateien[$n],"/");
/*teilt die Verzeichnisse in die Bestandteile auf $temp[0]="Galerie", $temp[1]="on-stage", ...*/
for($i = 0; $tok; $i++)
{
$temp[$i] = $tok;
$tok = strtok ("/");
}
/*sucht die 1. Unterverzeichnisse heraus und schreibt diese in einen Array, jedes Unterverzeichnis wird nur 1x aufgelistet*/
if($n > 0)
{
if($temp[1] != $verzeichnisse[$pos-1])
{
$verzeichnisse[$pos] = $temp[1];
$pos++;
}
}
/*beim 1. Durchlauf wird auf jeden Fall ein neues Unterverzeichnis gefunden und geschrieben*/
else
{
$verzeichnisse[$pos] = $temp[1];
$pos++;
}
}
}
?> |
|
|
|
|