php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.07.2006, 16:36  
Erfahrener Benutzer
 
Registriert seit: 15.06.2005
Beiträge: 193
Zangelo
Standard Wie funktioniert dieses Script?

Hallo,
ich hab ein Downloadscript gesucht, und gefunden.
Jetzt intressiert es mich, wie es funktioniert, nur ich versteh es nicht so ganz.

Meine Fragen:
1. Für was brauche ich die Mime-Typen?
2. Wieso tut es die richtige URL der Datei "verschleiern"?
3. Ist das gut, oder gibts bessere?

Nun das Scrit:
PHP-Code:
<?
#############################################################################
##                                                                         ##
## Name:     PHP-Download-Script                                           ##
## Version:  1.2                                                           ##
## Autor:    Dennis Böge                                                   ##
## Co-Autor: Matthias Henckell                                             ##
## Web:      [url]www.boegesoft.de[/url] , [url]www.mathesoft.de[/url]                           ##
## email:    [email]download_file@boegesoft.de[/email]                                    ##
## Lizenz:   Freeware                                                      ##
## Haftung:  Weder Dennis Böge noch mathesoft haften für folgenden         ##
##           Quelltext                                                     ##
##           Benutzung auf eigene Gefahr.                                  ##
##                                                                         ##
## Beschreibung: Das PHP-Download-Script kann Dateien auch aus nicht       ##
##               über www erreichbaren Ordnern zum Download anbieten.      ##
##               Das sichert die eigenen Dateien vor dem "klau" über       ##
##               Direktverlinkung. Des Weiteren lässt sich somit auf       ##
##               einfachste Weise aus einem PHP-Script eine Datei zum      ##
##               Download anbieten.                                        ##
##                                                                         ##
## Antleitung: -(1)- Laden sie das Script auf auf ihre Seite               ##
##             -(2)- Optional schützen sie das File per .htaccess          ##
##             -(3)- Binden sie das Script mit                             ##
##                     include('download_file.php');                       ##
##                   in ihre PHP-Seite ein                                 ##
##             -(4)- Senden sie das File an den Browser mit                ##
##                     send_file_to_browser('path','filename');            ##
##             -(5)- Achten sie darauf, daß KEIN TEXT vorher an den        ##
##                   Browser gesendet wurde!                               ##
##             - (6) Erweitern sie evtl. die Mime-Typen um eigene Typen    ##
##                                                                         ##
##                                                                         ##
## History:                                                                ##
##                                                                         ##
## - 18.06.04 - Version 1.2 - Änderungen von Bögesoft                      ##
##  Ausbau nicht genutzer Routinen                                         ##
##  Pfad wird komplettiert                                    ##
##                                                                         ##
## - 24-05-03 - Version 1.1 - Änderungen von MATHEsoft                     ##
##  MIME-Typ werden anhand von $real_filename erkannt (Dateierweiterung),  ##
##  wenn nicht, wird application/octetstream verwendet (klappt meistens);  ##
##  Filesize wird jetzt in jedem Fall ermittelt                            ##
##                                                                         ##
##  - 15-05-03 - Version 1.0 - Basisversion von Bögesoft                   ##
## Fehler: Der MIME-Type wird noch nicht automatisch erkant. Wer eine      ##
##         mögichkeit dafür kennt bitte an [email]mime-type@boegesoft.de[/email] mailen.  ##
##         Danke.                                                          ##
#############################################################################




function send_file_to_browser($filepath$real_filename)
{
      global 
$_SERVER$HTTP_USER_AGENT$HTTP_SERVER_VARS;

      
$filename dirname(__FILE__).$filepath.$real_filename;


// Manuelle Mime-Type-Deklaration
      
$tmp explode("."$real_filename);

           if (
$tmp[1] == 'exe')       $mimetype "application/x-msdownload";
      else if (
$tmp[1] == 'zip')       $mimetype "application/zip";
      else if (
$tmp[1] == 'txt')       $mimetype "text/plain";
      else if (
$tmp[1] == 'gz')        $mimetype "application/gzip";
      else if (
$tmp[1] == 'xls')       $mimetype "application/msexcel";
      else if (
$tmp[1] == 'doc')       $mimetype "application/msword";
      else if (
$tmp[1] == 'gif')       $mimetype "image/gif";
      else if (
$tmp[1] == 'jpeg')      $mimetype "image/jpeg";
      else if (
$tmp[1] == 'jpg')       $mimetype "image/jpeg";
      else if (
$tmp[1] == 'pdf')       $mimetype "application/pdf";
      else if (
$tmp[1] == 'pdf')       $mimetype "application/pdf";
      else if (
$tmp[1] == 'pdf')       $mimetype "application/pdf";
      else                             
$mimetype "application/octetstream";


// Browsererkennung
      
if (!empty($_SERVER['HTTP_USER_AGENT']))                $HTTP_USER_AGENT $_SERVER['HTTP_USER_AGENT'];
      else if (!empty(
$HTTP_SERVER_VARS['HTTP_USER_AGENT']))  $HTTP_USER_AGENT $HTTP_SERVER_VARS['HTTP_USER_AGENT'];
      else if (!isset(
$HTTP_USER_AGENT))                      $HTTP_USER_AGENT '';

      if (
ereg('Opera(/| )([0-9].[0-9]{1,2})'$HTTP_USER_AGENT$log_version))  $browser_agent 'opera';
       else if (
ereg('MSIE ([0-9].[0-9]{1,2})'$HTTP_USER_AGENT$log_version)) $browser_agent 'ie';
      else                                                                       
$browser_agent 'other';

// Mime-Type-Anpassung (Für IE und Opera)
      
if ( ($mimetype == 'application/octet-stream') || ($mimetype == 'application/octetstream')|| ($mimetype == 'image') )
      {
            if ( (
$browser_agent == 'ie') || ($browser_agent == 'opera') )            $mimetype 'application/octetstream';
            else                                                                      
$mimetype 'application/octet-stream';
      }


// Compression AUS
      
@ob_end_clean();
      @
ini_set('zlib.output_compression''Off');

// Header senden
      
header('Pragma: public');
      
header('Content-Transfer-Encoding: none');
      
header('Content-Type: ' $mimetype '; name="' $real_filename '"');
      if (
$browser_agent == 'ie')      header('Content-Disposition: inline; filename="' $real_filename '"');
      else                             
header('Content-Disposition: attachment; filename=' $real_filename);
      
$size = @filesize($filename);
      if (
$size 0header('Content-length: '.$size);else header('Content-length: '.@strlen(@file_get_contents($filename)));
      
readfile($filename);
      exit;
}
?>
__________________

www.das-forum.us Das Forum dazu
Zangelo ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 26.07.2006, 18:09  
Erfahrener Benutzer
 
Benutzerbild von DER_Brain
 
Registriert seit: 18.04.2005
Beiträge: 1.541
PHP-Kenntnisse:
Fortgeschritten
DER_Brain ist zur Zeit noch ein unbeschriebenes Blatt
Standard

1. Mime-types sind einfache Header angaben. Der Browser weiß dadurch welchen Dateityp er bekommt und "stellt" sich darauf ein.

2. Sie werden verschleiert, damit man nicht so leicht an den normalen pfad (Seitexy.de/datei.exe) kommt. Das gewährleistet zum Beispiel, dass es nicht gleich in fremde Seiten eingebunden wird (Sicher ist schätzungsweise nichts... kenn mich da auch ned so gut aus!)

3. kA.. wird schon bessere geben, aber ob das ned gut is..?



mfg
Andi
DER_Brain ist offline  
Alt 26.07.2006, 19:24  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Ergänzungen (da ja sonst alles richtig ist ):

1. Wieso stellt sich der Browser drauf ein? TXT-Dateien (oder ähnliches) kann er direkt anzeigen, EXE nicht
2. Es geht schon, aber irgendwann leidet der Komfort und die Performance. Man würde die Downloads selbst für jeglichen Zugriff von Aussen sperren und die Downloads durch eben solches Script "durchschleifen", wobei dies kontrollieren sollte, ob der Besucher wirklich von der eigenen Seite kommt. Referer allein bringts da meist nicht (mehr), da man den manipulieren kann.
3. Gegenfrage: Brauchst du mehr?
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 26.07.2006, 19:27  
Erfahrener Benutzer
 
Registriert seit: 25.06.2005
Beiträge: 228
Marian
Standard

Alsi ich finde das es weder sicher ist noch irgend einen nutzen hat.
es treten nur Häufig fehler auf.

Also die erfahrungen habe ich gemacht...
Marian ist offline  
Alt 26.07.2006, 19:37  
Erfahrener Benutzer
 
Registriert seit: 15.06.2005
Beiträge: 193
Zangelo
Standard

Danke für eure Antworten.

Mit, wieso tut es das verschleiern, meinte ich eher, wo ist der befehl, dass es das macht, also eher wie geht das. sorry.

Ich hab die URL nicht rausbekommen, als ich es getestet habe.
nur hätte ja sein können, dass ihr vielleicht das script kennt, und wisst es gibt was besseres...
__________________

www.das-forum.us Das Forum dazu
Zangelo ist offline  
Alt 26.07.2006, 20:16  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von Zangelo
Danke für eure Antworten.

Mit, wieso tut es das verschleiern, meinte ich eher, wo ist der befehl, dass es das macht, also eher wie geht das. sorry.

Ich hab die URL nicht rausbekommen, als ich es getestet habe.
nur hätte ja sein können, dass ihr vielleicht das script kennt, und wisst es gibt was besseres...
Die Frage ist eher, woher weiß der Code-Schnipsel, wie die Datei eigentlich heißt.
=> gar nicht.

Das aufrufende Script muss sich selber irgendwie den Namen besorgen. Entweder aus ner DB, die aus einer ID den Dateinamen ermittelt etc.
Der Name wird dann ja als Parameter übergeben.

Und an dem Script ist schlecht, dass der Dateiname nur einen . enthalten darf. Nach dem ersten Punkt wird bereits die Endung für die Ermittlung des Dateityps erwartet.
Du kannst also keine Dateien mit mehr oder weniger als einem . verwenden und die Endung muss mit dem Typ übereinstimmen.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 26.07.2006, 20:23  
Erfahrener Benutzer
 
Registriert seit: 25.06.2005
Beiträge: 228
Marian
Standard

ja. Aber wenn man sachen nicht einfach runterladen kann,
kann man auch einfach scanner nehmen...
Die kann man bei google z.b. finden.
Wenn ich nen Musikstück suche, kann ich z.b. nen mp3-scanner auf nen webspace ansetzen, und der sucht mir dann alle MP3's.
Sowas geht doch mit allem.

Und ne seite (ilchclan), nutzt dieses system auch, und es macht häufiger fehler...
Marian ist offline  
Alt 26.07.2006, 22:50  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Zangelo
Ist das gut
Nein, eher ein heißer Anwärter auf "worst script ever seen". Ich kann mich nicht erinnern, bei php(friend).de viel mehr Unsinn auf einem Fleck gesehen zu haben - und das will was heißen.

Zitat:
Zitat von Zangelo
oder gibts bessere?
Einfache Ausführung:

13.3. Wie realisiere ich einen Dateidownload mit PHP?
http://www.php-faq.de/q/q-datei-download.html

Weitere Alternativen lassen sich per Forensuche, Google et al. finden.
 
Alt 27.07.2006, 08:10  
Erfahrener Benutzer
 
Benutzerbild von DER_Brain
 
Registriert seit: 18.04.2005
Beiträge: 1.541
PHP-Kenntnisse:
Fortgeschritten
DER_Brain ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Und an dem Script ist schlecht, dass der Dateiname nur einen . enthalten darf. Nach dem ersten Punkt wird bereits die Endung für die Ermittlung des Dateityps erwartet.
Du kannst also keine Dateien mit mehr oder weniger als einem . verwenden und die Endung muss mit dem Typ übereinstimmen.
So genau hab ich mir das Script dann gar ned angesehen ^^


Is aber schon blöd... gibt bessere Arten, an einen Dateinamen / eine Dateiendung ranzukommen!




mfg
Andi
DER_Brain ist offline  
Alt 27.07.2006, 08:44  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Vor allem, was soll das:
PHP-Code:
<?php
header
('Content-length: '.@strlen(@file_get_contents($filename))
?>
Zergling-new ist offline  
 


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
Script funktioniert nicht richtig -> fehlermeldungen PHP Tipps 2005-2 2 12.09.2005 11:29
chmoden von Verzeichnis das von php script verwendet wird? PHP Tipps 2005-2 2 04.08.2005 10:15
Kontakrformular funktioniert nur zum Teil PHP Tipps 2005-2 12 18.07.2005 11:24
script funktioniert nicht. PHP Tipps 2005-2 24 05.07.2005 15:51
[Erledigt] Relay Script PHP-Fortgeschrittene 11 01.06.2005 16:02
[Erledigt] Hilfe bei Download Verwaltungs Script PHP Tipps 2005 8 04.05.2005 10:29
smiley script funktioniert nicht!? HTML, Usability und Barrierefreiheit 3 01.05.2005 17:55
Fehler bei Script, welches Ordner erstellt PsychoEagle PHP Tipps 2005 3 23.04.2005 16:03
Frage: Warum funktioniert dieses PHP/MySQL Script nicht? Datenbanken 9 22.04.2005 06:35
[Erledigt] python script mit php aufrufen... PHP-Fortgeschrittene 1 17.11.2004 17:11
PHP Script aus PHP aufrufen Stümper PHP Tipps 2004 5 26.09.2004 08:15
"das" Script oder "der" Script?? Simbo Off-Topic Diskussionen 31 16.09.2004 17:04
Header Location funktioniert nicht PHP Tipps 2004 10 12.08.2004 17:11
Script funktioniert nicht PHP Tipps 2004 4 13.06.2004 12:41

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
pdf mimetype controlieren, www.boegesoft.de, mime type mit htaccess ergänzen, wie funktioniert ein script

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