Array-Ausgabe bleibt immer gleich
_Alexander
- php
0 LX0 Der Martin0 suit0 ChrisB0 Vinzenz Mai0 ChrisB0 Der Martin0 ChrisB
0 Pryos.org
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.)
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
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
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.
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
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
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
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
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
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 :)
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