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 PHP Downloadzwang-Script sägt Dateinamen nach Leerzeichen ab!

Mitglied: B-free

B-free (Level 1) - Jetzt verbinden

24.09.2013 um 18:32 Uhr, 3420 Aufrufe, 5 Kommentare, 1 Danke

Hallo,

mein (naja. Es ist nicht direkt "mein") script hat probleme mit leerzeichen in dateinamen.

01.
<?php 
02.
session_start(); 
03.
if ($_SESSION['login'] == true && $_SESSION['user'] != "") { 
04.
 
05.
$pfaduser = $_GET['pu']; 
06.
$downloaduser = $_GET['du']; 
07.
$datei = $_GET['da']; 
08.
 
09.
if ($pfaduser == "" || $downloaduser == "" || $datei == "") { 
10.
	## Eine (oder mehrere) der übermittelten Parameter sind leer! 
11.
	header ('Location: http://www.example.domain/index.php?f=para&logout=true'); 
12.
	echo "<script>window.close();</script>";  
13.
	exit;   
14.
15.
else
16.
	## Alle Parameter sind gesetzt 
17.
	if (file_exists("daten/".$pfaduser."/".$datei."")) { 
18.
		## Die datei die heruntergeladen werden soll existiert 
19.
		if (file_exists("daten/".$pfaduser."/".$datei.".#sav")) { 
20.
			## Die datei die heruntergeladen werden soll ist freigegeben 
21.
			$datei = "daten/".$pfaduser."/".$datei
22.
			$dateiname = basename($datei); 
23.
			$groesse = filesize($datei); 
24.
			header("Content-Type: application/force-download"); 
25.
			header("Content-Disposition: attachment; filename=".$dateiname); 
26.
			header("Content-Length:".$groesse); 
27.
			readfile($datei); 
28.
29.
		else
30.
			## Die datei die heruntergeladen werden soll ist nicht freigegeben 
31.
			echo "<div id='bs'><div id='error'><h1>Fehler!</h1>Die ausgewählte Datei steht nicht zum Download freigegeben!<br></div></div>"
32.
33.
34.
	else
35.
		## Die datei die heruntergeladen werden soll existiert nicht 
36.
		echo "<div id='bs'><div id='error'><h1>Fehler!</h1>Die Datei existiert nicht mehr!.<br></div></div>"
37.
38.
39.
40.
else
41.
	header ('Location: http://www.example.domain/index.php?f=login&logout=true'); 
42.
	echo "<script>window.close();</script>";  
43.
	exit;   
44.
45.
echo "<script>window.close();</script>";  
46.
?>
Das Problem:
Wenn ein Leerzeichen (space) im Dateiname ist, wird der Dateiname nur bis zum ersten Leerzeichen angezeigt. (Dateiendung geht auch flöten...)
Außerdem, tritt das Problem nur im Mozilla auf...
Opera, zeigt den Dateinamen erst ab klammer auf an, bzw. den ganzen Dateinamen, wenn keine klammern vorkommen.
Internet Explorer verhackstückelt die umlaute (äöü).

Die Lösung (dachte ich):
01.
urlencode
Hat leider nicht geklappt...

Tschau
B-Free
Mitglied: flow.ryan
24.09.2013 um 22:54 Uhr
Hallo,

wie wäre es damit, wenn du die Umlaute durch AE OE und UE ersetzt... ist für die Kodierung auch schöner, da nicht unbedingt jedes System mit ISO oder UTF-8 arbeitet...

Ändere deine Zeile 25 folgendermaßen ab, um das mit den Leerzeichen zu lösen:
01.
			header("Content-Disposition: attachment; filename='".$dateiname.'""); 
Ich denke, dann funktioniert's.

Gruß,
Florian.
Bitte warten ..
Mitglied: B-free
25.09.2013 um 13:20 Uhr
Erstmal Danke!
wie wäre es damit, wenn du die Umlaute durch AE OE und UE ersetzt... ist für die Kodierung auch
schöner, da nicht unbedingt jedes System mit ISO oder UTF-8 arbeitet...

Das geht leider nicht, da ich nicht bestimmen kann, welche Dateien hoch geladen werden.

Den 2. Tipp werde ich gleich mal ausprobieren...

Tschau
B-Free
Bitte warten ..
Mitglied: colinardo
25.09.2013 um 14:36 Uhr
Hallo B-Free,
deine URL-Parameter erhältst du in PHP bereits URL-Kodiert geliefert. Einen String mit einem Leerzeichen z.B. Herbert Meier kommt dann so in PHP an: Herbert%20Meier. In PHP musst du dann urldecode nutzen um den String wieder zurückzuwandeln:
urldecode($_GET['da']);
Grüße Uwe
Bitte warten ..
Mitglied: B-free
25.09.2013, aktualisiert um 17:50 Uhr
Hallo colinardo,

das habe ich leider schon probiert... die Variable wird zwar komplett überliefert, aber der Fehler liegt anscheinend da:
01.
			header("Content-Disposition: attachment; filename=".$dateiname); 
Wenn ich die Variable vorher ausgebe, wird sie komplett ausgegeben. anscheinend, wird lediglich das Leerzeichen falsch interpretiert.

@flow.ryan
Dein Script geht leider auch nicht...

selbst:
01.
			header("Content-Disposition: attachment; filename=$dateiname"); 
wenn ich den Link mit Anführungszeichen oben beginne gehts auch nicht...

...

Nach langem *rumprobieren* hab ich ne einigermaßen gut Lösung gefunden... naja eig. ist sie schlecht.

ABER sie funktioniert:
01.
$dateiname = str_replace(" ", "-", $dateiname);
So...

Zum Schluss noch ne Frage:

Kann ich den Bindestrich durch irgendwas ersetzen, das wenigstens so aussieht, als wäre es ein Leerzeichen... *edit* und von Mozilla erkannt wird???

Aber erst mal trotzdem DANKE :D

Tschau
B-Free
Bitte warten ..
Mitglied: colinardo
25.09.2013 um 19:15 Uhr
Hallo B-Free,
Les mal die folgenden Threads zur Kompatibilität von Zeichen in diesem Header-Field:

Apropos header:
ich würde anstatt "Force-Download" das hier verwenden, da es Browsertechnisch weniger Fehler verursacht:
header('Content-Type: application/octet-stream');
Grüße Uwe
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
VB Script ändert Dateinamen
gelöst Frage von mschaedler1982Batch & Shell5 Kommentare

Hallo zusammen. Kurze Erläuterung zu diesem Thema. Eine Maschine legt jeden Tag zu einer bestimmten Uhrzeit sehr sehr viele ...

Batch & Shell
Script nach Dateinamen löschen
gelöst Frage von KnuefiBatch & Shell19 Kommentare

Hallo mal wieder, ich versuche ein Script zu schreiben, das nach gewünschten Dateinamen in bestimten Ordner sucht und wenn ...

Batch & Shell

Leerzeichen, Sonderzeichen in Dateinamen lassen Batch crashen

Frage von Domain-JaneBatch & Shell3 Kommentare

Hallo zusammen, hier meine Frage zum Sonntag ;): Mit dem Dir-Befehl lasse ich mir eine Datei erzeugen, indem Pfad+Dateinamen ...

PHP

PHP-Script um Online zu zippen

Frage von sbsnewbiePHP3 Kommentare

Hallo Admins, folgende Frage, die bestimmt easy ist, bei der ich aber gerade ein Brett vor dem Kopf habe: ...

Neue Wissensbeiträge
LAN, WAN, Wireless

UniFi - UAP Antenna Radiation Patterns - WLAN Ausstrahlungsmuster

Information von StefanKittel vor 2 StundenLAN, WAN, Wireless

Hallo, wer sich schon immer mal gefragt hat wie der Unterschied in den WLAN Access Points bei Unifi wirklich ...

Windows Userverwaltung

Passwortwechsel in der Domain bei Anmeldung erzwingen

Anleitung von Looser27 vor 12 StundenWindows Userverwaltung6 Kommentare

Nachdem es immer wieder User geschafft haben, sich während des laufenden Betriebes auszusperren, habe ich nach einer Möglichkeit gesucht, ...

Ausbildung

Linux-Ausstieg in Niedersachsen - Windows statt Bugfix

Information von StefanKittel vor 3 TagenAusbildung39 Kommentare

Sind ja nur Steuergelder

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 5 TagenSpeicherkarten6 Kommentare

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Passwortwechsel Zeitpunkt festlegen
gelöst Frage von Looser27Windows Userverwaltung32 Kommentare

Guten Morgen liebe Kolleginnen und Kollegen, da es eine Userin in meinem Urlaub geschafft hat, sich vom AD vollständig ...

Microsoft
Netzlaufwerksordner Berechtigungen Speichern unter aus Programmen
gelöst Frage von ITler7Microsoft19 Kommentare

Moin, bin in ein neues Unternehmen eingetreten und habe die Anforderung bekommen Berechtigungen auf einige Ordner anzupassen, da bisher ...

Windows Server
Probleme im AD am Außenstandort
gelöst Frage von emeriksWindows Server19 Kommentare

Hi, wir haben ein Problem mit AD und GPO am Außenstandort und ich stehe momentan mächtig auf dem Schlauch. ...

Flatrates
Geschwindikeitsprobleme zwischen 1 und 1 - Vodafone Heimnetz
Frage von muenchhausenFlatrates15 Kommentare

Moin erstmal, Vorweg mein Setup 1. Wohnsitz Vodafone 400K Leitung (kommt sogar komplett an, auch um 18 Uhr) 2. ...