php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Thema geschlossen
 
LinkBack (1) Themen-Optionen Thema bewerten
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Alt 24-03-2011, 08:59
unixp
 Registrierter Benutzer
Links : Onlinestatus : unixp ist offline
Registriert seit: Mar 2011
Beiträge: 6
unixp befindet sich auf einem aufstrebenden Ast
Standard Downloadscript beschädigt Bilddateien

Ich habe ein PHP Script welches hochgeladene Dateien zum download anbietet.

Ich habe Probleme wenn Bilddateien hochgeladen werden, egal ob .jpg .gif. etc: Nach dem Download sind die Bilddateien beschädtig -> Keine Vorschau verfügbar. Auch .msi oder .exe Dateien sind nicht ausführbar/beschädigt.

.pdf Dateien zb. lassen sich nach dem Download komischerweise problemlos ausführen.

Ich habe mal eine heruntergeladene .png Datei mit einem Hex-Editor angesehen und herausgefunden das zusätzlich zwei Hex Werte mit dem Download mitgegeben werden.
Denn PNG-Dateien starten immer mit 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A. Das ist die Erkenntnis aus der Hexeditor-Nummer. Bei mir steht was davor, und das ist für meine Probleme verantwortlich.

Das ist das Download Script:
PHP-Code:
<?php
include_once("../upload/online.php");
$hash $_GET['hash'];

        
$sql "SELECT link FROM links WHERE hash = '".$hash."';";
        
$query mysql_query($sql);
        
        
$result mysql_fetch_assoc($query);
        
$url $result['link'];

        
        
$ext "SELECT filetype FROM links WHERE hash = '".$hash."';";
        
$query mysql_query($ext);
        
        
$result mysql_fetch_assoc($query);
        
$filetype $result['filetype'];
        
        
$dir "../upload/"
    if ((isset(
$url))&&(file_exists($dir.$url))) { 
       
header("Content-type: octet/stream"); 
       
header("Content-length: ".filesize($dir.$url.$filetype)); 
       
header('Content-Disposition: attachment; filename="download.'.$filetype.'"'); 
       
readfile("$dir$url"); 
    } else { 
       echo 
"No file selected"
    } 
?>
Wenn ich die hochgeladene Datei direkt vom Zielverzeichnis manuell herunterlade funktioniert es. Also es liegt an diesem Script. Nur an was?

Geändert von unixp (24-03-2011 um 09:13 Uhr)
  #2 (permalink)  
Alt 24-03-2011, 09:12
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Morgen.

Schau Dir mal die Diskussion zu dem Thema und zu Content-type: octet/stream an:

Wie kann ich Download erzwingen? - homepage-forum.de - Hilfe für Webmaster!

mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
  #3 (permalink)  
Alt 24-03-2011, 09:36
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

wird der nicht sowieso
PHP-Code:
header("Content-Type: application/octet-stream"); 
geschrieben ?
__________________

Wer LESEN kann, ist klar im Vorteil!
  #4 (permalink)  
Alt 24-03-2011, 09:42
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

...genau das meinte ich.

mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
  #5 (permalink)  
Alt 24-03-2011, 09:46
unixp
 Registrierter Benutzer
Links : Onlinestatus : unixp ist offline
Registriert seit: Mar 2011
Beiträge: 6
unixp befindet sich auf einem aufstrebenden Ast
Standard

Gut habe ich geändert. Aber immer noch das gleiche Problem.

Würde es was bringen wenn man alle einzelnen mime Werte manuell in das Script hinzufügt?

PHP-Code:
header('Content-type: {mime}'); //hier mime eintragen 


{mime} = ersetzen durch mime, siehe: PluginDoc: Windows (Liste der MIME-Typen)

Edit:
ok an dem liegts auch nicht. Habe zum testen mal
PHP-Code:
       header("Content-Type: image/jpeg"); 
       
header("Content-Type: image/jpg"); 
und eine jpeg Datei heruntergeladen -> Keine Vorschau verfügbar.

Geändert von unixp (24-03-2011 um 09:49 Uhr)
  #6 (permalink)  
Alt 24-03-2011, 09:53
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Versuch das sonst mal so aufzubauen dein Script:

Dateifunktionen und Programmausführung - Wie realisiere ich einen Dateidownload mit PHP?

Alternative:

Datei-Download mit PHP erzwingen

mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
  #7 (permalink)  
Alt 24-03-2011, 10:17
unixp
 Registrierter Benutzer
Links : Onlinestatus : unixp ist offline
Registriert seit: Mar 2011
Beiträge: 6
unixp befindet sich auf einem aufstrebenden Ast
Standard

Habe es mal wie im ersten Link aufgebaut. Allerdings speichert er jetzt alle Dateien mit genau 9bytes ab.

Mein Code:
PHP-Code:
<?php
include_once("../upload/online.php");
$hash $_GET['hash'];

        
$sql "SELECT link FROM links WHERE hash = '".$hash."';";
        
$query mysql_query($sql);
        
        
$result mysql_fetch_assoc($query);
        
$url $result['link'];

        
        
$ext "SELECT filetype FROM links WHERE hash = '".$hash."';";
        
$query mysql_query($ext);
        
        
$result mysql_fetch_assoc($query);
        
$filetype $result['filetype'];
        
        
$dir "../upload/"
        
        
$dateiname basename($url);
        
$groesse filesize($dir.$url.$filetype);
        
        
        
header("Content-Type: application/octet-stream");
        
header('Content-Disposition: attachment; filename="download.'.$filetype.'"'); 
        
header("Content-Length:".$groesse);
        
readfile($dir.$url.$filetype);
?>
  #8 (permalink)  
Alt 24-03-2011, 10:22
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

also ich liefere alle Dateien mit folgenden Code-Zeilen aus , egal was für ein Dateityp

PHP-Code:
        $Dateiname basename($Datei);
        
$Groesse filesize($Datei);
        
$file=fopen($Datei,'r');
        if (
$file) {
            
header("Pragma: public");
            
header("Expires: 0");
            
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
            
header("Cache-Control: private",false);
            
header("Content-Type: application/force-download");
            
header("Content-Type: application/octet-stream");
            
header("Content-Type: application/download");
            
header("Content-Disposition: attachment; filename=\"".$Dateiname."\";");
            
header("Content-Description: File Transfer");
            
header("Content-Transfer-Encoding: binary");
            
header('Content-Length: '.$Groesse );
            
flush();
            while (!
feof($file)) {
                print(
fread($file,4096));
                
flush();
            }
        }
        
fclose($file);
        die(); 
an diesen Script-block übergibst du als $Datei den Pfad incl. Dateinamen (zb "/home/www/files/123.jpg" ) und den Rest machen die Header -Anweisungen ...

Nicht erschrecken, dass es soviele sind ... aber das war nötig, weil mein Script auch mitm IE 6 arbeiten muss .. Firefox kommt mit erheblich weniger Anweisungen aus, macht aber mit diesem Header-Aufruf auch das, was er soll

und bevor du fragst... erfolgreich getestet mit
Word-Dateien, Anwendungen, PDF, Bilder (png , jpeg, gif), CSV für Excel
__________________

Wer LESEN kann, ist klar im Vorteil!
  #9 (permalink)  
Alt 24-03-2011, 13:38
unixp
 Registrierter Benutzer
Links : Onlinestatus : unixp ist offline
Registriert seit: Mar 2011
Beiträge: 6
unixp befindet sich auf einem aufstrebenden Ast
Standard

Ich habe mal diverse Content-Types getestet.
Aktuell hab ich die Konfig so:

PHP-Code:
<?php
include_once("../upload/online.php");
$hash $_GET['hash'];

    
$sql "SELECT link FROM links WHERE hash = '".$hash."';";
    
$query mysql_query($sql);
   
    
$result mysql_fetch_assoc($query);
    
$url $result['link'];

   
    
$ext "SELECT filetype FROM links WHERE hash = '".$hash."';";
    
$query mysql_query($ext);
   
    
$result mysql_fetch_assoc($query);
    
$filetype $result['filetype'];
   
    
$dir "../upload/";
    if ((isset(
$url))&&(file_exists($dir.$url))) {
            
header("Pragma: public");
            
header("Expires: 0");
            
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
            
header("Cache-Control: private",false);
            
header("Content-Type: application/force-download");
            
header("Content-Type: application/octet-stream");
            
header("Content-Type: application/download");
            
header("Content-length: ".filesize($dir.$url));
            
header("Content-Disposition: attachment; filename=\"".$url."\";");
            
header("Content-Description: File Transfer");
            
header("Content-Transfer-Encoding: binary");
            
readfile("$dir$url");
    } else {
       echo 
"No file selected";
    }
?>
Die config ähnelt deiner. Ich verstehe bloss nicht wo er etwas dem Download "mitgibt" damit es nicht funktioniert und die Dateien beschädigt sind.
  #10 (permalink)  
Alt 24-03-2011, 13:55
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von unixp Beitrag anzeigen
Ich habe mal eine heruntergeladene .png Datei mit einem Hex-Editor angesehen und herausgefunden das zusätzlich zwei Hex Werte mit dem Download mitgegeben werden.
Und welche ...?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
  #11 (permalink)  
Alt 24-03-2011, 14:22
unixp
 Registrierter Benutzer
Links : Onlinestatus : unixp ist offline
Registriert seit: Mar 2011
Beiträge: 6
unixp befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Und welche ...?
Ich erhalte den zusätzlichen Wert 20 0A 0A, siehe:

http://www.abload.de/img/hexcode1dfc.jpg

PNG-Dateien starten immer mit 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A. Das ist die Erkenntnis aus der Hexeditor-Nummer. Bei mir steht was davor, und das ist für meine Probleme verantwortlich.

Bloß wodurch wird das ausgelöst?
  #12 (permalink)  
Alt 24-03-2011, 14:30
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von unixp Beitrag anzeigen
Ich erhalte den zusätzlichen Wert 20 0A 0A
Also ein Leerzeichen und zwei Linefeeds.

Zitat:
Bloß wodurch wird das ausgelöst?
Vermutlich dadurch, dass es irgendwo in deinem PHP-Script drin steht - außerhalb der <?php ... ?>-Bereiche.

Dass du damit keine “headers already sent”-Fehlermeldung bekommst, liegt wohl an aktiviertem output buffering. (Wenn du die Stelle also nicht selber findest, dann output buffering mal deaktivieren - dann wird die Meldung dich darauf hinweisen, an welcher Stelle diese Ausgabe stattfand.)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
  #13 (permalink)  
Alt 24-03-2011, 15:11
unixp
 Registrierter Benutzer
Links : Onlinestatus : unixp ist offline
Registriert seit: Mar 2011
Beiträge: 6
unixp befindet sich auf einem aufstrebenden Ast
Standard

Ich habe in der /etc/php5/apache2/php.ini das output_buffering von 4096 auf Off gestellt.

Ich erhalte dann beim Download nur Hieroglyphen im Fenster als Ausgabe.

Ich habe nochmal das komplette Script auf falsche Leerzeichen und Umbrüche geprüft aber nichts gefunden...
  #14 (permalink)  
Alt 24-03-2011, 15:14
JensClasen
 Registrierter Benutzer
Links : Onlinestatus : JensClasen ist offline
Registriert seit: Mar 2011
Beiträge: 1
JensClasen befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von unixp Beitrag anzeigen
PNG-Dateien starten immer mit 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A. Das ist die Erkenntnis aus der Hexeditor-Nummer. Bei mir steht was davor, und das ist für meine Probleme verantwortlich.
Also crosspostings find ich ja schon frech - aber der hier ist besonders frech...

In diesem Thread steht:

Zitat:
Zitat von Jens Clasen
PNG-Dateien starten immer mit 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A. Das ist die Erkenntnis aus der Hexeditor-Nummer. Bei Dir steht was davor, und das ist für Deine Probleme verantwortlich.

In Deinem Fall halt ein Leerzeichen (0x20) hinter ?> und drei Zeilenumbrüche (0x0A) danach. Im Include stehen keine mehr - das würde man im Hexeditor sonst gesehen haben.
Dazu fällt mir langsam nichts mehr ein...

Gruß Jens
  #15 (permalink)  
Alt 24-03-2011, 15:15
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

dann guck auch mal was VOR <?PHP steht ^^

ein Leerzeichen und 2 mal Enter vermutlich
__________________

Wer LESEN kann, ist klar im Vorteil!
Thema geschlossen

Lesezeichen


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/101401-downloadscript-beschaedigt-bilddateien.html
Erstellt von For Type Datum
[Erledigt] Downloadscript beschädigt Datei - php.de This thread Refback 22-04-2015 01:23

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
schneller Bildupload von großen Bilddateien ToM80 BRAINSTORMING PHP/SQL/HTML/JS/CSS 4 24-10-2007 11:03
Datei ist beschädigt nach Download hausi18 PHP Developer Forum 28 29-03-2007 22:51
Downloadscript Specter Apps und PHP Script Gesuche 2 01-01-2007 18:48
Schadenersatzforderung - TFT beschädigt Quetschi Out of Order 5 18-08-2005 20:38
Bilddateien autom. verkleinern Deve l'Oper PHP Developer Forum 4 25-04-2003 09:43

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:18 Uhr.