Mary: Dateiausgabe per JavaScript und PHP

Hallo,

ich moechte komplette PHP-Dateien, die ueberwiegend HTML-Code und ein paar PHP-Variablen enthalten per JavaScript ausgeben.

Was muss ich tun, damit Umbrueche entfernt, Apostrophs ersetzt sowie PHP-Variablen wirklich interpretiert ausgegeben werden?

Ob mit include oder fopen und eval ist mir voellig gleich.

Auszugebende Beispieldatei contact.inc.php:
<span class="box">
   <?= $street;?><br/>
   13100 Berlin<br/>
   Germany<br/>
</span>

################### Möglichkeit 1 ####################
<script type="text/javascript">
<!--
<?
$datei = fopen ('contact.inc.php', 'r');

if($datei) {
  while (!feof($datei)) {
   $buffer = fgets($datei, 1024);
   $buffer = eval('?>'.$buffer.'<?php');
// oder: eval ("$buffer = "$buffer";");
   $buffer = addslashes($buffer);
?>
   document.write('<?= $buffer;?>');
<?
  }
}
fclose ($datei);
?>
//-->
</script>

Welche eval-Methode ich auch wähle, das Ergebnis ist ein parse error.

################### Möglichkeit 2 ####################

<script type="text/javascript">
<!--
<?
$datei = fopen ('contact.inc.php', 'r');

if($datei) {
  while (!feof($datei)) {
    $buffer = fgets($datei, 1024);
?>
   document.write('<?= phpToJs($buffer);?>');
<?
  }
}
fclose ($datei);
?>
//-->
</script>

############## mit ##############
function phpToJs($text) {
  $text = str_replace("'","\'",$text);
  $text = str_replace("\r","",$text);
  $text = str_replace("\n","",$text);
  $text = str_replace("\t","",$text);
  return $text;
}

Die zweite Möglichkeit funktioniert zwar so, aber nur wenn sich in der Datei keine PHP-Variablen mehr befinden, was sehr unvorteilhaft ist.

Vielleicht ginge es ja auch über ein include. Dabei hatte ich aber die gleiche Schwierigkeit, PHP-Variablen wirklich zu interpretieren und vor allem, die Ümbrüche zu erkennen und umzuwandeln - dazu müsste ich vermutlich erst zwei, dreimal zwischenspeichern und umwandeln...das muss doch auch einfacher gehen?

Danke für Euer Bemühen,
Mary*

Vielen Dank fuer jeden Hinweis,
Mary*

  1. Moinsen,

    Suchst du evtl. include() ?

    Gruss/Danke/Bitte
    mfg nuss

    --
    Learning by Doing - probieren geht ueber studieren!
    Haetten das die Leute frueher nicht gemacht haetten wir heute keine Computer ;-)
    (Wer kaempft kann verlieren, wer nicht kaempft, hat schon verloren!)
    SELFCode: ie:{ fl:| br:< va:{ ls:< fo:{ rl:° n4:# ss:} de:< js:{ ch:} sh:) mo:| zu:{
    1. Moin Moin zurück,

      ein include inkludiert die gesamte Datei in einem Schritt.
      Du kannst keine Ersetzfunktonen auf ein include anwenden.
      Um Apostrophs, Umbrüche etc. umzuwandeln, müsste das Ergebins des includes zunächst zwischengelagert werden.
      Wie auch immer man das anstellt, wäre die Methode sicherlich keiner Dateiverarbeitung vorzuziehen, da dort bereits das Einlesen zeilenweise möglich wäre.

      document.write('<?= include('contact.inc.php');?>');

      erzeugt somit schon mal Zeilenumbrüche, die verhindern, dass die JavaScript-Funktion geschlossen wird.

      Abgesehen davon, dass das so also meines Wissens nach nicht geht - vielleicht kannst Du mir sagen, wie das Zeichen für einen Zeilenumbruch in einem include lautet? \n oder \r oder eine Kombination davon ist es jedenfalls nicht !?!?!

      Es dankt,
      Mary*

      1. Moinsen,

        ein include inkludiert die gesamte Datei in einem Schritt.

        richtig.

        Du kannst keine Ersetzfunktonen auf ein include anwenden.

        auf die eigentliche include-funktion nicht, das ist richtig.

        Um Apostrophs, Umbrüche etc. umzuwandeln, müsste das Ergebins des includes zunächst zwischengelagert werden.

        z.B. mit ob_start()

        Wie auch immer man das anstellt, wäre die Methode sicherlich keiner Dateiverarbeitung vorzuziehen, da dort bereits das Einlesen zeilenweise möglich wäre.

        Aber dann waere es ungeparst ;)

        document.write('<?= include('contact.inc.php');?>');

        erzeugt somit schon mal Zeilenumbrüche, die verhindern, dass die JavaScript-Funktion geschlossen wird.

        siehe oben, ob_start(), und wieso musst du das eigentlich per javascript machen ;) ?

        Abgesehen davon, dass das so also meines Wissens nach nicht geht - vielleicht kannst Du mir sagen, wie das Zeichen für einen Zeilenumbruch in einem include lautet? \n oder \r oder eine Kombination davon ist es jedenfalls nicht !?!?!

        doch, es ist \n
        ABER du kannst das nur in Ausgaben, Variablen usw verwenden, wenn du " (doppeltes Anfuehrungszeichen) verwendest.

        Gruss/Danke/Bitte
        mfg nuss

        --
        Learning by Doing - probieren geht ueber studieren!
        Haetten das die Leute frueher nicht gemacht haetten wir heute keine Computer ;-)
        (Wer kaempft kann verlieren, wer nicht kaempft, hat schon verloren!)
        SELFCode: ie:{ fl:| br:< va:{ ls:< fo:{ rl:° n4:# ss:} de:< js:{ ch:} sh:) mo:| zu:{
  2. Wieso nimmst du nicht file_get_contents() ?

    1. Moinsen,

      Wieso nimmst du nicht file_get_contents() ?

      Weil das Dokument geparst werden soll und string_get_contents() die Datei nur in einen String einliest - ungeparst.

      Ma koennte das natuerlich wieder per eval() auswerten aber eval ist boese.

      Gruss/Danke/Bitte
      mfg nuss

      --
      Learning by Doing - probieren geht ueber studieren!
      Haetten das die Leute frueher nicht gemacht haetten wir heute keine Computer ;-)
      (Wer kaempft kann verlieren, wer nicht kaempft, hat schon verloren!)
      SELFCode: ie:{ fl:| br:< va:{ ls:< fo:{ rl:° n4:# ss:} de:< js:{ ch:} sh:) mo:| zu:{
  3. Hallo,

    danke allen Empfehlungen - durch folgende Lösung werden auch PHP-Variablen interpretiert ausgegeben.

    script type="text/javascript">
    <!--
    document.write("<div class="containerOuter">");
    <?PHP
      $buffer = file_get_contents('include/datei.inc.php');
    ?>
      document.write('<? eval(phpToJs('?>'.$buffer.'<?'));?>');

    document.write("</div>");
    //-->
    </script>

    Mit der unveränderten Funktion phpToJs zum fitt machen für JS:
    <?PHP
    function phpToJs($text) {
     $text = str_replace("'","\'",$text);
     $text = str_replace("\r","",$text);
     $text = str_replace("\n","",$text);
     $text = str_replace("\t"," ",$text);
     $text = preg_replace("/ {2,}/"," ",$text);
     return $text;
    }
    ?>
    Gruss,
    Mary*