Sven Rautenberg: und PHP <- geht das überhaupt?

Beitrag lesen

Aloha!

Ein Perl-Script erzeugt eine Ausgabe zu der ich aber - je nachdem ob es eine bestimmte Variable gibt  - eine Fußzeile hinzufügen möchte (Variable wird per get übertragen).

Du hast vielfältige Möglichkeiten:

1. Include per URL:
include("http://www.example.com/cgi-bin/perlscript.pl?parameterstring-urlencoded");

Diese Möglichkeit ist die schlechteste von allen. Dein PHP-Script muß einen kompletten HTTP-Request absetzen und das Ergebnis empfangen. Das dauert. Dafür kannst du das Perl-Script PHP-Code ausgeben lassen, der dann ausgeführt wird.

Allerdings Vorsicht: Erstens passe höllisch auf, wenn die Include-Adresse variabel gelassen wird (wenn von extern ein Angreifer eine anderere URL mit einem bösen PHP-Script einschleusen kann, hast du verloren!), und zweitens funktioniert das nur, wenn die fopen-url-wrappers-Option aktiv ist (und die kann, um genau diesen Angriff auszuschließen, deaktiviert sein).

2. Aufrufen eines externen Systemkommandos:
Dazu kennt PHP die Kommandos passthru(), popen() und den Backtick-Operator. exec() und system() sind eher ungeeignet, um Massenoutput durchzureichen.

2a: Im Prinzip könntest du auf diese Weise an einer bestimmten Stelle den Output eines Perl-Skriptes direkt durchschleusen:
passthru("/pfad/zum/perlskript.pl");
Vorher und hinterher kann PHP seine HTML-Teile ausgeben - das Perl-Skript darf dann natürlich keine komplette Seite mehr ausgeben.
http://www.php.net/manual/en/function.passthru.php

2b: Du kannst auch die Ausgabe des Perl-Skriptes in PHP zunächst in eine Variable speichern und dann nochmals parsen, um Variablen zu ersetzen.
http://www.php.net/manual/en/language.operators.execution.php
http://www.php.net/manual/en/function.popen.php

3. Natürlich kannst du die Sache auch von Perl aus angehen. Lösung 1 funktioniert mit Perl im Prinzip genauso, nur eben perl-artig (und IMO etwas aufwendiger) mit dem Modul LWP::Simple.

4. Du kannst PHP-Skripte auch lokal als Skript ausführen, wenn der Interpreter passend eingerichtet ist. Dann gelten im Prinzip alle Möglichkeiten von Lösung 2.

- Sven Rautenberg