irato: Variablen an JavaScript übergeben

Sorry, die Geschichte hat einen Bart, aber ich komme einfach nicht weiter:
Ich möchte eine ASCII-Datei mit php einlesen und deren Inhalt in einem String an JS übergeben.
Das einlesen geschieht und klappt wie folgt:
<html>...
<?php
 $datei = "message.txt";
 $File = fopen($datei, 'r+');
 $txt = fread($File, filesize($datei));
 fclose($File);
 echo $txt;
?>
Das JS:
<script type="text/javascript">
 info = "<?php echo $txt;?>";
 document.write(info);
</script>
</html>
Aber irgendwas läuft mit der Übergabe falsch (und ich weiss einfach kein Bescheid!)
Wie um Gotteswillen kriege ich das gebacken?

  1. Hallo,

    Ich möchte eine ASCII-Datei mit php einlesen und deren Inhalt in einem String an JS übergeben.

    Rein formal finde ich an deinem Codeauszug nichts auszusetzen.

    Aber...

    <script type="text/javascript">

    info = "<?php echo $txt;?>";
    document.write(info);
    </script>

      
    Ich vermute mal ganz stark, dass der Dateiinhalt $txt unmaskierte Steuerzeichen (z.B. Zeilenumbrüche) oderAnführungszeichen oder ähnliches Gerümpel enthält. Leider gibst du keine brauchbaren Anhaltspunkte:  
    Gibt es Errors oder Notices von PHP? Wenn ja, welche?  
    Wird ein Javascript-Fehler gemeldet? Welcher?  
      
    Bedenke, dass $txt nichts enthalten darf, was innerhalb eines JS-Strings so nicht stehen darf!  
      
    So long,  
     Martin  
    
    -- 
    Zwischen Leber und Milz  
    passt immer noch'n Pils.
    
    1. Hallo Martin,

      Rein formal finde ich an deinem Codeauszug nichts auszusetzen.

      dachte ich auch...

      Ich vermute mal ganz stark, dass der Dateiinhalt $txt unmaskierte Steuerzeichen ...

      "abc" kein Return o.ä.

      Gibt es Errors oder Notices von PHP? Wenn ja, welche?

      keine!

      <script type="text/javascript">
       info = "<?= getenv($txt); ?>";
       document.write(info);

      info = "<?= getenv("REMOTE_ADDR"); ?>";
       document.write(info);

      </script>

      Wäre im Script ein Error, würde die ip nicht angezeigt! Könnte es sein, dass $txt der Fehler ist?
      Gibt es nicht auch andere Möglichkeiten der Variablenübergabe?
      Ich werd noch varuckt!
      ;)

      1. Hallo,

        Ich vermute mal ganz stark, dass der Dateiinhalt $txt unmaskierte Steuerzeichen ...
        "abc" kein Return o.ä.

        Sicher? Auch nicht am Dateiende, so dass es dann als

        info = "abc
         "

        im Quelltext stehen würde?

        Gibt es Errors oder Notices von PHP? Wenn ja, welche?
        keine!

        Gut. Das habe ich vermutet.

        info = "<?= getenv($txt); ?>";
        document.write(info);
        info = "<?= getenv("REMOTE_ADDR"); ?>";
        document.write(info);

        Wäre im Script ein Error, würde die ip nicht angezeigt!

        Bisher hast du uns ja noch nicht verraten, was angezeigt wird und was nicht.

        Könnte es sein, dass $txt der Fehler ist?

        Ja, $txt ist sehr wahrscheinlich der Fehler. Untersuche diesen String mal Zeichen für Zeichen, und zwar schon serverseitig im PHP-Script. Ich bin mir ziemlich sicher, da findest du irgendein Zeichen drin, das du da nicht haben möchtest.
        Gegenprobe: Setz mal im PHP-Script einfach $txt = "teststring"; und sieh nach, was dann rauskommt.

        Good luck anyway,
         Martin

        --
        F: Was sagt die kleine Kerze zur großen Kerze?
        A: Ich gehe heute nacht aus!
        1. <?php
           $datei = "message.txt";
           $File = fopen($datei, 'r+');
           $abc = fread($File, filesize($datei));
           fclose($File);
           $abc = "teststring";
           echo "<p>";
           echo $abc;
           echo "</p>";
          ?>
          <script type="text/javascript">
           info = "<?= getenv($abc); ?>";
           document.write(info);
           document.write("abc");
          </script>
          angezeigt wird:
          teststring
          abc
          Browser-Quelltext:
          <p>teststring</p><script type="text/javascript">
           info = "";
           document.write(info);
           document.write("abc");
          </script>

          1. Hi,

            <?php
            [...]
            $abc = "teststring";
            echo "<p>";
            echo $abc;
            echo "</p>";
            ?>
            <script type="text/javascript">
            info = "<?= getenv($abc); ?>";
            document.write(info);
            document.write("abc");
            </script>

            das ist mal ein schön reduziertes Test-Szenario. :-)

            angezeigt wird:
            teststring
            abc

            Richtig. Die erste Zeile "teststring" ist noch die direkte Ausgabe deines PHP-Scripts (im Quelltext: "<p>teststring</p>"), die Zeile darunter ist das Ergebnis von document.write("abc"); im Javascript. Das document.write(info) wird garantiert auch ausgeführt, aber info dürfte ein Leerstring sein. Denn mit getenv() greifst du in PHP auf die Variablen zu, die im PHP-Environment hinterlegt sind, sowie auf die GET- POST- und COOKIE-Daten. Aber nicht auf normale Script-Variablen. Die Anweisung <?= getenv($abc); ?> gibt daher einen Leerstring aus.
            Informativer wäre es gewesen, wenn du info="<?= $abc; ?>"; notiert hättest. Dann hättest du erkannt, dass die Variablenübergabe an sich klappt (teststring wäre zweimal ausgegeben worden).

            Hast du inzwischen untersucht, was nach
             $abc = fread($File, filesize($datei));
            _wirklich_ in $abc steht?

            So long,
             Martin

            --
            Frauen sind wie Elektrizität: Fasst man sie an, kriegt man eine gewischt.
            1. Hallo, hallo, das war der Fehler!

              <?= getenv($abc); ?>
              ist ursächlich für den Leerstring!

              info="<?= $abc; ?>";
              ist die Lösung für NullAchtFuffzehnVaris (und für mich) gewesen...

              1000 Dank!

    2. Als Ergänzung:
      Schau dir mal _nicht_ den PHP-Code an, sondern öffne mal die Quelltextansicht im Browser. Das sollte schon helfen zu erkennen was da wohl schief läuft, wobei Martin's Vermutung extrem wahrscheinlich ist.

      MfG
      Rouven

      --
      -------------------
      ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
      1. Hi Rouven,

        Klasse Idee, so siehts aus:

        php zeigt "abc" mit echo tadellos an...

        Quelltext:

        <script type="text/javascript">
         info = "";
         document.write(info);

        info = "89.53.119.249";
         document.write(info);

        </script>

        also info wird ohne Fehler (und ohne Inhalt) ausgegeben, soviel zur Syntax-Richtigkeit...

  2. Hi,

    Das JS:
    <script type="text/javascript">
    info = "<?php echo $txt;?>";
    document.write(info);
    </script>
    </html>

    Warum schreibst Du per PHP etwas ins Javascript, was das Javascript dann direkt ins Dokument schreibt?
    Wäre es da nicht sinnvoller, den Umweg über Javascript wegzulassen und die Ausgabe direkt per PHP ins Dokument zu schreiben?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.