XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   [php/http] datei an client senden (http://xhtmlforum.de/showthread.php?t=34840)

Xenon 21.03.2005 16:33

[php/http] datei an client senden
 
hi there!

hatte dieses thema hier schon einmal eingebracht, aber die diskussion nam leider einen weg, den ich nicht weiterverfolgen wollte, deswegen hier ein neuer thread:

dummerweise fehlt es mir an kenntnis der webserver/http-interna, um diesen problem selber zu lösen, deswegen würde ich mich über produktive antworten/lösungsansätze/lösungen/etc sehr freuen!

also: ich habe eine funktion, die einen dateinamen auf dem server übergeben bekommt und diese an den client schicken soll. normal per a href geht das leider nicht, da die datei in einem htaccess-geschützen verzeichnis liegt und der user dieses passwort nicht kennt.
aktuell lese ich die datei in den header und schicke sie als attachment mit (soweit ich das richtig verstanden habe). problem ist, der quellcode repräsentiert NICHT meinen wissensstand, ich bin auf diesem gebiet sozusagen newbie :roll:

Code:

header("HTTP/1.1 200 OK");
header("Content-type: \"application/octet-stream\"");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\"");
ob_end_clean();
readfile($filename);

anmerkungen: am anfang des scripts steht ein ob_start(); der der code oben wird irgendwann in der mitte des scripts ausgeführt.

+++ das problem +++

lade ich die datei mit hilfe des scripts runter, hängt das script den html-quellcode, der NACH dem runterladen der datei noch ausgegeben wird in der datei hinten an. sprich, die datei besteht nach dem runterladen aus dem eigentlichen inhalt gefolgt von html-code...
die datei auf dem server ist in ordnung.

jemand ne idee, warum und vor alleM wie man es loswird?

danke schonmal im vorraus!

gruss

wahsaga 21.03.2005 17:16

Re: [php/http] datei an client senden
 
Zitat:

Zitat von Xenon
hatte dieses thema hier schon einmal eingebracht,

und da wurde auch schon eine lösung vorgeschlagen: http://www.xhtmlforum.de/viewtopic.p...wnload+obstart

netspy 21.03.2005 17:59

Re: [php/http] datei an client senden
 
Zitat:

Zitat von Xenon
hatte dieses thema hier schon einmal eingebracht, aber die diskussion nam leider einen weg, den ich nicht weiterverfolgen wollte, deswegen hier ein neuer thread:

Darf ich dich aus deinem letzten Thread mal zitieren?
Zitat:

Zitat von Xenon
vielen danke erst einmal für die hilfe!!! es hat geklappt mit dem ob_end_clean();

Wo liegt das Problem?

Mario

Xenon 21.03.2005 18:00

ja - dabei ging es darum, dass mit readfile() alle daten im buffer mitgesendet wurden, der html-code der aktuellen seite also VOR dem eigentlichen inhalt der datei in selbige eingefügt wurde.
ein leeren des buffers mit ob_end_clean() löste das problem soweit.

leider nur auf den ersten blick :( denn nun hängt der restliche html-code der aktuellen seite HINTEN an der datei dran. mit ein paar buffer-funktionen hab ichs schon versucht, aber das klappt leider nicht.

wie schon gesagt kenne ich mich mit der materie (http-protokoll etc) zu wenig aus um zu wissen, WAS GENAU er macht und WARUM dieser fehler auftritt...

netspy 21.03.2005 18:11

Dann beende das Script nach dem readfile() halt mit die(). So schwer kann es doch nun eigentlich nicht sein, mal in der PHP-Doku nachzuschauen. Außerdem ist deine Frage schon wieder im falschen Forum, denn mit XHTML hat das nichts zu tun. Dafür ist "Serveradministration und serverseitige Scripte" zuständig.

Mario

Xenon 21.03.2005 18:24

hmm - also der code, der danach kommt hat schon seinen sinn und soll auch ausgeführt werden, deswegen ist die() nicht gerade eine gute lösung!

netspy 21.03.2005 18:36

Zitat:

Zitat von Xenon
hmm - also der code, der danach kommt hat schon seinen sinn und soll auch ausgeführt werden, deswegen ist die() nicht gerade eine gute lösung!

Dann machst du halt nach dem readfile() noch mal ob_start() und am Ende des Script auch noch mal ob_end_clean().

Mario

Xenon 21.03.2005 18:48

danke für die antwort, aber das funktioniert leider nicht :(

nebenbei gefragt: gäbe es denn eine andere (funktionierende) möglichkeit, die datei zum client zu senden?

netspy 21.03.2005 19:05

Zitat:

Zitat von Xenon
danke für die antwort, aber das funktioniert leider nicht :(

Bei dieser "ausführlichen" Fehlerbeschreibung kann ich dir leider nicht helfen. Grundsätzlich funktioniert das jedenfalls problemlos.

Zitat:

Zitat von Xenon
nebenbei gefragt: gäbe es denn eine andere (funktionierende) möglichkeit, die datei zum client zu senden?

Ich denke das Senden selbst funktioniert? Warum brauchst du dann eine andere Möglichkeit?

Mario

Xenon 21.03.2005 19:17

hi again!

es funktioniert dahingehend nicht, dass kein unterschied zu vorher feststellbar ist :(
(ich habe DIREKT nach dem readfile() ein ob_start() eingebaut. aber egal ob mit flush() am ende des scripts oder ohne (AFAIK brauchts das nicht unbedingt): der html-code, der nach dem senden des headers kommt, steht nach wie vor in der datei...

nach einen anderen möglichkeit frage ich, weil ich selber nicht weiss, OB es andere möglichkeiten gibt, ob die jetzt gewählte vielleicht extremst umständlich ist und ein anderer ansatz evtl sinnvoller/besser wäre... ärgere mich hiermit schon ziemlich lange rum...

im grossen und ganzen: ein bisschen mehr einblick in meine scriptstruktur:

es gibt ein "main-script", nennen wir es mal main.php, das etwa wie folgt aufgebaut ist:

Code:

<?php
ob_start();

require("datei_mit_mysql_kennwörtern_etc.php");
require("datei_mit_funktionen_etc.php");

// seitenaufbau (header/menü/layout/etc)

// steuerungsvariable $page bestimmt, welche seite angezeigt werden soll:
switch($page)
{
 include($page . ".php");
}

// footer

?>

included wird alsoauch die datei, die besagten code-schnipsel enthält, mit dem die datei runtergalden werden soll
ich weiss: keine templates :( keine objektorientierung :(
das habe ichauf später verschoben, wenn mein server endlich mal php5 gelernt hat - bislang weigert sich der admin standhaft...


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:04 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2022, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2022