WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik


Homepage und Webhosting-Forum

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.


Forum » PHP & MySQL » PHP - findet Variable nicht, obwohl diese deklariert ist » Antworten
Benutzername:
Passwort: Passwort vergessen?
Inhalt der Nachricht: Fett | Kursiv | Unterstrichen | Link | Bild | Smiley | Zitat | Zentriert | Quellcode| Kleiner Text
Optionen: Emailbenachrichtigung bei Antworten
 

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++;
      	}
       }
		 }
 ?>

Nach oben