bernhard: glbale variable nicht über $GLOBALS erreichbar

hi,

ich habe ein etwas schwer zu beschreibendes problem und weiss nicht mehr wo ich noch nach der ursache suchen soll:

im index.php file steht bei mir:

require_once $list; // $list = 'config/load.php';

in der besagten Datei load.php werden dann sämtliche module geladen:

require_once 'config1.php';
require_once 'config2.php';
require_once 'config3.php';

in den config files sind variablen definiert, über die ich in meiner applikation via $GLOBALS['variablenname'] zugreife. also z.b:

$db['host'] = 'localhost';
$db['user'] = 'my_user';
etc.

die config dateien werden ordnungsgemäss includiert & interpretiert (ich habe das mit echo-statements überprüft), allerdings kann ich mit $GLOBALS['db'] danach nicht (von meiner applikation aus) auf die $db varaible zugreifen. das geht nur dann, wenn ich in jedem config file vor jede Variable die ich dort definiere z.b. $db =& GLOBALS['db']; setze.

Bin absolut überfragt was hier falsch ist. Hoffe auf Tipps.

register_globals ist Off (hab auch On schon probiert)

lg bernhard

  1. echo $begrüßung;

    Bin absolut überfragt was hier falsch ist. Hoffe auf Tipps.

    Ich tippe darauf, dass du dich nicht im globalen Scope befindest. Vermutlich rufst du require_once 'config1.php'; etc. in einer Funktion auf. http://de.php.net/manual/en/function.include.php

    echo "$verabschiedung $name";

    1. hallo dedlfix

      Bin absolut überfragt was hier falsch ist. Hoffe auf Tipps.

      Ich tippe darauf, dass du dich nicht im globalen Scope befindest. Vermutlich rufst du require_once 'config1.php'; etc. in einer Funktion auf. http://de.php.net/manual/en/function.include.php

      hmmm ... das ist schonmal ein heisser tipp. hab ein wenig herumprobiert. ich definiere nun im config file vorher jede variable als 'global' dann hauts hin! mein bisheriger versuch "$db =& GLOBALS['db']" schein equivalent zu sein mit "global $db". erschien mir anfangs ein wenig seltsam, leuchtet mir nun aber ein wieso das so sein muss.

      nun denn ... vielen dank !!

      lg bernhard

  2. Hallo bernhard

    ich habe ein etwas schwer zu beschreibendes problem und weiss nicht mehr wo ich noch nach der ursache suchen soll:

    Naja... sollte doch nicht allzu schwer werden ;)

    im index.php file steht bei mir:

    require_once $list; // $list = 'config/load.php';

    Es ist gefährlich Variablen in requires und includes zu verwenden
    Wahrscheinlich wirst du so oder so nur die 'config/load.php' einbinden ... oder ?
    --> require_once 'config/load.php';
    Und schon ist die Welt besser :D

    in der besagten Datei load.php werden dann sämtliche module geladen:

    require_once 'config1.php';
    require_once 'config2.php';
    require_once 'config3.php';

    Das sollte eigentlich kein Problem sein ;)

    in den config files sind variablen definiert, über die ich in meiner applikation via $GLOBALS['variablenname'] zugreife. also z.b:

    $db['host'] = 'localhost';
    $db['user'] = 'my_user';
    etc.

    Naja ... wäre es da nicht besser eine von PHP gelieferte Funktion zu verwenden ?
    parse_ini_file
    Diese Funktion verwende ich sehr gerne !

    Aber nur zur Info !
    -> Du musst aufpassen !
    -> http-Deeplink ! und schon kann man alles sehen
    -> einfach config.ini.php nennen und einen Parse Error bei Direktaufruf erzeugen !

    [Auszug]
    ;<?php /
    ; Allgemeine Konfigurationen
    ;
    [/Auszug]

    Ergibt dann einen Fatal Error => unexpected "/"
    Vllt nicht die schönste Methode, aber besser als nichts ;)
    Man könnte es auch mit .htacces schützen.

    die config dateien werden ordnungsgemäss includiert & interpretiert (ich habe das mit echo-statements überprüft), allerdings kann ich mit $GLOBALS['db'] danach nicht (von meiner applikation aus) auf die $db varaible zugreifen. das geht nur dann, wenn ich in jedem config file vor jede Variable die ich dort definiere z.b. $db =& GLOBALS['db']; setze.

    Wo willst du denn die Variable aufrufen ?

    Vllt solltest du die Configs so einbauen :
    $GLOBALS['db']['user'] = "Username";
    $GLOBALS['db']['pass'] = "Passwort";

    Und dann noch :
    include_once 'config/load.php';

    Dann kannst du auf $GLOBALS['db']['user'] zugreifen.

    echo $GLOBALS['db']['user'];
    Ausgabe :
    Username

    Bin absolut überfragt was hier falsch ist. Hoffe auf Tipps.

    register_globals ist Off (hab auch On schon probiert)

    Das hat damit eher weniger zu tun ;)

    Hoffe ich konnte helfen.

    Gruß Jojo

    1. Hallo jojo

      Naja ... wäre es da nicht besser eine von PHP gelieferte Funktion zu verwenden ?
      parse_ini_file
      Diese Funktion verwende ich sehr gerne !

      nettes ding! kannte ich noch gar nicht. aber bei mir würden in der config andere variablen benötigt werden, ich müsste also variablen im ini file verwenden können.

      Vllt solltest du die Configs so einbauen :
      $GLOBALS['db']['user'] = "Username";
      $GLOBALS['db']['pass'] = "Passwort";

      hatte ich teilweise auch schon überlegt, finde ich aber grauslich.

      Und dann noch :
      include_once 'config/load.php';

      das problem ist bei mir, dass ich im vorhinein nicht weiss aus welchem verzeichnis ich die config hole. die $list variable ist bei mir nur ne schreiberleichterung. der pfad zur config ist natürlich konstant defined().

      Dann kannst du auf $GLOBALS['db']['user'] zugreifen.

      genauso mache ich es eigentlich eh überall.

      register_globals ist Off (hab auch On schon probiert)

      Das hat damit eher weniger zu tun ;)

      naja, in seiner verzweiflung sucht man überall ;-)

      danke & lg bernhard