In Perl eine PHP-Datei einbinden
Marcus Hammel
- perl
0 fastix®0 fastix®0 Marcus Hammel
Hallo,
ich habe das folgende Problem:
ich möchte in einem perl-Skript nicht mehr eine statische HTML Datei einbinden wie in dem Codeschnipsel zu sehen ist, sondern eine PHP Datei, die über Variablen die HTML Datei erstellt.
unless ($b_is_shell_include) {
# build and print header:
&PrintTemplate(0, 'header.htm', $::Rules{'language'}, %::const);
$| = 0;
}
Wenn in in dem Beispiel jetzt einfach header.htm in die header.php umändere so wird die PHP-Seite nur geladen, aber die PHP Skripte nicht ausgeführt.
Ich sehe also im Output z.B.
<?php
// Variabeln
$title = "..."
?>
<?php
....
?>
Wie kann ich dennoch die PHP Datei einbinden?
MfG,
Marcus
Moin!
http://de.selfhtml.org/perl/funktionen/systemaufrufe.htm
gibt Antworten.
Insbesondere der Systemaufruf sollte Dich interessieren:
http://de.selfhtml.org/perl/funktionen/systemaufrufe.htm#system
Eines noch:
$string=system('/usr/bin/php -q phpskript.php');
wäre Dein Weg, wenn PHP keine HTML-Header senden soll. Diese Information (Option '-q') ist ganz gut versteckt.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
$string=system('/usr/bin/php -q phpskript.php');
Ach so die Variablen...
$string=system('export hallo="Hallo Welt!"; /usr/bin/php -q test.php');
test.php:
<?php
print $_ENV['hallo'];
?>
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hi,
Wozu dient der Teil /usr/bin/php?
Um den Pafd zur Datei zu beschreiben? Sind die relativen Pfade vom Server zu nennen oder von deinem sichtbaren Root?
Moin!
Wozu dient der Teil /usr/bin/php?
Unix/Linux kann, außer in graphischen Oberflächen (KDE, Gnome, "Sun Java Desktop") mit der Dateiendung nichts anfangen. Deshalb musst Du den Skriptinterpreter aufrufen und dem dann auch noch "sagen", welches Skript er auszuführen hat.
Das PHP-binaray liegt bei Unix oder Linux regelmäßig unter /usr/bin/php oder es dorthin verlinkt. Der Pfad muss für das jeweilige System passen (und passt regelmäßig auch). Auch das export foo="bar" ist Syntax für die Shell, also für Unix oder Linux, dürfte also auf (Win-)DOSen zu Problemen führen. Wer komplizierte Dinge für Webserver strickt hat aber regelmäßig eine passende Testumgebung (Oder?)...
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
Natürlich der absolute Pfad des Betriebssystems. Es kann natürlich sein, dass /usr/bin im Pfad des Benutzers steht, der das Skript aus Sicht des Servers ausführt. Das kannst Du aber rausbekommen:
print "Content-type: text/plain\n\n"; # Header senden, hier für Textdatei
$string=echo $PATH
; # <- führt die shell aus, es sind Backticks!
print $string;
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Guten Morgen,
Mh ich komme nicht weiter, trotz deiner guten Hilfestellungen...
habe nun unless ($b_is_shell_include) {
# build and print header:
&PrintTemplate(0, '$stringheader', $::Rules{'language'}, %::const);
$| = 0;
}
Weiter oben im Dokument definiere ich dann die Variable:
$stringheader=system('/usr/bin/php -q header.php');
Es kommt aber der Fehler Fehler: unable to find file '$stringheader'....
Moin!
Mh ich komme nicht weiter, trotz deiner guten Hilfestellungen...
habe nun unless ($b_is_shell_include) {
# build and print header:
&PrintTemplate(0, '$stringheader', $::Rules{'language'}, %::const);
$| = 0;
}Weiter oben im Dokument definiere ich dann die Variable:
$stringheader=system('/usr/bin/php -q header.php');Es kommt aber der Fehler Fehler: unable to find file '$stringheader'....
Vielleicht sollte der Template-Aufruf eher so lauten:
&PrintTemplate(0, $stringheader, $::Rules{'language'}, \%::const);
Weshalb du oben die Quotes um die Variable setzt ist mir schleierhaft, aber das sollte helfen. Allerdings kommt mir die Fehlermeldung etwas verdächtig vor, denn $stringheader enthält die PHP-Ausgabe und PrintTemplate möchte anscheinend einen Dateinamen. Ich denke, dass du an dieser Stelle noch einmal nachschauen solltest.
Viele Grüße,
Robert
Ich glaube ich muss es aufgeben, es wird nun kein Fehler mehr angezeigt.
Ich habe nun einfach per
print $stringheader;
geschaut, was da herauskommt und es kommt nur
"256" heraus. Ist mir absolut unerklärlich warum...
Mfg
Moin!
http://de.selfhtml.org/perl/funktionen/systemaufrufe.htm#system
"Wenn Sie daran interessiert sind, welche Ausgaben das andere Programm erzeugt, sollten Sie die Funktion Seite open mit dem Zeichen | oder nach oben qx(...) bzw. ...
(Backticks) benutzen."
#! /usr/bin/perl -W
use strict;
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/plain\n\n";
$strToDo="export foo='bar'; export foo2='bar2'; /usr/bin/php -q test.php;";
$ergebnis1=gx($strToDo);
$ergebnis2=$strToDo
;
$ergebnis3=system($strToDo);
print $ergebnis1;
print "\n---------------------------------------------------------------\n";
print $ergebnis2;
print "\n---------------------------------------------------------------\n";
print $ergebnis3;
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®