1
Nun zum nächsten Trick mit PHP. Ich will mein Skript lokalisieren, also die Beschriftung in unterschiedlichen Sprachen anzeigen. So weit mir bekannt ist, würde man da normalerweise eine Art Template bauen, indem man alle Beschriftungen durch Variablen ersetzt, die mit den entsprechenden Wörtern in unterschiedlichen Sprachen befüllt werden. Dazu müßte ich zunächst mal sämtliche Beschriftungen in meinem Skript aufspüren und durch Variablen ersetzen. So etwas ist, meiner Auffassung nach, eher Arbeit für einen Computer.
Darum soll mein Skript das gleich selbst übernehmen. Zunächst müssen unter allen Zeichenketten in dem Skript diejenigen aufgespürt werden, die als Beschriftungen vorgesehen sind. Das versuche ich mit einem Regulärem Ausdruck. Außerdem muß ich ausprobieren, ob das Skript auf sich selbst zugreifen kann, ohne dadurch eine Dauerschleife zu produzieren. Darum habe ich folgenden Code einfach an irgendein Skript (ansonsten komplett auskommentiert, das sollte den Regulären Ausdruck nicht stören) angehängt und das Ganze Ausgabetest.php genannt:
Den Regulären Ausdruck kann man sicherlich noch optimieren. Außerdem sieht man dem vermutlich an, daß ich mir nicht sicher bin, wie lookahead und lookbehind kombiniert werden. Dringender ist aber das Problem, das dieser Code nicht wie erwartet einige Strings präsentiert, sondern folgende Fehlermeldungen:
Eine ab dem dritten Warning:... gleiche Fehlermeldung erhalte ich, wenn ich $_SERVER['PHP_SELF'] gleich als Argument in preg_match_all() einfüge. $trick4= wegzulassen macht keinen Unterschied.
Anscheinend kann das Skript nicht auf sich selbst zugreifen? $_SERVER['PHP_SELF'] dient aber doch genau dazu? Das ist eigentlich auch nichts anderes als wenn mehrere Clients auf den selben Server zugreifen oder wenn sich ein Skript zur Verarbeitung von Formulardaten selbst aufruft. Liege ich damit völlig falsch oder liegen nur handwerkliche Fehler vor?
Ranma
Darum soll mein Skript das gleich selbst übernehmen. Zunächst müssen unter allen Zeichenketten in dem Skript diejenigen aufgespürt werden, die als Beschriftungen vorgesehen sind. Das versuche ich mit einem Regulärem Ausdruck. Außerdem muß ich ausprobieren, ob das Skript auf sich selbst zugreifen kann, ohne dadurch eine Dauerschleife zu produzieren. Darum habe ich folgenden Code einfach an irgendein Skript (ansonsten komplett auskommentiert, das sollte den Regulären Ausdruck nicht stören) angehängt und das Ganze Ausgabetest.php genannt:
$trick1=array(); $trick2=array();
$trick1=file($_SERVER['PHP_SELF']);
// ich mag file(); ohne umständliches öffnen und schließen macht es
// einen Array aus einer Datei; theoretisch zumindest.
$trick3=implode('',$trick1);
// die Datei lieber als String? Auch kein Problem.
$trick4=preg_match_all('§(\'((?<=\<.*value\=\")(?=\"\>)).+\')|(\'?((?<!\<)(?!\>)).+\')§ismU',$trick3,$trick2);
print_r($trick2);
Den Regulären Ausdruck kann man sicherlich noch optimieren. Außerdem sieht man dem vermutlich an, daß ich mir nicht sicher bin, wie lookahead und lookbehind kombiniert werden. Dringender ist aber das Problem, das dieser Code nicht wie erwartet einige Strings präsentiert, sondern folgende Fehlermeldungen:
Warning: file(/Ausgabetest.php): failed to open stream: Datei oder Verzeichnis nicht gefunden in /opt/lampp/htdocs/Ausgabetest.php on line 51
Warning: implode(): Invalid arguments passed in /opt/lampp/htdocs/Ausgabetest.php on line 52
Warning: preg_match_all(): in /opt/lampp/htdocs/Ausgabetest.php on line 53
Array ( )
Eine ab dem dritten Warning:... gleiche Fehlermeldung erhalte ich, wenn ich $_SERVER['PHP_SELF'] gleich als Argument in preg_match_all() einfüge. $trick4= wegzulassen macht keinen Unterschied.
Anscheinend kann das Skript nicht auf sich selbst zugreifen? $_SERVER['PHP_SELF'] dient aber doch genau dazu? Das ist eigentlich auch nichts anderes als wenn mehrere Clients auf den selben Server zugreifen oder wenn sich ein Skript zur Verarbeitung von Formulardaten selbst aufruft. Liege ich damit völlig falsch oder liegen nur handwerkliche Fehler vor?
Ranma