Textdatei nach Speicherung downloaden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Textdatei nach Speicherung downloaden

    Hallo, ich schon wieder.

    Kurz als Einleitung, was ich mit PHP in diesem Fall tue, und das auch soweit funktionert.

    1. Ich gebe einen Text in ein Textfeld ein.
    2. Ich öffne per Klick ein Popup. Der Text aus der Textarea wird als JS-Variable an die URL geheftet á la window.open('popup.php?text=DasisteinText'), natürlich escaped bzw. urlencoded.
    3. Im Popup wird der an die URL geheftete Text per GET ausgelesen und in das Popup geschrieben.
    4. Der Text wird parallel beim Öffnen des Popups in eine txt-Datei auf dem Server gespeichert:
    PHP-Code:
    <?
    if($_GET['download']) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/force-download');
    header('Content-Length: ' . filesize($file));
    header('Content-Disposition: attachment; filename=' . $_GET['filename']);
    readfile($file);
    echo "Download";
    } elseif(!isset($_GET['download'])) {
    $textvar = $_GET['text'];
    $textvarbr = nl2br($_GET['text']);
    $dateiname = strtotime("now").".txt";
    $ordner = "datatext/";
    $file = $ordner.$dateiname;

    $fp = fopen ($file, "a+");
    fwrite ($fp , $textvar);
    fclose ($fp);
    echo "Schreiben";
    }
    ?>
    Da in der URL kein ?download=1 mitgeben wurde, führt er richtigerweise den Code des else-Zweiges aus. Die Datei ist damit nun auf dem Server vorhanden.

    Jetzt gebe ich einen Link darunter an, der so aussieht:
    PHP-Code:
    <?
    echo '<a href="'.$_SERVER['PHP_SELF'].'?filename='.basename($file).'&download=1">Den gespeicherten Text downloaden</a>';
    ?>
    Bei Klick wird die GET-Var download mitgegeben und der if-Zweig ausgeführt, womit die gespeicherte Datei eigentlich heruntergeladen werden soll.

    Wenn ich den Link klicke, wird zwar das Download-Fenster geöffnet, aber in der Datei steht dann nur "Download", also quasi nur den Wert des echo's auf dem if-Zweig. Es sollte aber der Inhalt der Datei gedownloaded werden.

    Was ist daran falsch?

    Grüße

  • #2
    setz mal an den anfang deines script

    PHP-Code:
    error_reporting(E_ALL); 
    ich vermute dass er dann eine warnung oder so ausgibt, dass er die datei nicht findet, weil sie nicht im selben ordner liegt?!

    mfg

    p.s.
    basename()
    http://de.php.net/manual/de/function.basename.php
    www.myplaner.de

    Kommentar


    • #3
      Hallo extr3m0,

      danke für deinen Hinweis. Du hast wahrscheinlich recht. In der Zwischenzeit habe ich das PHP-cript nämlich in das selbe Verzeichnis kopiert in das die .txt-Dateien gespeichert werden und es funktionierte.

      Er öffnet jetzt die richtigen txt-Dateien per Download, allerdings fehlen sämtliche Umbrüche (die ich in die Textarea eingegeben habe). Wenn ich mir die Dateien auf dem Server ansehe, sind die Umbrüche vorhanden. Nur beim Download verschwinden sie offenbar.

      Wie kommt das?

      Kommentar


      • #4
        naja, es wird als html datei interpretiert... also musst du am anfang (vor dem readfile) ein "<pre>" und danach ein </pre> ausgeben, oder aber die zeilenumbrueche durch <br> ersetzen, was du beim abspeichern machst, indem du das hier

        PHP-Code:
        fwrite ($fp $textvar); 
        zu dem hier umwandelst:

        PHP-Code:
        fwrite ($fp $textvarbr); 
        mfg
        www.myplaner.de

        Kommentar


        • #5
          Leider hilft das auch nichts.

          Wenn ich es mit $textvarbr mache, werden nur die <br>'s mit hineingeschrieben. Aber die Umbrüche sind immer noch weg.

          So sieht es aus, wenn ich es mit $textvarbr in die Datei schreibe und anschaue (auf dem Server):
          Code:
          test test test etsts sada<br />
          <br />
          test test test etsts sada
          Und so, wenn ich sie dowloade:
          Code:
          test test test etsts sada<br /><br />test test test etsts sada
          Genau dasselbe Bild, wenn ich die <br>'s nicht hineinschreibe. Umbrüche auf dem Server vorhanden, beim Download nicht mehr.

          Er scheint irgendwie nicht die Datei auf dem Server zu nehmen beim Downloaden oder sie zumindest umzuschreiben irgendwie (denn auf dem Server sind die Umbrüche direkt zu sehen).

          Ich sehe aber irgendwie nicht, WO er dies umschreibt (oder was das Script auch immer macht..).

          Kommentar


          • #6
            Hallo, ich noch mal.

            Es geht um die auf dem Server gespeicherte txt-Datei, die ich per header downloaden will. Wenn ich die Datei öffne, fehlten alle Umbrüche; seltsamerweise aber nur, wenn ich die Datei dann mit dem Windows Editor öffne. Wenn ich stattdessen WordPad auswähle, sind sie da.

            Selbes Verhalten kenne ich vom Up- und Downloaden im Binär-/ASCII-Modus. Kann ich fopen sagen, dass er die Datei im Binär-Modus schreiben soll?

            Grüße

            Kommentar


            • #7
              Wenn ich die Datei öffne, fehlten alle Umbrüche; seltsamerweise aber nur, wenn ich die Datei dann mit dem Windows Editor öffne
              zeilenumbrüche für notepad \r\n

              gruß
              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Hallo Kropff,

                jetzt habe ich einige Minuten überlegt, und ich weiß nicht wo ich dem Script mitteilen soll, für einen Umbruch \r\n zu setzen. Ich übergebe den Text per Javascript (escaped/urlencoded), er steht dann also in der URL á la "popup?text=Ich%20bin%20ein%20Text

                Der übergebene Text sieht folgendermaßen aus:
                Code:
                popup.php?text=Textdatei%20nach%20Speicherung%20downloaden%0A%0ATextdatei
                %20nach%20Speicherung%20downloaden
                Offenbar ist die Zeichenfolge '%0A' ein urlencodeter Umbruch.

                Wenn ich den übergebenen Text via $_GET auslese, wie kann ich den "encoded Umbruch string" (lol) mit \r\n ersetzen und in die Datei schreiben lassen?

                Original geschrieben von Kropff
                zeilenumbrüche für notepad \r\n

                gruß
                peter

                Kommentar


                • #9
                  PHP-Code:
                  $text str_replace ('%0A',"\r\n"$_GET['string']); 
                  oder ggf. vorher ein url_decode einsetzen.

                  gruß
                  peter
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Kommentar


                  • #10
                    Hallo,

                    just in diesem Moment habe ich es damit nun auch lösen können, nur etwas verschieden; macht aber sicherlich das selbe:
                    Code:
                    $textvar = $_GET['text'];
                    $textvar = ereg_replace("\n","\r\n",$textvar);
                    Im Editor werden nun auch die Umbrüche dargestellt.

                    Vielen lieben Dank.

                    Grüße

                    ps. extr3m0 und Kropff 4 moderator =P

                    Kommentar


                    • #11
                      Original geschrieben von DerUnsympath
                      Code:
                      $textvar = $_GET['text'];
                      $textvar = ereg_replace("\n","\r\n",$textvar);
                      und mal wieder ein sinnloser Regex wo es auch ein str_replace tun würde (ganz zu schweigen davon, dass ereg im Gegensatz zu preg veraltet und langsam ist, was aber beides in diesem Falle vollkommen überdimensioniert ist)

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar

                      Lädt...
                      X