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, 3436 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
PHP
PHP Script zum Daten auslesen gesucht
Frage von majas3PHP2 Kommentare

Hallo, ich habe viele taußend HTML Seiten in verschiedenen Verzeichnissen und bin auf der Suche nach einem PHP Script ...

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: ...

PHP

Übergabe Formularinhalte an externes PHP Script

gelöst Frage von schneerunzelPHP15 Kommentare

Hallo zusammen, ich habe heute eine relativ außergewöhnliche Frage: Und zwar geht es um folgendes: Ich habe für eine ...

PHP

Magento PHP Script um Kategorieeinstellungen zu ändern

Frage von sbsnewbiePHP1 Kommentar

Moin Leude, folgende Frage: Ich müsste die Einstellungen jeder Kategorie in meinem Magentoshop ändern. Jede Kategorie soll die Einstellungen ...

Neue Wissensbeiträge
Humor (lol)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 2 TagenHumor (lol)3 Kommentare

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 3 TagenErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 6 TageniOS5 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 7 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
PCIe 1.0 Grafikkarte für 3840x2160
Frage von Windows10GegnerGrafikkarten & Monitore30 Kommentare

Hallo, mein Vater hat einen neuen Monitor gekauft, welcher eine native Auflösung von 3840*2160 hat. Diese muss jetzt auch ...

Windows Server
Dienstnamen und oder Deutsche und Englische Beschreibung in services.msc gleichzeitig anzeigen
gelöst Frage von vafk18Windows Server23 Kommentare

Guten Morgen, die Suche nach Diensten in services.msc gestaltet sich immer wieder schwierig, weil mir je nach Aufgabe die ...

Windows 10
Windows Enterprise 1809 Eval nicht bootbar
Frage von Sunny89Windows 1022 Kommentare

Hallo zusammen, bevor ich mich jetzt noch stundenlang rumärger wollte ich euch fragen, ob Ihr die gleichen Probleme habt ...

JavaScript
Javascript: WebSql
gelöst Frage von internet2107JavaScript13 Kommentare

Guten Morgen zusammen, zunächst einmal einen schönen dritten Advent. Ich habe ein Problem mit Javascript und WebSQL. Bisher habe ...