php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.06.2009, 23:19  
Benutzer
 
Registriert seit: 16.06.2009
Beiträge: 91
PHP-Kenntnisse:
Fortgeschritten
Raymond befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Dateinamen mit Spezialzeichen

Soo.. nu hab ich das nächste Problem, wo mir irgendwie keine wirklich zufriedenstellende Lösung einfallen will...

Auf modernen Webservern ist ja so nahezu alles erlaubt, was früher selbst in lokalen Dateisystemen undenkbar gewesen wäre

So speichert ein Webserver ohne zu klagen Dateien unter ihrem angegebenen Namen ab, auch wenn diese Umlaute, Leerzeichen oder sonstiges beinhalten.

Um an diese Dateien dann über den Browser zugreifen zu können, werden in Links beispielsweise die Leerzeichen durch "%20" ersetzt.
urlencode() ersetzt Leerzeichen wiederum durch "+".

Eine Datei mit namen "Ich bin doof.jpg" wird also auch unter diesem Namen auf den Server geschrieben und ist erreichbar mittels "Ich%20bin%20doof.jpg" oder aber auch "Ich+bin+doof.jpg"


So weit, so gut, aber vielleicht schwant es dem Einen oder Anderen schon, worauf ich hinaus will

Nun schicken wir dem Server eine Datei mit dem Originalnamen "Ich%20bin%20doof.jpg".
Diese Datei ist nun nicht mehr erreichbar, da die "%20" beim Server in ein Leerzeichen umgewandelt werden und der Server nun nach der Datei "Ich bin doof.jpg" sucht, die er aber nicht finden kann, da sie in seinem Dateisystem ja "Ich%20bin%20doof.jpg" heißt.

Da wir ja nun alle Chaoten sind, packen wir zwei Bilder verschiedenen Inhalts auf den Server - eine mit "%20" und die andere mit Leerzeichen - und zu allem Überfluss auch noch eine mit "+".

Wie kann man dieser sich überschneidenden Vielfalt an Möglichkeiten Herr werden und exakt DIE Datei aufrufen, die man haben wollte?

Im Moment habe ich da nur eine NOTlösung, da sie in meinen Augen genauso "fachmännisch" ist, wie die Reparatur eines Trabbi mit einer Rolle Panzertape... es funktioniert, aber "sauber" ist sicher was anderes:

PHP-Code:
echo "<a href='".str_replace('+',' ',urlencode($file_array_name[$i]))."'><b>".$file_array_name[$i]."</b></a>"

Geändert von Raymond (20.06.2009 um 00:08 Uhr).
Raymond ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.06.2009, 00:18  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Wieso speicherst du die Dateien überhaupt mit einem Originalnamen? Ich würde die Bilder umbenennen und den Originalnamen in der Datenbank speichern. Wenn der überhaupt notwendig ist. Ansonsten sehe ich keine Möglichkeit zu unterscheiden ob jetzt nen Leerzeichen oder wirklich %20 gemeint ist!
Flor1an ist offline  
Alt 20.06.2009, 00:43  
Benutzer
 
Registriert seit: 16.06.2009
Beiträge: 91
PHP-Kenntnisse:
Fortgeschritten
Raymond befindet sich auf einem aufstrebenden Ast
Standard

Och, es gäbe sicher einige Gründe, warum - aber die sind hier gar nicht thema
Wie du aus dem anderen Thread von mir schon wissen dürftest, interessiere ich mich nicht für "Normalfälle" und genau deswegen habe ich auch hier wieder einen Spezialfall ausgegraben, der SOO unwahrscheinlich gar nicht mal ist...

Nehmen wir an, wir können saubillig Webspace mit PHP und riesigem Speicherplatz bekommen, aber keine Datenbank. (Okay, ich weiß, eine Datenbank kann auch auf einem anderen Webspace liegen, als die zu verwaltenden Dateien...)
Ich gehe nun einfach von dem Prinzip aus, daß eine Datenbank schließlich auch nichts anderes macht, als was ein Programm und ein Dateisystem machen (eine Datenbank IST schließlich nichts anderes).
Warum Bilder nicht umbenennen?
Hey, stell dir mal den Fall vor, du hast seit Jahren Bilder und sonstige Dateien auf einem Webspace gesammelt, wo der einzige Zweck war, diese Bilder irgendwo zu verlinken, oder Dateien zum Download zu stellen - das ganze über eines der zig-tausend Uploadscripte für Foren hochgeladen... jetzt stehst du da mit einem Online-Ordner mit 500MB Bild-, Text-, Zip-, und sonstigen Files, die in keiner Datenbank stehen, zu denen keine Thumbnails bestehen, keine Sortierung vorhanden ist und und und... eben das typische Chaos, was sich so in einigen sorglosen Jahren ansammelt

Un Nu?
Alles einzeln in eine Datenbank einpflegen, für die man möglicherweise sogar noch einen zusätzlichen Webspace benötigt?
Alle Dateien umbenennen?
Alles rausschmeißen, was nicht mehr heutigem Standard entspricht?

Rückwärtskompatibilität hieß mal das Zauberwort für verantwortungsvolle Produktentwicklung..
Lang lang ist's her, denn heute hat auch Microsoft auf rücksichtslose Inkompatibilität für zwar vor Jahren, aber immerhin doch bezahlte Systeme umgestellt!

(Nur um falschen Gedanken vorzubeugen: ICH habe Wegspace mit Datenbank - und ich LIEBE die Arbeit mit Datenbanken - es geht hier nicht um irgendein privates Projekt für mich.)
Raymond ist offline  
Alt 20.06.2009, 01:10  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Ich versteh nich wo drauf du hinaus willst. Wenn es die Dateien schon so gibt und auch so verlinkt sind, wo liegt dann das Problem? Das zwei Dateien existieren die z.B. sich nur durch Leerzeichen und %20 unterscheiden? Und du möchtest jetzt irgendwie schaffen diese Dateien unterschiedlich zu verlinken?
Flor1an ist offline  
Alt 20.06.2009, 02:22  
Benutzer
 
Registriert seit: 16.06.2009
Beiträge: 91
PHP-Kenntnisse:
Fortgeschritten
Raymond befindet sich auf einem aufstrebenden Ast
Standard

Eine realistische Falldarstellung:
Es sei wie oben erwähnt ein chaotischer Dateiordner vorhanden und ein Überwachen, Pflegen und Löschen eventuell unerwünschter Daten wird über einen FTP-Client (sagen wir mal WS_ftp) ist aufgrund der mittlerweile hunderte von Dateien eine Sisyphusarbeit.
Jetzt bauen wir uns eine Verwaltungsoberfläche, von der aus Ordnung in das Chaos gebracht werden soll und die Überwachung neu eingegangener Dateien ein "Kinderspiel" wird.
Als erstes lassen wir uns also etwas ähnliches anzeigen, wie es der Fall ist, wenn man ein ungeschütztes Verzeichnis ohne "index.***" aufruft.
Damit hat man dann zwar Namen, Dateiendungen und auch die Links zu den vorhandenen Dateien, aber das ist bei hunderten dieser auch nicht viel übersichtlicher, denn wie soll man in diesem Wirrwar die zuletzt hochgeladene Datei finden, wenn es doch keine Sortiermöglichkeiten gibt?
Also müsste schonmal wenigstens ein sortierbarer Index her.
Nun haben wir zwar alle Dateien möglicherweise nach Datum oder nach Dateinamen sortiert, aber wer weiß schon, was sich hinter der Datei "x29vbrect3%20hbF%3r.jpg" für ein Schweinkram versteckt?
Also jede Datei anklicken und das Bild (so sagt ja zumindest die Dateiendung) laden, was möglicherweise einige Megabyte groß ist (Angaben über die Dateigröße gibt es ja auch nicht)?
Das muß doch auch bequemer gehen...
Also lassen wir uns doch zu jedem Namen einer Bilddatei eine Miniaturausgabe davon anzeigen, damit man gleich auf einen Blick sehen kann, was es ist.
Achja... Keine Thumbs von Bildern bisher vorhanden... aber wo wir ja gerade sowieso dabei sind, den gesamten Ordner zu bearbeiten, bauen wir doch gleich noch eine Funktion mit ein, die überprüft, ob es zu dem gerade abgefragten Bild schon ein Thumbnail gibt. Wenn ja, dann wird es angezeigt, wenn es noch keines gibt, na dann erstellen wir eben eins...
Schön, nun haben wir eine Liste mit Vorschaubildern der Bilder in dem Ordner, mit dem Namen der Datei dazu - natürlich als Link für das Bild in voller Größe...
Aber nunja... selbst wenn es nur Thumbnails sind, dauert die Übertragung einer einzigen Seite mit allen -sagen wir mal 500- Bildchen auch eine ganze Weile ... und besonders schön und übersichtlich ist das auch nicht gerade.
Also bauen wir noch eine Seiteneinteilung mit ein, die nach einer bestimmten Anzahl von angezeigten Dateien unterbricht und die Möglichkeit bietet, seitenweise vor und zurück zu blättern... ach was sag ich? am besten direkt zu jeder beliebigen Seite springen.
Toll - jetzt ist alles schön übersichtlich... aber wenn mir jetzt eine Datei nicht gefällt? Doch wieder zu WS_ftp greifen, um zu löschen?
Nö... da bauen wir doch gleich zu jedem Eintrag in der neuen bebilderten Linkliste unseres Online-Dateiordners eine direkte Möglichkeit zum Löschen der jeweiligen Datei ein - natürlich mit doppelter Sicherheitsbestätigung.. man ist ja manchmal nicht ganz so bei der Sache um diese Uhrzeit...

Und das Programm wächst und wächst..... nur schneller als es damals der Sammelsuriumsonlineordner getan hat.....


Ich hoffe, ich konnte dir jetzt mal einen kleinen Einblick geben, warum selbst die scheinbar unmöglichsten Dinge irgendeine Lösung brauchen... und natürlich die bestmögliche
Raymond ist offline  
Alt 20.06.2009, 02:39  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Ja schön und gut. Aber was genau ist deine Frage? Die einzigste Frage die du gestellt hast ist: "Wie kann man dieser sich überschneidenden Vielfalt an Möglichkeiten Herr werden und exakt DIE Datei aufrufen, die man haben wollte?"

Und dazu kann man nur sagen, wenn du zwei Dateinamen hast die die selbe URL produzieren dann gibt es dafür keine Möglichkeit. Es müsste die Datei schon umbenannt werden oder die Datei indirekt (über ein PHP Skripte) aufgerufen werden an dass man dann noch Parameter hängen kann um zwischen %20 oder Leerzeichen zu unterscheiden etc.
Flor1an ist offline  
Alt 20.06.2009, 02:46  
Benutzer
 
Registriert seit: 16.06.2009
Beiträge: 91
PHP-Kenntnisse:
Fortgeschritten
Raymond befindet sich auf einem aufstrebenden Ast
Standard

Nunja.. wie schon eingangs erwähnt, geht es mit dem Umweg über urlencode() mit nachträglicher "Fehlerbereinigung" ja... ich habe bei meinen Tests die unmöglichsten Konstellationen durchprobiert und bisher ist mir noch keine begegnet, die sich da noch dran vorbeigeschlichen hätte...

Aber es ist halt irgendwie "geflickt", verstehst, was ich meine?
Ich dachte, es müsste doch eine sauberere Lösung dazu geben - scheinbar hab ich mich geirrt...
Raymond ist offline  
Alt 20.06.2009, 02:56  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Naja, an der "sauberen" Lösung kannst du ja für zukünftige Uploads arbeiten.

Benötigt man eine Registrierung für den upload? Spricht was dagegen, die Dateien in Zukunft direkt als blob in der DB zu speichern?
So wie das klingt, musst du jedesmal alle Dateien auslesen lassen bevor Daten an den User geschickt werden (auch wenn du nur x thumbs anzeigen läßt)
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline  
Alt 20.06.2009, 03:06  
Benutzer
 
Registriert seit: 16.06.2009
Beiträge: 91
PHP-Kenntnisse:
Fortgeschritten
Raymond befindet sich auf einem aufstrebenden Ast
Standard

*grins*
war wohl zu versteckt der Hinweis:
Hier gehts nicht um ein derzeit tatsächlich existierendes Projekt, sondern um realitätsnahe Problemlösung

In dem geschilderten Fallbeispiel ging ich von einem Forenadmin aus, der seinen Upload-Ordner etwas im Auge behalten und eventuell Ordnung schaffen will.

Natürlich spricht nichts dagegen, neue Uploads in Datenbanksysteme zu speichern.
Theoretisch könnte ich ja jetzt auch noch so weit gehen und statt der Wartungsoberfläche für vorhandene Chaosordner ein automatisches Einpflegetool für künftig über DB organisierte Uploads schreiben, aber das geht dann doch ein wenig weit von der Nachvollziehbarkeit für "Anfänger" weg

PS: aber nu is erstmal Feierabend für heute ^^ Wird ja schon bald wieder hell

Geändert von Raymond (20.06.2009 um 03:10 Uhr).
Raymond ist offline  
Alt 20.06.2009, 22:30  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Du doktorst da an einem Problem rum, welches es gar nicht gibt. Nimm einfach rawurlencode() statt urlencode() für Deinen Dateinamen und lass das str_replace() ersatzlos weg.

Das codiert Dir dann nämlich wie folgt:

ich bin doof.jpg => ich%20bin%20doof.jpg
ich%20bin%20doof.jpg => ich%2520bin%2520doof.jpg
ich+bin+doof.jpg => ich%2Bbin%2Bdoof.jpg

und spätestens dann schickt auch der Browser das richtige zum Server...

Gruß Jens
Jens Clasen ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Dateinamen durch Variable ersetzten avr PHP Tipps 2009 4 17.04.2009 17:06
Daten abfragen und wenn vorhanden Dateinamen ändern ikkunaprincessa Datenbanken 2 10.12.2008 11:36
Den eigenen Dateinamen als Text in Variable speichern? asyoulikeit PHP Tipps 2008 4 30.05.2008 23:32
Verzeichnis auslesen -> Dateinamen in Array quoba PHP Tipps 2008 11 29.04.2008 16:21
Dateinamen vom Attribut trennen PHP Tipps 2005-2 2 12.09.2005 15:45
Dateinamen auslesen PHP Tipps 2005-2 7 07.09.2005 13:44
Bei FTP-Upload neuen Dateinamen vergeben nicobischof PHP Tipps 2005-2 4 15.08.2005 23:11
Dateinamen von Bilder ändern socke PHP Tipps 2005-2 1 14.08.2005 17:40
Download mit ganzem Dateinamen Zangelo PHP Tipps 2005-2 11 03.08.2005 13:23
Dateinamen abfragen PHP Tipps 2005-2 2 20.07.2005 11:31
Dateinamen aus von Ordenrinhalt auslesen und ausgeben PHP Tipps 2005-2 1 12.07.2005 21:23
absoluter Pfad zur Datei - ohne Dateinamen PHP Tipps 2005 8 16.05.2005 19:40
[Erledigt] HTTP-Upload: Fehler wenn hochkomma im Dateinamen PHP-Fortgeschrittene 4 04.03.2005 11:10
Dateinamen von Downloads mit Sonderzeichen(äöüáÃ* etc.) IE FF PHP-Fortgeschrittene 1 13.12.2004 08:41
Dateinamen und Pfad nach php übergeben. PHP Tipps 2004 2 23.06.2004 16:31

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
spezialzeichen, php sonderzeichen aus dateinamen entfernen, php dateinamen sonderzeichen entfernen, php sonderzeichen dateinamen entfernen, php sonderzeichen in dateinamen entfernen, http://www.php.de/php-einsteiger/56251-erledigt-dateinamen-mit-spezialzeichen.html, php leerzeichen aus dateinamen beim aufrufen entfernen, php leerzeichen aus dateinamen entfernen, php sicherer dateiname, spezial zeichen, php thumbnails leerzeichen dateiname, php dateiname säubern, php sichere dateinamen, sonderzeichen dateinamen entfernen php, produktentwicklung ordnerstruktur dateinamen, php leerzeichen aus datei entfernen, dateinamen sonderzeichen entfernen php, php zeichen aus dateinamen entfernen, php dateiname leerzeichen entfernen, leerzeichen aus dateien entfernen php

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:15 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum