php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.03.2011, 11:30  
Benutzer
 
Registriert seit: 26.09.2006
Beiträge: 31
Floezen
Standard [Erledigt] Gesamtgröße eines Downloads wird nicht erkannt

Hallo,

ich benutze folgendes kleines Skript um einen Download zu erzwingen und den Herkunftsort zu verbergen. Das Skript funktioniert fast einwandfrei, mich stört nur, dass z.B. Safari nicht erkennt, wie groß die Datei insgesamt sein wird und damit auch keine Downloadzeit ermitteln kann. (Siehe Bild im Anhang.)


PHP-Code:
header("Content-type: ".$mime_type);
header("Content-Disposition: attachment; filename=$dl_dateiname");
header("Content-Length: ".filesize($datei));
readfile($datei); 
Hat jemand eine Idee wo der Hund begraben liegt? Was kann ich machen um das Problem zu beseitigen??

Danke & Grüsse
Flözen
Miniaturansicht angehängter Grafiken
erledigt-gesamtgroessye-eines-downloads-wird-nicht-erkannt-filesize.jpg  
Floezen ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 02.03.2011, 12:00  
Erfahrener Benutzer
 
Registriert seit: 04.08.2010
Beiträge: 287
PHP-Kenntnisse:
Fortgeschritten
zwutz wird schon bald berühmt werden
Standard

fortgeschritten?

schau mal, was als filesize übergeben wird
zwutz ist offline   Mit Zitat antworten
Alt 02.03.2011, 12:51  
Benutzer
 
Registriert seit: 26.09.2006
Beiträge: 31
Floezen
Standard

Zitat:
Zitat von zwutz Beitrag anzeigen
fortgeschritten?
Soll ich das Kommentieren?

Zitat:
Zitat von zwutz Beitrag anzeigen
schau mal, was als filesize übergeben wird
Die Größe der Datei in Byte - was denn sonst???
(Und ja, $datei existiert, sonst könnte sie ja nicht mit readfile() übergeben werden...)

Eigentlich ist dies das mehr oder weniger offizielle Codefragment, das auch im PHP Manual zu finden ist. Deswegen dürfte an dem Ausschnitt eigentlich nichts falsch sein.

Allerdings bin ich mir nicht so sicher, ob oder wie dieser Header vom Browser gelesen wird. Mit Live HTTP Headers für Firefox taucht Content-Length nämlich nicht auf...
Floezen ist offline   Mit Zitat antworten
Alt 02.03.2011, 12:56  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

PHP-Code:
echo "Content-Length: ".filesize($datei); 
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 02.03.2011, 13:16  
Benutzer
 
Registriert seit: 26.09.2006
Beiträge: 31
Floezen
Standard

Code:
Content-Length: 17863296
Gem. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html, Abschnitt 14.13 Content-Length kann ich da kein Fehler erkennen....
Floezen ist offline   Mit Zitat antworten
Alt 02.03.2011, 13:30  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Dann vermute ich mal das der Safari etwas absurd mit seiner cache-kontrolle umgeht ( ich habs selbst nie getestet ), aber schau dir mal die function und die weiteren user-comments dadrunter an:

http://www.php.net/manual/de/function.header.php#102175

Was auf den IE ( der deutlich mehr macken hat und hatte als jeder anderer Browser ) zutrifft, kann mitunter auch auf andere Browser zutreffen. Als beispiel: Google Chrome und Opera reagieren auf einen 204-Status ( No Content ) mit keiner ( für den User sichtbare ) Reaktion, Firefox + IE reagieren mit einem ref zu about:blank.

In deinem Fall heißt das: Du musst warscheinlich mehr Header senden, als aus deiner sicht und der Sicht des Servers notwendig wäre. ( Welchen Sinn macht schon ein browserseitiges Caching eines Downloads )
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 02.03.2011, 16:12  
Benutzer
 
Registriert seit: 26.09.2006
Beiträge: 31
Floezen
Standard

Das scheint es leider nicht zu sein.

Ich habe jetzt folgendes feststellen können:

1.) Wenn ich die Datei direkt lade (www.meinserver.de/files/datei.zip) wird folgender header ausgegeben:
Code:
HTTP/1.1 200 OK
Date: Wed, 02 Mar 2011 14:59:58 GMT
Server: Apache
Last-Modified: Tue, 01 Mar 2011 23:08:06 GMT
Etag: "a15e3-330bd1b-49d73de774180"
Accept-Ranges: bytes
Content-Length: 53525787
Vary: User-Agent
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: application/zip
Hier wird die Größe also korrekt angegeben.

2.) Wenn ich die Datei über readfile() mit folgendem Skript abrufe:
PHP-Code:
<?php
header
("Pragma: public"); 
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); 
header('Content-Length: 53525787'); 
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=test.zip");
readfile('/srv/www/vhosts/server.local/httpdocs/files/datei.zip');
?>
wird der 'Content-Length' Header einfach weggelassen:
Code:
HTTP/1.1 200 OK
Date: Wed, 02 Mar 2011 15:01:50 GMT
Server: Apache
Pragma: public
Expires: 0
Cache-Control: must-revalidate, post-check=0, pre-check=0, private
Content-Disposition: attachment; filename=test.zip
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/zip
Sobald readfile() aus dem Skript verschwindet, erscheint wieder ein 'Content-Length', allerdings nur mit der Länge des Skriptes.

Code:
Content-Length: 20
Es sieht also so aus, als würde

a) die manuelle Angabe eines Content-Length Headers ignoriert werden.

b) readfile() den Content-Length headers löschen...

Ich bin am Ende meines Lateins...
Floezen ist offline   Mit Zitat antworten
Alt 02.03.2011, 16:21  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

http://forum.bplaced.net/viewtopic.p...98f5b&start=10

Da wurde ein ähnliches Problem mit Content Encoding Faking behoben.

PHP-Code:
header("Content-Transfer-Encoding: binary");
header("Content-Encoding: plainbinary"); 
zu deinen existierenden Headern hinzufügen sollte den gewünschten Cross-Browser fähigen Erfolg bringen.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 02.03.2011, 17:20  
Benutzer
 
Benutzerbild von daemonTutorials
 
Registriert seit: 08.02.2011
Beiträge: 37
PHP-Kenntnisse:
Fortgeschritten
daemonTutorials zeigte ein beschämendes Verhalten in der Vergangenheit
daemonTutorials eine Nachricht über Skype™ schicken
Standard

Ich würde ja vorher die Dateigröße ermitteln und dann erst reinschreiben!
__________________
MfG DaemonTutorials - hoffe ich habe geholfen!

Mitwirkend: http://bogensport-lingen.de
daemonTutorials ist offline   Mit Zitat antworten
Alt 02.03.2011, 17:21  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Macht'er doch.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Zeilenumbrüche werden nur teils erkannt. RiggerofRiV PHP-Fortgeschrittene 1 12.03.2010 22:58
[Erledigt] RegEx Problem - Datum wird nicht richtig erkannt. LeCreuX PHP Tipps 2010 9 21.02.2010 20:21
[Erledigt] mod_rewrite, Datei Downloads und falsche Header kip Server, Hosting und Workstations 1 16.09.2009 12:37
Downloads zählen imported_FlasH PHP Tipps 2006 4 26.04.2006 01:55
Hilfe! global variable nicht im funktion erkannt Bruce PHP Tipps 2006 3 24.01.2006 09:46
downloads anbieten, sicherheit? Promaetheus PHP Tipps 2007 7 27.12.2005 17:14
downloads kennzeichen faultier PHP Tipps 2007 3 17.11.2005 23:44
downloadzähler mit mehreren Downloads auf einer seite PHP Tipps 2005-2 6 26.07.2005 16:05
[Erledigt] Downloads nicht anzeigen lassen... PHP Tipps 2005-2 0 24.06.2005 17:38
downloads schützen notyyy PHP Tipps 2005-2 6 11.06.2005 20:06
Downloads verwalten Beitragsarchiv 5 04.05.2005 14:50
Homepgage fürs Handyweb zugänglich machen / Downloads Off-Topic Diskussionen 5 20.04.2005 21:02
Festplatte wird net erkannt necrom0rb Off-Topic Diskussionen 3 12.12.2004 19:36
Downloads Gruppen zuweißen? imported_dex PHP Tipps 2004-2 9 12.11.2004 22:29
[Erledigt] &quot;echte&quot; Downloads zählen: wie geht sowas? PHP Tipps 2004 22 28.06.2004 09:50

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
filesize übergeben, php headers readfile download zip safari, dateigröße wird beim download nicht ermittelt, download gesamtgröße, header filezize wird nicht erkannt, php content length, dateigröße php header, php content-length, php download größe nicht erkannt, php header content-length, php dowloadgröße floezen, php \content-length:\., downloadzeit ermitteln, file.php download phpbb \about:blank\, php header \about:blank\, php readfile filesize or dateigröße or größe, floezen header(\content-type: \.$mime_type);, it https bug pragma private content-length 0, readfile dateigröße, html download gesamtgrösse

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:27 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