Top-Themen

Aktuelle Themen (A bis Z)

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, 7523 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 ..
Ähnliche Inhalte
Apache Server
Linux Apache VirtualHost PHP wird nicht geladen
gelöst Frage von mexxApache Server31 Kommentare

Hallo, ich verwenden einen Apache mit Wordpress. Ich habe, um nicht www.meine-Domain.de/wordpress einzugeben, einen VirtualHost eintrag erzeugt. So sieht ...

Server
Download von Dateien
gelöst Frage von schicksalServer7 Kommentare

Hallo zusammen, ich habe derzeit bei uns noch einen Altbestand einen FTP Server. Von diesem laden (anonymous) Kunden von ...

Batch & Shell
Bginfo config.bgi Datei wird nicht geladen
gelöst Frage von Hendrik2586Batch & Shell25 Kommentare

Ein freundlcihes Hallo an alle. :) Ich hab ein kleines Anliegen das ich hier gerade bearbeite. Bis zu einem ...

PHP
Schreibrechte für Datei im PHP-Skript
gelöst Frage von itebobPHP1 Kommentar

Hallo, ich habe ein PHP-Skript schreiben1.php, das in eine Datei txt123.php schreibt. Wenn schreiben1.php so ausgeführt wird h ttp://server.tld/schreiben1.php ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 106 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless9 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Router & Routing
Wieso kann ich den UPD 7000-9000 nicht freigeben?
Frage von Jayk0bRouter & Routing8 Kommentare

Router: Telekom W 723V Ports: UDP 7000-9000 Können nicht frei gegeben werden. Benutzgrund: Rocket League 7000 – 9000 UDP ...

Router & Routing
Fritzbox Gastnetz - exposed Host - zur Sophos IPTV
Frage von medikopterRouter & Routing8 Kommentare

Hallo zusammen, ich habe eine Frage bezüglich des Fritz box Gastzugangs an einer Sophos UTM Home. An liebsten wäre ...