Vorweg muss ich etwaige Hoffnungen auf einen direkten PHP Parser in Ruby bzw. Rails enttäuschen. In diesem Post möchte ich jedoch erklären wie man PHP Scripte (oder andere Shell Commands) ausführt und dann in Rails bzw. Ruby weiterverarbeitet. Wer sich etwas mit der Materie auskennt, ist verleitet system() oder exec() des Ruby Kernel Moduls zu verwenden, allerdings führen diese das gewünschte Script lediglich aus, ohne etwaige Ausgaben abzufangen. Ich möchte aber in meinem Beispiel das Ergebnis des externen Scriptes in einer Variable speichern.

Anstatt Kernel#system() habe ich Backticks verwendet und so sieht das ganze dann aus:
[sourcecode lang=“ror“]
ergebnis = `php -f script.php`
p "Ergebnis: #{ergebnis}"
[/sourcecode]

Angenommen man möchte nun noch Variablen von Ruby an das PHP Script übergeben, hängt man diese einfach an das Ende des Shell Befehls an, dabei werden mehrere Variablen mittels Leerzeichen getrennt:
[sourcecode lang=“ror“]
ergebnis = `php -f script.php #{@var1} #{@var2}`
p "Ergebnis: #{ergebnis}"
[/sourcecode]

In PHP können diese Variablen dann wie folgt abgerufen werden:
[sourcecode lang=“php“]
$var1 = $_SERVER[‚argv‘][1];
$var2 = $_SERVER[‚argv‘][2];
[/sourcecode]

Der Index 0 des $_SERVER[‚argv‘] Arrays beinhaltet übrigens den Scriptnamen.

Natürlich muss man man bei solchen Operationen sehr vorsichtig sein, denn ein direkter Zugriff auf den Prompt des Servers bietet natürlich gefährliche Angriffsmöglichkeiten. Daher sollte man doppelt und dreifach sicher gehen, dass Benutzer der Website keinen schädlichen Code über die verwendeten Variablen einschleusen können.

There are currently no comments.