Probleme mit Encoding auf Linux
Jan Peters-Anders
- php
Hallo zusammen,
nachdem ich vor zwei Wochen ein Problem in meiner Anwendung dank dieses Forums gelöst habe stehe ich nun vor einem weiteren: Ich führe aus einem Servlet heraus auf der Kommandozeile in Linux eine php Datei mit dazugehörigen Parametern aus. Das Ganze wir von Servlet aus so aufgrufen:
Runtime.getRuntime().exec(php_command).waitFor();
das php_command sieht laut Java Konsole so aus:
/usr/bin/php-cgi /usr/local/tomcat[...]/check_file.php /usr/local/tomcat/[...]/2006_8_26_21633789_outfile.csv ';' 1 0 0
Was das Ganze macht soll hier nicht zur Debatte stehen, nur das an dieser Stelle ';' ein CSV Delimiter (ein Semikolon) an das php Programm (das übrigens von einem Projektkollegen geschrieben wird) übergeben werden soll. PHP nimmt das Ganze auch, wenn ich den String in die Linux Konsole paste, wenn das Servlet den Befehl mit obigem Kommando ausführt, will das php Programm den Delimiter anscheinend nicht verstehen und liest nur die erste Zeile des CSV Files. Ich habe mal nachgesehen: Mein Linux hat locale en_UTF-8 in der php.ini steht z.B. bei iconv:
Directive Local Value Master Value
iconv.input_encoding ISO-8859-1 ISO-8859-1
iconv.internal_encoding ISO-8859-1 ISO-8859-1
iconv.output_encoding ISO-8859-1 ISO-8859-1
Kann hier das Problem liegen? Oder ist das Problem eher beim Java VM Encoding zu suchen? Dann wäre ich bei PHP natürlich völlig falsch...
Danke schon mal und schönes WE noch
Jan
Hallo,
Runtime.getRuntime().exec(php_command).waitFor();
das php_command sieht laut Java Konsole so aus:
/usr/bin/php-cgi /usr/local/tomcat[...]/check_file.php /usr/local/tomcat/[...]/2006_8_26_21633789_outfile.csv ';' 1 0 0
Wenn es so aussieht, dann wird versucht /usr/bin/php-cgi mit den Parametern
/usr/local/tomcat[...]/check_file.php /usr/local/tomcat/[...]/2006_8_26_21633789_outfile.csv ';' 1 0 0
aufzurufen.
Was das Ganze macht soll hier nicht zur Debatte stehen, nur das an dieser Stelle ';' ein CSV Delimiter (ein Semikolon) an das php Programm (das übrigens von einem Projektkollegen geschrieben wird) übergeben werden soll. PHP nimmt das Ganze auch, wenn ich den String in die Linux Konsole paste,
Diesen String, den Du oben angegeben hast?
wenn das Servlet den Befehl mit obigem Kommando ausführt, will das php Programm den Delimiter anscheinend nicht verstehen und liest nur die erste Zeile des CSV Files.
Kann das PHP-Script check_file.php nicht zunächst mal testweise ausgeben, welche Parameter es übergeben bekommen hat?
Ich habe mal nachgesehen: Mein Linux hat locale en_UTF-8 in der php.ini steht z.B. bei iconv:
Das encoding kann hier kaum schuld sein. Alle Zeichen in Deinem Programmaufruf sind ASCII-Zeichen. Die haben sowohl in ISO-8859-1 als auch in UTF-8 den selben code. Das ";" ist z.B. Hex 3B.
viele Grüße
Axel
Hallo,
Wenn es so aussieht, dann wird versucht /usr/bin/php-cgi mit den Parametern
/usr/local/tomcat[...]/check_file.php /usr/local/tomcat/[...]/2006_8_26_21633789_outfile.csv ';' 1 0 0
aufzurufen.
Was ws ja auch soll ;-)
Diesen String, den Du oben angegeben hast?
Ja, das funktiniert wie gesagt auch...
Kann das PHP-Script check_file.php nicht zunächst mal testweise ausgeben, welche Parameter es übergeben bekommen hat?
Können wir mal probieren, aber wie gesagt, das Ganze tut das was es soll...
Das encoding kann hier kaum schuld sein. Alle Zeichen in Deinem Programmaufruf sind ASCII-Zeichen. Die haben sowohl in ISO-8859-1 als auch in UTF-8 den selben code. Das ";" ist z.B. Hex 3B.
Gut zu wissen, dann kanns daran ja nicht liegen.
viele Grüße
Axel
Danke und Gruß zurück
Jan
Hallo,
Kann das PHP-Script check_file.php nicht zunächst mal testweise ausgeben, welche Parameter es übergeben bekommen hat?
Können wir mal probieren, aber wie gesagt, das Ganze tut das was es soll...
Ach? Wo ist dann das Problem? ;-)
Gut zu wissen, dann kanns daran ja nicht liegen.
Ein Tipp noch als Schuss ins Blaue. Ich hatte schon Probleme mit Java Runtime.getRuntime().exec(command), wenn command Ausgaben erzeugte, allerdings unter Windows. Normalerweise erfolgt die Ausgabe ja nach stdout. Zumindest unter Windows scheint das aber per Runtime.getRuntime().exec(command) nicht zur Verfügung zu stehen. Das command wurde einfach nicht ausgeführt, solange bis ich die Ausgabe des command via Java entgegengenommen habe, wie es hier beschrieben ist.
viele Grüße
Axel