function funktioniert net

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • function funktioniert net

    Hi @all

    hab zwei Probleme, folgendes:

    Diese Funktion steht in der config.inc.php

    PHP-Code:
    function lang() {

    if (
    $lang == "deu") { 
    include (
    'lang/lang.ger.php');

    } elseif (
    $lang == "eng") {
    include (
    'lang/lang.eng.php');

    } elseif (!(isset(
    $lang))) {
    $lang == "deu" ;
    }
    }; 
    diese möchte ich nun in den Dateien verwenden:

    PHP-Code:
    <?     include_once ('config.inc.php'); 
        lang();
        global $lang; 
    ?>
    Jetzt kommt zwar keine Fehlermeldung. Aber der übernimmt nicht die Inhalte der Arrays der "lang.ger.php"...? wo liegt der Fehler und wie behebe ich ihn am besten?

    Noch eine kleine Frage...jedoch auch ziemlich wichtig:

    Gibt es eine Möglichkeit immer zum root Verzeichnis meiner Sites zu kommen...also z.B. so

    include (//root/lang/lang.ger.php)

    also das ich quasi zum Anfangsordner meiner Site komme, mit einem Befehl...

    ich hoffe ihr versteht was ich meine

    z.B. mit Dos geht das so C:\winnt\dir2\dir3>cd\

    so ist man wieder bei C:\>

    naja ich hoffe ihr könnt mir helfen

    cya CrazyPip

  • #2
    Abend!

    Vielleicht solltest du zuerst die Variable als Global bekannt machen und dann die Funktion aufrufen.

    global $lang;
    lang();

    Weiss ja nicht, ob das so gewollt ist, aber um der Übersicht willen könntest du vielleicht auch die Gunktion oder die Variable anders benennen. So fällt dann der Überblick leichter.

    Also mit "./irgentwas.php" kann man ein Verzeichnis zurückspringen und eine dortliegende Datei aufrufen.

    Kommentar


    • #3
      wenn nicht ganz daneben liege machst du eine Variable so global:

      function blabla(){
      global $variable1;
      ....irgendsonphpkrempel...
      }

      dann kannst innerhalb der function auf auf $variable1 zugreifen - ansonsten ist die var leer!

      oder du rufst die function so auf: blabla($variable1); // dann kennt die function die var auch, wird ja schleißlich übergeben...
      Gruß
      Thomas

      Kommentar


      • #4
        im Prinzip sind die zwei Antworten vor mir schon richtig. Trotzdem nochmals zum kurzen Überblick:

        wenn du eine Variable in einer Funktion "erstellst", dann ist diese nur in der Funktion bekannt.
        Eine Variable von "außerhalb" einer Funktion, also vom "normalen" Skript, kannst du mit "global $variablename;" als identisch definieren, d.h. die Funktion kann auch den Wert ändern und diese Änderung ist dann im "restlichen" Skript ebenfalls sichtbar.
        Oder du übergibst einer Funktion explizit als Parameter eine Variable, d.h. die Funktion hat deren Wert (kann auch ein Array oder ein Objekt sein). Aber kein Zugriff auf die Variable, eben nur der Wert.

        Deine Funktion würde also entweder mit dem "global"-Befehl innerhalb der Funktion oder auch als Übergabe "lang($lang)" klappen.

        Zu deinem anderen Problem:
        Was meinst du mit root-Verzeichnis? Du darfst auch nicht die Berechtigungen vergessen, d.h. der Webuser kann nicht (normalerweise und wäre ja auch schrecklich wenn) in jedes x-beliebige Verzeichnis auf dem Server. Und PHP-Skripte sollten eigentlich auch im Verzeichnis des Webservers liegen. Höchstens es sind CGIs. Aber einen Include-Pfad kannst du auch in der php.ini einstellen, wenn es dir darum geht. Oder deine Pfad beginnen immer mit einem / am Anfang, dann ist auch die oberste mögliche Struktur.

        Kommentar


        • #5
          Morgen!

          Bei der Übergabe von Parametern (Variablen) an eine Funktion, gibt es grundsätzlich zwei verschiedene Möglichkeiten:

          Übergabe per Referenz (call by reference)
          Hier ist die Veränderung der übergebenen Variablen erwünscht.
          Entscheidend ist hier das & vor dem Parameter, welches dem Interpreter signalisiert, dass es sich um eine Übergabe per Referenz handelt. Praktisch kann man sich das so vorstellen, dass ein Zeiger auf die Variable zeigt und somit auch der Inhalt verändert werden kann.
          PHP-Code:
          <?
          function lang(&$lang) {
          Übergabe von Werten (call by value)
          Hier ist eine Veränderung des Variableninhalts nicht erwünscht. Es wird also intern eine Kopie der Variable angelegt und mit dieser gearbeitet. Der Inhalt der orgninalen Variable bleibt unverändert. Nach abarbeiten der Funktion wird dann die Kopie verworfen.
          PHP-Code:
          <?
          function lang($lang) {
          Deshalb sollte man bei der Übergabe von Grösseren Mengen (also Arrays) auch unbedingt aus Gründen der Performance auf die Übergabe per Referenz setzten!

          Kommentar


          • #6
            hi @all

            danke für die zahlreichen Antworte...

            also das mit der Übergabe per Referenz versteh ich nicht. wenn ich meine funktion

            PHP-Code:
            function lang(&$lang) {
            global 
            $lang;
            if (
            $lang == "deu") { 
            include (
            'lang/lang.ger.php');

            } elseif (
            $lang == "eng") {
            include (
            'lang/lang.eng.php');

            } elseif (!(isset(
            $lang))) {
            $lang == "deu" ;
            }
            }; 
            dann kommt bei mir folgendes:
            "Warning: Missing argument 1 for lang() in config.inc.php on line 5"

            Ich hab das irgendwie noch nie richtig gerafft, wenn da noch Variablen in der Klammer stehen ( function bla($bla){ ), was das dann bedeuted usw...

            und das mit dem root meinte ich so...:

            ich habe ja verschiedene Verzeichnisse

            - Verzeichnis1
            - Verzeichnis 2
            - Verzeichnis 3
            - langverzeichnis
            - Verzeichnis 5
            index.php
            header.php
            config.php

            => so sieht mein ftp ungefähr aus
            nun muss ich wohl oder übel in jede Datei die "lang.deu.php" aus dem verzeichnis "langverzeichnis" includen um die Arrayinhalte zu bekommen. Jetzt heisst das ja z.B. im Verzeichnis1 :
            include ('./langverzeichnis/lang.ger.php');

            für den header.php heisst das aber anders
            include ('/langverzeichnis/lang.ger.php');

            nun möchte ich einen Code der für alle Dateien in allen Ordnern gilt und funktioniert also das man nur Zugriff auf das langverzeichnis bekommt, quasi in der art

            include (':root:/langverzeichnis/lang.ger.php');

            gibts da eine Möglichkeit? ich hoffe ihr versteh was ich meine

            cya CrazyPip

            P.s ich komme mit diesem scheiss Sprachentemplate net weiter. Wie mache ich es denn nun, dass ich per Forumlar (Select), die Sprachen templates include. Also nur den Code für die benutzung der Templates. Das <select> usw kann ich selber gg

            kann mir da einer mal ne referenz für geben?? wäre euch sehr verbunden

            Kommentar


            • #7
              enweder referenzen benützen, globalisieren oder call bei value

              PHP-Code:
              function lang($lang) {
              if (
              $lang == "deu") { 
              include (
              'lang/lang.ger.php');

              } elseif (
              $lang == "eng") {
              include (
              'lang/lang.eng.php');

              } elseif (!(isset(
              $lang))) {
              $lang == "deu" ;
              }
              }; 
              $lang="deu";
              aufruf: lang($lang);
              PHP-Code:
              function lang() {
              global 
              $lang;
              if (
              $lang == "deu") { 
              include (
              'lang/lang.ger.php');

              } elseif (
              $lang == "eng") {
              include (
              'lang/lang.eng.php');

              } elseif (!(isset(
              $lang))) {
              $lang == "deu" ;
              }
              }; 
              $lang="deu";
              aufruf:lang();

              suc dir eins aus...
              Zuletzt geändert von Campus; 17.09.2002, 15:41.
              meine Projekte bestaunen: http://www.kleiza.de

              Kommentar


              • #8
                ich lasses mal bei dem global $lang

                trotzdem sind noch so viele Fragen offen

                Kommentar


                • #9
                  $string = "ich versuchs mal einfach zu erklären. hoffe ich ;-)";

                  function schreibs_gross($string){
                  $string = strtouper($string);
                  }
                  wenn Du jetzt die function aufrufst mit
                  schreibs_gross($string);
                  passiert (scheinbar) gar nix, die var string ist nur innerhalb der function geändert!


                  function schreibs_gross(&$string){
                  $string = strtouper($string);
                  }
                  wenn Du jetzt die function aufrufst mit
                  schreibs_gross($string);
                  wird die var auch außerhalb geändert


                  function schreibs_gross($string){
                  $string = strtouper($string);
                  return($string);
                  }
                  wenn Du jetzt die function aufrufst mit
                  $string = schreibs_gross($string);
                  wird die var auch außerhalb geändert
                  Gruß
                  Thomas

                  Kommentar


                  • #10
                    Das war eigentlich recht gut erklärt...

                    function schreibs_gross($string){
                    $string = strtouper($string);
                    }
                    wenn Du jetzt die function aufrufst mit
                    schreibs_gross($string);
                    passiert (scheinbar) gar nix, die var string ist nur innerhalb der function geändert!
                    --> das nennt man dann call by value, weil für die Funktion nur der WERT übergeben wird. die eigentlich Variable kann nicht geändert werden

                    function schreibs_gross(&$string){
                    $string = strtouper($string);
                    }
                    wenn Du jetzt die function aufrufst mit
                    schreibs_gross($string);
                    wird die var auch außerhalb geändert
                    --> das ist dann call by reference, weil du hier die eigentliche Variable mit Wert übergibst und sich jede Änderung auch auf die Var bemerkbar macht

                    function schreibs_gross($string){
                    $string = strtouper($string);
                    return($string);
                    }
                    wenn Du jetzt die function aufrufst mit
                    $string = schreibs_gross($string);
                    wird die var auch außerhalb geändert
                    --> hiermit weisst du die Funktion an, einen Rückgabewert zu liefern. also bei jedem aufruf der Funktion liefert dies den GROSS geschriebenen string zurück

                    Das waren dann auch schon fast alle Möglichkeiten der Wertübergabe an Funktionen...

                    Kommentar


                    • #11
                      ich glaub crazypip meint mit:
                      trotzdem sind noch so viele Fragen offen
                      wohl mehr das
                      und das mit dem root meinte ich so...:

                      ich habe ja verschiedene Verzeichnisse

                      - Verzeichnis1
                      - Verzeichnis 2
                      - Verzeichnis 3
                      - langverzeichnis
                      - Verzeichnis 5
                      index.php
                      header.php
                      config.php

                      => so sieht mein ftp ungefähr aus
                      nun muss ich wohl oder übel in jede Datei die "lang.deu.php" aus dem verzeichnis "langverzeichnis" includen um die Arrayinhalte zu bekommen. Jetzt heisst das ja z.B. im Verzeichnis1 :
                      include ('./langverzeichnis/lang.ger.php');

                      für den header.php heisst das aber anders
                      include ('/langverzeichnis/lang.ger.php');

                      nun möchte ich einen Code der für alle Dateien in allen Ordnern gilt und funktioniert also das man nur Zugriff auf das langverzeichnis bekommt, quasi in der art

                      include (':root:/langverzeichnis/lang.ger.php');

                      gibts da eine Möglichkeit? ich hoffe ihr versteh was ich meine

                      cya CrazyPip

                      P.s ich komme mit diesem scheiss Sprachentemplate net weiter. Wie mache ich es denn nun, dass ich per Forumlar (Select), die Sprachen templates include. Also nur den Code für die benutzung der Templates. Das <select> usw kann ich selber gg

                      kann mir da einer mal ne referenz für geben?? wäre euch sehr verbunden
                      meine Projekte bestaunen: http://www.kleiza.de

                      Kommentar

                      Lädt...
                      X