Download einer Exceltabelle aus gesichertem Bereich heraus

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

  • Download einer Exceltabelle aus gesichertem Bereich heraus

    Hallo ihr, ich hab ein kleines Problem und bevor ihr fragt:
    Nein, ich hab nicht so viel Ahnung von PHP.

    Ich möchte eine spezielle Exceldatei aus einem geschützten Ordner downloaden. Der User tut dies aber in einem Fenster, was durch eine Sessionverwaltung nicht den Header ändern kann. Wie kann ich das umgehen? Normalerweise kann man ja einfach mit <a href... aus dem gesicherten Bereich rausgehen. Aber wie mach ich das, wenn ich auf die Datei nur mit fopen("../files/mitgliederliste.xls","r"); zugreifen kann?

    Vielen Dank im Voraus für eure Hilfe,
    DerTobi

  • #2
    Schau mal in der php-Doku nach readfile() - das sollte dir vielleicht helfen...

    Kommentar


    • #3
      Hallo danke erstmal für die Hilfe,

      ich hab das gemacht, mit folgendem einfachen Code:

      <?
      include("../../lib/prepend.php");
      page_open(array("sess" => "Session", "auth" => "Auth"));

      if ((User::istUserInAbteilung($auth->auth["uid"], "1"))
      && (User::hasPermByName($auth->auth["uid"], "judo.trainer"))){

      readfile ("../../../files/mitglieder.xls");

      }
      else {
      ?>

      Das Problem ist, dass die Datei zwar angezeigt wird, aber nur als kryptischer Code als Text innerhalb des Fensters (Aber auch nur im main-Frame)

      Vermutlich ist hier genau das Problem, was ich meinte, dass die Headerinformation nicht geändert werden kann.

      Mfg,
      DerTobi

      Kommentar


      • #4
        Dann mal das hier anschauen

        http://de2.php.net/header

        und für die Funktion das für dich passende hieraus auswählen:

        http://de.selfhtml.org/diverses/mime...htm#uebersicht

        EDIT:
        Fragestellung zu ungenau gelesen, sorry
        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
        Schön - etwas Geschichte kann ja nicht schaden.
        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

        Kommentar


        • #5
          Normalerweise sendet dein Webserver auf den Request einer xls-Datei automatisch die richtigen Header. Aber nun requestest du ja eine PHP-Datei, das heißt bevor der Webserver das erste Zeichen der Ausgabe deines Scripts sendet, setzt er die üblichen Header davor, die man eben auch für HTML-Seiten kricht.

          Das kannst du unterbinden, indem dein Script noch vor der ersten Ausgabe selbst Header sendet.

          Schau http://php.net/header, in den User-Notes steht sicher auch ein Beispiel für Excel-Dateien.

          Kommentar


          • #6
            Wenn ich den header versuche manuell zu ändern, sagt er mir, dass ich das nicht kann, da der header früher schon einmal gesetzt wurde.

            Da ich aber nur Unter-FTP-User bin, kann ich mich nur in dem bewegen, was vorher programmiert wurde.
            Sprich ich kann den header nicht nachträglich ändern und auch nicht vorher im Programmcode streichen.

            Ich hab von Javascript keine Ahnung, aber kann man vielleicht ein neues Fenster öffnen und dann den Inhalt der Datei in dieses reinschreiben und dessen header ändern?

            Mfg,
            DerTobi

            Kommentar


            • #7
              Original geschrieben von dobberph
              Wenn ich den header versuche manuell zu ändern, sagt er mir, dass ich das nicht kann, da der header früher schon einmal gesetzt wurde.
              du redest von "Cannot add header information - headers already sent ..."?

              Da ich aber nur Unter-FTP-User bin, kann ich mich nur in dem bewegen, was vorher programmiert wurde.
              Sprich ich kann den header nicht nachträglich ändern und auch nicht vorher im Programmcode streichen.
              und was sucht deine frage dann im programmierforum ...?
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Wenn du sicher bist, dass dein Code keinerlei Ausgabe macht, bevor du header() aufrufst, dann gehts auch.

                Da du FTP-Zugang hast, kannst du nämlich auch Code hochladen. Und den direkt aufrufen. Sofern kein Rewriting stattfindet (du kannst auch eine .htaccess hochladen), müßte es dann klappen.

                Kommentar


                • #9
                  Die Fehlermeldung ist genau die, die ich meine.

                  --> Im Programierforum schreibe ich, weil ich programmiere.

                  --> Das ganze ist die Homepage eines grossen Vereins. Diese ruft, wenn man auf mein Abteilungssymbol klickt, meine Seite auf innerhalb der Hauptseite auf. Deshalb kann ich keine Headerinformation erneut senden.
                  Ich kann sogar nur innerhalb des Frames "main" meine Seiten schreiben.

                  Gibt es keine Möglichkeit ein neues Fenster zu öffnen und da den Inhalt reinzupacken und dort den Header zu ändern?

                  Mfg,
                  DerTobi

                  Kommentar


                  • #10
                    <a href="sec_download.php" target="_blank">Download Excel-Datei</a> ?

                    Kommentar


                    • #11
                      Dann fehlt aber jegliche Rechteüberprüfung, dann kann jeder der den Namen sec_download.php kennt auch auf diese zugreifen.


                      Mfg,
                      DerTobi

                      Kommentar


                      • #12
                        <a href="sec_download.php" target="_blank">Download Excel-Datei</a>
                        Dann übergib doch einfach auch die Session ID an download. Diese wird
                        dann erst geprüft --> wenn der User nicht berechtigt ist dann setze einen
                        Header ab und leite ihn auf die Anmeldeseite.
                        Wenn der User jedoch berechtigt ist, dann soll die download.php die Excel
                        Datei einlesen und mit den korrekten Headern an den Client senden.
                        Das Verzeichnis mit der xls Datei sicherst du am besten mittels
                        einer .htaccess Datei ab und gibt's den Zugriff drauf nur dem Localhost. So
                        kann keiner die Datei direkt auftrufen.

                        Gruss

                        tobi
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #13
                          Ich bin gerade am versuchen, einfach mal die Datei ohne Sicherheitsüberprüfung auszugeben. Dafür hab ich eine .php Datei erstellt, wo nur folgendes drin steht:
                          <?
                          header("Content-type: application/m************cel");
                          readfile ("../../../files/mitglieder.xls");
                          ?>

                          Leider bin ich doof, also was passiert, ist, dass der ganze Inhalt wieder in dem Fenster kryptisch angezeigt wird.

                          Was mach ich falsch?

                          Mfg,
                          DerTobi

                          Kommentar


                          • #14
                            Versuchs mal damit

                            PHP-Code:
                            $file "../../../files/mitglieder.xls";

                            header("Content-length: " filesize($file));
                            header("Content-name: " $file);
                            header("Content-Type: application/m************cel");
                            header("Content-Disposition: attachment; filename=$file"); 
                            gruss Chris

                            [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                            Kommentar


                            • #15
                              Versuch doch gleich damit: http://www.php.net/manual/de/function.header.php#48538

                              Oder setze wenigstens den richtigen Content-Type (siehe Link).

                              Kommentar

                              Lädt...
                              X