Hallo,
ich suche nach Eingabeparameter fuer PHP-Programme in
Shell-Umgebung. Folgendes soll funktioneren:
- das PHP-Programm soll die Standarteingabe STDIN lesen koennen
- das PHP-Programm soll in die Standartausgabe STDOUT schreiben koennen
- das PHP-Programm soll in die Fehlerausgabe STDERR schreiben koennen
- das PHP-Programm soll Paramter $argv auswerten koennen
- Code der Ausserhalb con <?php ... ?> steht soll nicht ausgegeben werden
Die ersten vier Bedienungen erfüllen sich bei einen einfachen PHP-Prog.
fast von allein. Bei der letzten Bedienung habe ich Schwierigkeiten.
Unten habe ich ein Beispielprogramm (zum Ausprobieren den Text in Datei
kopieren, mit chmod das x-Flag setzen und starten). Das Beispielprogramm
soll zeigen, dass jedes Byte ausserhalb der Script-Tags <? ... ?> stoert
(nicht den PHP interpreter sondern in der Ausgabe des Programms).
Nimmt man den "ich bin boeser Text!" Text heraus (einschliesslich
Leerzeichen und Retruns!!!) läuft das Programm einwandfrei - sind
ausserhalb der Script-Tags irgendweche Zeichen eingebaut, stoeren
sie in der Standartausgabe.
Das Beispielprogramm selbst (wandelt ein Binärfile in Hexdaten oder
umgekehr um) intressiert mich dabei wenig!!! Mir geht es nur darum,
wie ich den PHP-Interpreter anweisen kann, alle oben genannten
Bedienungen gleichzeitig zu erfüllen.
Das ich bereits eine Menge mit den PHP Parametern rumgespielt habe,
versteht sich von selbst.
Danke für Antwort, Gerold
[Dateianfang]
#!/usr/bin/php
<?php
// Programm zum ein-, aus- und verhexen
switch ($argv[1])
{
case '-e':
while (! feof(STDIN))
{
fwrite(STDOUT, bin2hex( fread(STDIN, 65536) ) );
};
break;
case '-d':
while (! feof(STDIN))
{
fwrite(STDOUT, pack( 'H*', fread(STDIN, 65536) ) );
};
break;
default:
$error = "Program $argv[0]\n";
$error .= " usage: cat infile | $argv[0] [-e|-d] > outfile\n";
$error .= " parameter: \n";
$error .= " -e encode (binhex)\n";
$error .= " -d decode (binhex)\n";
fwrite(STDERR, $error);
};
?>
Ich bin boeser Text!
[Dateiende]