_Alexander: Array-Ausgabe bleibt immer gleich

Ich habe am Anfang meiner Dateien diesen Code geschrieben, um den Dateinamen der aktuellen Seite herauszufinden.

  
	$filename = array();  
	$file = basename($_SERVER['SCRIPT_FILENAME']);  
	$filename = split( '[.]', $file );  
  
	echo $file.' - ';  
	echo $filename[0];  

Der Output ist aber, zum Beispiel bei der Seite events.php:
...administrator/go/events.php - events.php - index

Warum ist der Output immer Index?? Der müsste doch events sein!

(Falls das wichtig ist: ich starte vor diesem Skript noch eine Session und dieses Skript wird mit include 'xy.php'; geladen.)

  1. Warum ist der Output immer Index?? Der müsste doch events sein!

    Was steht denn in $_SERVER['SCRIPT_FILENAME']?

    Ich nehme stark an, dass hier Dein Problem liegt. Möglicherweise hast Du einen Serverseitigen Rewrite auf so etwas wie index.php?page=events.php, der zu diesem Problem führt.

    Gruß, LX

    --
    RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
  2. Hallo,

    $filename = array();

    es ist unnötig, $filename zunächst ein leeres Array zuzuweisen, wenn du dieselbe Variable zwei Zeilen weiter sowieso nochmal komplett zuweist. Schädlich ist es aber auch nicht. ;-)

    $file = basename($_SERVER['SCRIPT_FILENAME']);
    $filename = split( '[.]', $file );

    Moment: Der erste Parameter von split() ist ein RegEx! Da ist die Angabe '[.]' relativ unsinnig, sie ist gleichwertig mit '.' und bedeutet: Jedes beliebige Zeichen. Du versuchst also hier, dein String durch Splitten an jedem Zeichen in einzelne Zeichen zu zerlegen. Lass dir mal $filename nach dieser Anweisung mit var_dump() anzeigen.
    Du meintest eventuell '.', also wirklich einen Punkt.

    (Falls das wichtig ist: ich starte vor diesem Skript noch eine Session und dieses Skript wird mit include 'xy.php'; geladen.)

    Ich glaube nicht, dass es wichtig ist, aber es schadet nicht, das zu erwähnen.

    Ciao,
     Martin

    --
    Verliebt:    Er spricht, sie lauscht.
    Verlobt:     Sie spricht, er lauscht.
    Verheiratet: Beide sprechen, und die Nachbarn lauschen.
    1. es ist unnötig, $filename zunächst ein leeres Array zuzuweisen, wenn du dieselbe Variable zwei Zeilen weiter sowieso nochmal komplett zuweist. Schädlich ist es aber auch nicht. ;-)

      Das liegt daran, dass PHP naturgemäß etweas schlampig ist - das macht die Sprache einfach erlernbar und flexibel aber auch punktuell problematisch.

    2. Hi,

      $filename = split( '[.]', $file );  
      

      Moment: Der erste Parameter von split() ist ein RegEx! Da ist die Angabe '[.]' relativ unsinnig, sie ist gleichwertig mit '.'

      Nein, ist sie nicht.
      [.] ist die Zeichenklasse, die einzig und allein das Zeichen . enthält.

      und bedeutet: Jedes beliebige Zeichen.

      Nein, [.] meint nicht jedes beliebige Zeichen.

      MfG ChrisB

      --
      “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
      1. Hallo,

        [.] ist die Zeichenklasse, die einzig und allein das Zeichen . enthält.

        und bedeutet: Jedes beliebige Zeichen.
        Nein, [.] meint nicht jedes beliebige Zeichen.

        und das ist im PHP-Handbuch vorbildlich dokumentiert.

        Freundliche Grüße

        Vinzenz

        1. Hi,

          Nein, [.] meint nicht jedes beliebige Zeichen.

          und das ist im PHP-Handbuch vorbildlich dokumentiert.

          Ja, allerdings bist du da bei den PCRE-Funktionen; split gehört aber zu den POSIX-Regex-Funktionen. (Auch wenn zwischen diesen beiden „Arten“ von Regexen bzgl. [.] kein Unterschied besteht.)

          MfG ChrisB

          --
          “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        2. Hi,

          [.] ist die Zeichenklasse, die einzig und allein das Zeichen . enthält.

          und bedeutet: Jedes beliebige Zeichen.
          Nein, [.] meint nicht jedes beliebige Zeichen.
          und das ist im PHP-Handbuch vorbildlich dokumentiert.

          da steht allerdings mit keinem Wort erwähnt, dass innerhalb einer Zeichenklasse die Sonderbedeutung des Zeichens '.' nicht gilt. Im Gegenteil, die Erläuterung von '' als "General Escape Character" bestärkt den Leser sogar noch darin, dass Sonderzeichen auch in [] ihre Sonderbedeutung behalten, wenn sie nicht durch '' maskiert werden.
          Abgesehen davon ist diese Erläuterung von http://de3.php.net/manual/en/function.split.php aus gar nicht verlinkt.

          So long,
           Martin

          --
          Der geistige Horizont ist der Abstand zwischen Brett und Hirn.
          1. Hi,

            Nein, [.] meint nicht jedes beliebige Zeichen.
            und das ist im PHP-Handbuch vorbildlich dokumentiert.

            da steht allerdings mit keinem Wort erwähnt, dass innerhalb einer Zeichenklasse die Sonderbedeutung des Zeichens '.' nicht gilt.

            Das steht hier, http://www.php.net/manual/en/regexp.reference.squarebrackets.php:
            „All non-alphanumeric characters other than , -, ^ (at the start) and the terminating ] are non-special in character classes, but it does no harm if they are escaped.”

            Ist aber, wie gesagt, auch eher wurscht, weil wir hier gar nicht über PCRE sprechen, sondern über POSIX Regex; die wiederum sind im PHP Manual zugegeben eher stiefmütterlich behandelt. Aber auch wieder egal, weil diese bzw. die Nutzung der zugehörigen Funktionen inzwischen deprecated sind.

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  3. Ich habe am Anfang meiner Dateien diesen Code geschrieben, um den Dateinamen der aktuellen Seite herauszufinden.

    $filename = array();
    $file = basename($_SERVER['SCRIPT_FILENAME']);
    $filename = split( '[.]', $file );

    echo $file.' - ';
    echo $filename[0];

    
    >   
    > Der Output ist aber, zum Beispiel bei der Seite events.php:  
    > ...administrator/go/events.php - events.php - index  
    >   
    > Warum ist der Output immer Index?? Der müsste doch events sein!  
    >   
    > (Falls das wichtig ist: ich starte vor diesem Skript noch eine Session und dieses Skript wird mit include 'xy.php'; geladen.)  
    
    Hm, willst du die Datei die aufgerufen wurde? Vermutlich er die in der du dich befindest. Also:  
    `__FILE__`{:.language-php}  
      
    Wobei ich dir  
    `$filename = strtok(dirname(__FILE__),".")`{:.language-php}  
    vorschlagen würde :)  
    
    
    1. Wobei ich dir
      $filename = strtok(dirname(__FILE__),".")
      vorschlagen würde :)

      ach quatsch nicht "dirname" sondern "basename"
      $filename = strtok(basename(__FILE__),".")

      wobei das sicher kürzer ist:
      $filename = basename(__FILE__,".php")
      http://de3.php.net/manual/de/function.basename.php