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!

Frage Entwicklung PHP

Mitglied: B-free

B-free (Level 1) - Jetzt verbinden

24.09.2013 um 18:32 Uhr, 3366 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
Batch: doppeltes Leerzeichen in Dateinamen?
gelöst Frage von WoswaasiBatch & Shell3 Kommentare

Hallo! Wir verarbeiten bei uns in der Arbeit Audio-Dateien, die über Nacht in 5-Minuten-Abschnitte gesplittet werden. Ich habe dafür ...

Batch & Shell
Leerzeichen aus Dateinamen entfernen
gelöst Frage von noob-xBatch & Shell3 Kommentare

Hallo Profis, ich möchte bei vielen Dateien in einem Ordner die Leerzeichen aus den Dateinamen entfernen Dateien sehen so ...

Batch & Shell
Dateinamen mit Leerzeichen mit xcopy in einer Variable kopieren
gelöst Frage von chainsawBatch & Shell8 Kommentare

Hallo Gemeinde, Für euch bestimmt ein banales Problem: Ich möchte mit folgendem Script aus einem bestimmten Ordner alle Dateien ...

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

Neue Wissensbeiträge
Windows 10

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

Tipp von kgborn vor 1 TagWindows 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 1 TagSicherheits-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?
Frage von HelloWorldBatch & Shell16 Kommentare

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

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

Windows Server
Ping auf einen bestimmten Server nicht möglich
gelöst Frage von a.thierWindows Server7 Kommentare

Hallo, ich habe folgendes Problem. srv-dc1: Ping srv-nav > geht Ping srv-exchange > geht nicht srv-exchange: Ping srv-dc1 > ...

Hardware
Fujitsu Workstation mit K80 und Quadro P5000, Fehlermeldung: Connect Power Adapter
Frage von MachelloHardware7 Kommentare

Hallo Zusammen, ich benötige euren Rat da ich ratlos bin. Folgende Konfiguration im Büro: Fujitsu Workstation Celcius R940 Power ...