Marcus Hammel: In Perl eine PHP-Datei einbinden

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

  1. 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®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
    1. 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®

      --
      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
      1. 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?

        1. 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®

          --
          Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
          1. 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®

            --
            Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
            1. 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'....

              1. 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

                1. 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

                  1. 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;

                    Falls Fehlerausgabe im Browser kommen soll:

                    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®

                    --
                    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development