php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.09.2004, 16:43  
Gast
 
Beiträge: n/a
Standard Fpassthru-Dateidownload stoppt die PHP verarbeitung

Hallo bin noch neu hier aufm board aber hab nen kniffliges vielleicht auch stink einfaches problem wo ich nid wirklich draufkomm nach langem knobeln und internet durchstoebern..

ich hoffe ihr koennt mir helfen =)

ausgangslage: ich habe ein file in dem ich MySQL inhalt aus ner datenbank auslese, daraus ne tabelle aufbaue und anzeige. in der Tabelle hat es links die nen download starten sollen.

wenn ich auf einen der links clicke ruft sich das php selbst nochmal auf aber diesmal mit einem argument welches dann dazu fuehrt dass er die download funktion aufruft (am ende des php)

im vorfeld klaert das php noch ab wenn ein link angeklickt wurde und updated die "anzahl" downloads in der tabelle und gibt dann die aktualisierte tabelle (mit den neuen anzahl downloads) aus.

Problem:
wenn ich nun einen link anklicke, dann sollte er folgendes tun (meiner logik nach) er sollte das uebergebene argument pruefen (in diesem fall die download_id) wenn sie vorhanden ist, die tabelle (mysql) aktualisieren, aktualisiert ausgeben, dann den download starten (weil die ganze bildschirmausgabe steht VOR dem funktionsaufruf).

was er macht, er oeffnet das "safe as" fenster aber er hat die bildschirmausgabe nicht aktualisiert. irgendwie wuergt mir meine funktion den restlichen seitenaufbau ab. wenn ich dann jedoch das php nochmal von hand aktualisiere im browser (rechtsklick aktualisieren), dann kommt die richtige ausgabe auf dem bildschirm...

was mach ich falsch oder was ist falsch ? =)

hier meine funktion. denn es scheint mir als ob es an der funktion liegen wuerde. wenn ich das download script ausklammere, dann funktioniert das ganze wunderpraechtig nur leider ohne download *sigh*

Greets

Thom aus der Schweiz

Code:
function download_file($fileName) {

	$fileDir = "./cape_tracks";
	$fileString=$fileDir.'/'.$fileName;
	if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){
		$fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1);
	}
	if(!$fdl=@fopen($fileString,'r')){
		die("Cannot Open File!");
	} else {
		header("Cache-Control:  no-cache, must-revalidate");
		header("Pragma: no-cache");
		header("Content-type: application/octet-stream");
		header("Content-Disposition: attachment; filename=\"".$fileName."\"");
		header("Content-length:".(string)(filesize($fileString)));
		fpassthru($fdl);
	}
}
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 27.09.2004, 22:34  
Gast
 
Beiträge: n/a
Standard

hi!

also als erstes mal deine bildschirmausgabe kann nicht richtig sein, wenn du den update deiner db erst nach der ausgabe machst. das müßte aber auch klar sein. setz deinen funktions aufruf mal nach ganz oben! dann wird er als erstes ausgeführt. dann müßte dein problem auch schon geklärt sein! allerdings würde ich nicht sagen das das ein fortgeschrittenes problem ist! *hihi*

greetz chefboss
  Mit Zitat antworten
Alt 27.09.2004, 22:44  
Gast
 
Beiträge: n/a
Standard

nunja =)

also das mit dem update nach der ausgabe stimmt so nicht ganz.. ich meine dann hab ichs etwas zweideutig geschrieben =)

konkret strukturiert sieht mein php so aus:

1. Dbconnect etc blabla
2. funktionsdefinitionen / variablendefinitionen (ebenfalls die download-function wie oben gepostet)
3. Datenbank auslesen.
4. datenbank ausgeben

jetzt hab ich es etwas umgebaut dass ich nicht mehrere phps machen muss und dass sich das file mit den links selber aufruft... konkret in diesem fall dann wenn es selbst aufgerufen wird mit dem richtigen argument passiert das

1. dbconnect etc blabla
2. definitionen
3. datenbank updaten
4. db neu auslesen
5. db ausgeben
6. download function aufrufen

vielleicht siehst du nu etwas klarer =)

der witz ist ich hab mal n paar diverse debugs gemacht und durch die "ausgabefelder" (print "<table blabla etc gaga) geht er durch aber auf dem screen kommt nix raus.. nur das download fenster... obwohl der funktionsaufruf zu unterst steht *kratz* irgendwie is das nid logisch fuer mich

php wird doch top-down abgearbeitet oder bin ich zu bloed ? (sarkastische frage *g*)

Greets
  Mit Zitat antworten
Alt 27.09.2004, 23:12  
Gast
 
Beiträge: n/a
Standard

hab nu n bissel rumgebastelt...

hab das problem nicht geloest aber umgangen... hab die download-function in ein fake-frame gesteckt. dort stoert es mich nicht wenn das frame nid aktualisiert wird

nicht ganz elegant aber es geht... aber waere doch noch froh wenn vielleicht jemand ne idee haette wie man das andere problem loesen koennte =)

Ich hab mal irgendwo auf der PHP.net seite was mit einem auge ueberfliegend gelesen dass wenn man mit fopen() arbeitet und ein file FIFO rausschickt dann die verarbeitung auf die usereingabe wartet und die restliche verabeitung schlicht und einfach stopt (oder wie in meinem fall abbricht) koennte das nen zusammenhang haben ?... irgendwie kommt mir das spanisch vor *sigh*

Greets
  Mit Zitat antworten
Alt 27.09.2004, 23:14  
Gast
 
Beiträge: n/a
Standard

okay! dann sieht das ganze ja doch anders aus! *g*
also irgendwie stöhrt mich dein header aufruf an der position.
hab mal ein bißchen geforscht!
http://www.php-resource.de/manual.php?p=function.header

und zum anderen warum arbeitest du mit einer datei? ich denke du haste ne db?!
  Mit Zitat antworten
Alt 27.09.2004, 23:21  
Gast
 
Beiträge: n/a
Standard

fpassthru funktioniert unter MACintosh nur leidlich - meist werden statt dem Download die Daten als RAW-Stream offeriert - sieht ziemlich kacke aus Falls das mal jemand über einen guten Lösungsansatz stolpert, bitte pm an mich.
  Mit Zitat antworten
Alt 27.09.2004, 23:24  
Gast
 
Beiträge: n/a
Standard

die db enthaelt links zu dateien (mp3's ... samples von audiodateien) die nicht wenn man auf den mp3-link klickt im IE wiedergegeben werden sollen sondern eine "save as" box oeffnen sollen =)

(P.S. sorry dass ich hier irgendwie nur nach und nach relevante sachen wiedergebe irgendwie binich heut nicht auf dem dampfer und nerve mich schon fast den ganzen tag ueber dieses problem)

hab mit den header types schon sicher 2 stunden rumgespielt und rumgesucht aber irgendwie gings nie wie ich will ...

habe schon beim Content type header "content-type: application/force-download" eingesetzt... hat nix genutzt.. hab schon diverse sachen (wie no-cache) im header schlicht und einfach weggelassen (weils z.b. auf php.net einige auch so haben)

bin total am ende mit meinem latein

kann das sein dass sogar ev. irgendwas in den apache settings (httpconf) zu aendern ist ? .. da hab ich auch schon geschaut aber nix relevantes gefunden .. hoechstens time outs aber da hab ich auch schon rumgespielt...

Greets
  Mit Zitat antworten
Alt 27.09.2004, 23:38  
Gast
 
Beiträge: n/a
Standard

claude_minette at hotmail dot com
30-Oct-2002 12:51

Code:
This code works fine with a download manager... maybe not the best solution, but the only one that works with IE!!!!!

It forces download, but gif file don't want to be downloaded!!! so I need to simply display them in browser...

NB $file is the result of a query on the file table...

require_once("auth.inc.php");
$attachment = (strstr($HTTP_USER_AGENT, "MSIE")) ? "" : " attachment"; // IE 5.5 fix.
//Content of file
if (!headers_sent()){
   $ficexp=explode('.',$file["orig_name"]);
   $ext=$ficexp[sizeof($ficexp)-1];
   if ($ext!='gif'){
           header('Cache-Control: no-cache, must-revalidate');
           header('Pragma: no-cache');
           header("Content-Type: application/force-download");
           header("Content-Length: ".filesize("files/".$file["save_name"]));
           header("Content-Disposition: ".$attachment."; filename=".$file["orig_name"]);
   }
   $fn=fopen("files/".$file["save_name"], "rb");
   fpassthru($fn);
}
else {
   MessageBox('Headers already sent, cannot force download!');
}

Min's
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
dateidownload stoppt, php fpassthru datei-download, php fpassthru, fpassthru, dateidownload stoppen, probleme mit php fpassthru datei-download, php download stoppen, fpassthru ausgabe, php download script ruft sich selbst auf, php downloadfunktion auth, php fpassthru audio file, fpassthru ohne download, fpassthru download, \force download\ fpassthru, php downloader fpassthru, strstr php ruft download auf, fpassthru filesize, php header fpassthru, fpassthru ie, http://www.php.de/php-fortgeschrittene/9850-erledigt-fpassthru-dateidownload-stoppt-die-php-verarbeitung.html

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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.