Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Datei-Download per PHP wird mit 0Byte geladen

Frage Entwicklung PHP

Mitglied: Curb47

Curb47 (Level 1) - Jetzt verbinden

02.06.2009, aktualisiert 18:26 Uhr, 7265 Aufrufe, 10 Kommentare

Hallo zusammen,

ich versuche gerade einige Downloads auf meiner Seite per PHP-Script anzubieten. Warum ich das mache?
Damit die Dateien nicht direkt verlinkt werden können und auch nur die Dateien geladen werden von denen ich es auch möchte.
Per PHP-FAQ konnte ich mir etwas passendes ummodellieren.

Script:
01.
<?php  
02.
 
03.
$download = $_GET['download']; 
04.
$basedir = "/srv/www/vhosts/DOMAIN.DE/files"
05.
 
06.
//Liste der vorhandenen Dateien 
07.
$filelist = array
08.
"file1" => "file1.zip"
09.
"file2" => "file2.rar"
10.
 "file3" => "file3.rar" 
11.
); 
12.
  
13.
// Einbruchsversuch abfangen. 
14.
if (!isset($filelist[$download])) 
15.
die("there is no $download."); 
16.
 
17.
//Vertrauenswürdigen Dateinamen basteln. 
18.
$filename = sprintf("%s/%s", $basedir, $filelist[$download]); 
19.
 
20.
//Passenden Datentyp erzeugen 
21.
header("Content-Type: application/octet-stream"); 
22.
 
23.
//Passenden Dateinamen im Download-Requester vorgeben 
24.
$save_as_name = basename($filelist[$download]); 
25.
header("Content-Disposition: attachment; filename=\"$save_as_name\""); 
26.
 
27.
//Datei ausgeben 
28.
readfile ($filename); 
29.
 
30.
?>
Nun zum problem.
Rufe ich einen Download auf, z.b. (.....download.php?download=file1) kommt auch wie gewohnt das Download Fenster mit allem drum und dran ;).
Öffne oder speichere ich die Date ist sie gerade mal 0 Byte (also nix) groß. Woran könnte das liegen?
Habe mir auch mal ein echo von dem Pfade geben lassen, dieser müsste stimmen mit (/srv/www/vhosts/DOMAIN.DE/files/file1).

Ich hoffe jemand kennt das Problem und man kann mir helfen

Schon mal vielen Dank im vorraus.

Gruß
Mitglied: kaiand1
02.06.2009 um 18:22 Uhr
Moin
ganz einfach du liest die Datei zwar ein für dein PHP Script...
Gibts die Daten jedoch nciht an den Browser aus für den Download
Abgesehen davon solltes du auch beachten das die anderen auch einen Timeout beim Download bekommen.
Maximale Scriptlaufzeit wird überschritten...
Bitte warten ..
Mitglied: Curb47
02.06.2009 um 19:02 Uhr
Und wie behebe ich das Problem, kannst du mir da helfen, bin in Sachen php nicht so bewandert .
Kleine Scriptfetzen als anreiz würden mir helfen...

Gruß
Bitte warten ..
Mitglied: nxclass
02.06.2009 um 20:18 Uhr
aus dem PHP Handbuch:
01.
header('Content-type: application/pdf'); 
02.
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 
03.
readfile('original.pdf');
evtl. kann man noch den Header 'Content-length' hinzufügen
01.
header('Content-length: '.filesize('original.pdf'));
der Pfad: "/srv/www/vhosts/DOMAIN.DE/files/file1" .. da fehlt doch '.php' - oder so ?

... sehe deshalb nicht unbedingt einen Fehler in deinem Script - evtl. kann die Datei nicht gelesen werden ?
Bitte warten ..
Mitglied: dog
02.06.2009 um 20:22 Uhr
kaiand1s erster Punkt ist Quark.
readfile gibt eine Datei direkt auf stdout wieder aus.

Der zweite Punkt stimmt hingegen.

Ich kann an deinem Code auf Anhieb keinen Fehler erkennen, darum wie immer:

01.
<?php 
02.
error_reporting(E_ALL|E_NOTICE); 
03.
ini_set('display_errors','On'); 
04.
?>
Am Anfang des Scripts hinzufügen und die Apache Log oder heruntergeladene Datei beobachten.

Grüße

Max
Bitte warten ..
Mitglied: Curb47
02.06.2009 um 20:56 Uhr
Also das mit dem Content-length hab ich auch noch hinzugefügt mit der richtigen Syntax meiner meinung nach

header('Content-Length: ' . filesize($filename));

so sieht das jetzt aus. Evtl. hab ich es falsch..
Wenn es richtig sein sollte, hat es aber dennoch zu keiner Änderung geführt.

Bei dem Pfad geb ich ja den Pfad an, in welchem Verzeichnis die Datei sich auf dem rootserver befindet und woher sich das Script die Datei holen soll.
Aber trotzdem Danke. Bin für jeden Tipp oder Anregung dankbar
Bitte warten ..
Mitglied: dog
02.06.2009 um 23:11 Uhr
Ach, ignoriert mich doch alle

Zitat von dog:
Ich kann an deinem Code auf Anhieb keinen Fehler erkennen, darum wie
immer:

01.
> <?php 
02.
> error_reporting(E_ALL|E_NOTICE); 
03.
> ini_set('display_errors','On'); 
04.
> ?> 
05.
> 
Am Anfang des Scripts hinzufügen und die Apache Log oder
heruntergeladene Datei beobachten.
Bitte warten ..
Mitglied: Curb47
03.06.2009 um 11:31 Uhr
Oh danke für den Tip dog...


Jetzt bekomm ich eine ausführliche Fehlerbeschreibung .

Das hier kam dabei raus.

Warning: filesize(): open_basedir restriction in effect. File(/srv/www/vhosts/DOMAIN.DE/files/file1.zip) is not within the allowed
path(s): (/srv/www/vhosts/DOMAIN.DE/subdomains/downloads/httpdocs:/tmp) in /srv/www/vhosts/DOMAIN.DE/subdomains/downloads
/httpdocs/download.php on line 36

Warning: readfile(): open_basedir restriction in effect. File(/srv/www/vhosts/DOMAIN.DE/files/file1.zip) is not within the allowed
path(s): (/srv/www/vhosts/DOMAIN.DE/subdomains/downloads/httpdocs:/tmp) in /srv/www/vhosts/DOMAIN.DE/subdomains/downloads
/httpdocs/download.php on line 39

Warning: readfile(/srv/www/vhosts/DOMAIN.DE/files/file1.zip): failed to open stream: Operation not permitted in /srv/www/vhosts
/DOMAIN.DE/subdomains/downloads/httpdocs/download.php on line 39

Also fehlt da irgendwie die Berechtigung, oder ist da ein Fehler in der Pfadangabe??? *confused*

Gruß
Bitte warten ..
Mitglied: Curb47
03.06.2009 um 12:19 Uhr
Problem behoben.

Im Apache war eine open_basedir direktive eingetragen. Diese hab ich mal temporär auskommentiert.
Nun funktioniert der Download...

Besteht nun eine Sicherheitslücke ohne diese direktive???

Gruß
Bitte warten ..
Mitglied: dog
03.06.2009 um 14:18 Uhr
Zumindest besteht ohne die Regel ein Sicherheitsrisikio!

Nimm die Regel wieder rein, aber füg deinen files Pfad hinzu:

php_admin_value open_basedir /srv/www/vhosts/DOMAIN.DE/subdomains/downloads/httpdocs:/tmp:/srv/www/vhosts/DOMAIN.DE/files
Grüße

Max
Bitte warten ..
Mitglied: Curb47
03.06.2009 um 17:09 Uhr
Vielen Danke für die schnelle Hilfe.

Funktioniert immer noch, und jetzt sogar ohne Sicherheitsrisiko

Gruß
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
PHP
gelöst Externe XML-Datei in PHP auslesen (18)

Frage von Akrosh zum Thema PHP ...

Batch & Shell
gelöst Bginfo config.bgi Datei wird nicht geladen (25)

Frage von Hendrik2586 zum Thema Batch & Shell ...

Informationsdienste
Excel Datei ohne Download zur Verfügung stellen (4)

Frage von gnaulimon zum Thema Informationsdienste ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...