| | | | |
| | ||||
| Erfahrener Benutzer Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | @Manko: Zitat:
@nikosch: Ein Root-Pfad in der Config ist eine gute Idee für ein optionales Feature. @Chriz: Das sind in dem Sinne keine Vorbedingungen, sondern Regeln, die der normalisierte Pfad, also die Rückgabe, erfüllt. Eine eindeutige Repräsentation für „gleiche“ Pfade zu haben, ist für mich ein Ziel von Normalisierung. Pfade werden dadurch beispielsweise identifizierbar. Derzeit richte ich mich damit (weil ich es nicht besser weiß) funktional (was wird wie interpretiert) nach meiner Linux-Konsole. Die Pfade sind also lokale Verzeichnispfade, keine URLs. Über Literaturhinweise zum Pfadaufbau wäre ich aber sehr erfreut. Zitat:
Zu 2: Wie diese Repräsentation aussehen soll, ist natürlich ebenso diskutierbar. Die Frage war auch ein Grund für diesen Thread. Auf das "./" zu Beginn relativer Pfade habe ich verzichtet, da es keinen mir bekannten Mehrwert liefert. Pfade ohne "./" ergeben beim Zusammenbau zweier nach meiner Methode normalisierter Pfade dann ebenfalls in vielen Fällen sofort wieder einen normalisierten Pfad. Code: "dies/ist/ein/pfad" . "/" . "der/hier/fortgesetzt/wird" Das Weglassen hat zudem den Vorteil, dass die Funktion auch für Pfade anwendbar ist, die mit „echten“ Dateien enden. Zu 4: "/.." wird zu "/". Für mein Linux-Dateisystem hier ist "//" nicht falsch. Das kann Bestandteil eines „verarbeitbaren“ Pfads sein. Aber auch solche Dinge will ich mit der Normalisierung aus dem Pfad streichen. Ich finde deine Art der Fehlerbehandlung sehr gut. Auch von deinem Code habe ich mir etwas stibitzt. An meiner Ursprungsfunktion konnte ich noch einiges verbessern. Hier der aktuelle Stand: PHP-Code: | |||
| | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Supermoderator HD Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Wenn du den Pfad Segment für Segment durchgehst und entsprechend Teile auf den Verzeichnisebenen-Stack draufschmeißt oder wieder runterholst, ist es eigentlich egal, womit der Pfad beginnt. Und im Falle eines absoluten Pfades setzt du halt zu Anfang einfach den Basepath auf /. Abschließende Slashes werden verworfen.
__________________ Refining Linux Advent Calendar series “24 Outstanding ZSH Gems” |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | @nikosch: Ich bin für alle Argumente offen. Bei "./" am Beginn relativer Pfade würde sich auch lediglich ändern, dass die Konkatenation zweier normalisierter Pfade wieder einen normalisierten Pfad ergibt. Das wäre eine Einschränkung, mit der ich leben könnte. Was mir fehlt, sind die Pro-Argumente. Hinsichtlich der strikten Durchsetzung von Konventionen kann ich auf die Antwort an Chriz verweisen. Das ist durchaus Absicht, weil ich keinen Grund sehe, darauf zu verzichten. Der Anwendungszweck ist grob gesagt ein realpath-Äquivalent für nicht existierende lokale Pfade, das auch mit relativen Pfaden umgehen kann. Wenn es hilft: Betrachtet die Problemstellung vielleicht nicht aus dem Blickwinkel Webentwicklung. Es geht eher um Software, die „lokal“ ausgeführt wird (vor dem Hintergrund eines echten Dateisystems). Es geht auch nicht um Zugriffsbeschränkungen irgendeiner Art. Das wären alles konkrete Anwendungen. Mein Ansatz ist allgemeiner. Ich möchte lediglich ein paar Strings in eine eindeutige, vereinfachte Form bringen, die möglichst sinnvoll aufgebaut ist. @Manko: Worauf bezieht sich die Antwort? Geändert von mermshaus (03.02.2012 um 03:12 Uhr). |
| | |
| | |
| Erfahrener Benutzer | Das Problem ist mit unter die Idiotensicherheit der Pfade, was kriegt man da vorgeworfen, Unix-Pfade ? Windows-Pfade ? UNCs ? another cents: PHP-Code: PHP-Code:
__________________ Geändert von tr0y (03.02.2012 um 07:52 Uhr). |
| | |
| | |||
| Supermoderator HD Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Zitat:
Zitat:
__________________ Refining Linux Advent Calendar series “24 Outstanding ZSH Gems” | ||
| | |
| | |
| Erfahrener Benutzer Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Ich glaube, „realpath für nicht existierende Pfade“ trifft den Zweck der Funktion ganz gut. Zur Frage "./" vs. "" zu Beginn relativer Pfade können wir meinetwegen auch eine Abstimmung machen. Aber lieber sind mir Argumente. Möglicherweise ist ein Argument, dass mit "./" jeder Pfad entweder mit "/", "." oder ".." beginnt. Hm. Überzeugt mich nicht. @tr0y: Ich denke, ich bleibe bei „simplen“ lokalen Pfaden. Das tut realpath glaube ich auch, habe es aber nicht überprüft. |
| | |
| | ||
| Moderator Registriert seit: 11.05.2008
Beiträge: 6.267
![]() ![]() ![]() ![]() ![]() ![]() ![]() | Zitat:
PHP-Code: Was du natürlich machen könntest - um beides zu erreichen - wäre eine Art Pluginsystem, wie du das schon mit normalizeDirectorySeparators gemacht hast und troy es mit pre/postParse gemacht hat: Du machst deine Klasse konfigurierbar, vielleicht sogar mit ein zwei statischen Builder-Methoden, die vorkonfigurierte Objekte zurückliefern, die du dann nur noch mit invoke() aufrufen müsstest. Ist aber nur so eine Idee.
__________________ "Nuschel ich?" - "Was?" | |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Meine konkrete Anwendung ist ein kleines Tool, das statische HTML-Ausgaben generiert, also das lokal vor dem Upload Includes ausführt und derlei Dinge, sodass die fertigen Dateien auf dem Server ohne PHP auskommen. Dazu müssen haufenweise Dateien generiert und in ein Export-Verzeichnis (und Unterverzeichnisse) exportiert werden. Diese Verzeichnisse existieren zur Laufzeit natürlich noch nicht. Die Generierung ist der Zweck des Tools. Der Aufruf des Tools erfolgt über die Kommandozeile mit einer Konfigurationsdatei als Eingabe. In der Konfigurationsdatei ist unter anderem das Wurzelverzeichnis für den Export festgelegt. Die Pfadangaben sind – wenn nicht absolut angegeben – relativ zur Konfigurationsdatei, weil ich nicht ständig das Working Directory vor Tool-Aufruf wechseln will. Ich habe also $configFileDir als absolute Angabe und $exportDir als dazu relative Angabe. Während der Laufzeit können dann weitere im Export-Verzeichnis zu erstellende Verzeichnisse und Dateien definiert werden. Diese Angaben sind relativ zu $exportDir. Nun kann es vorkommen, dass der tatsächliche Pfad einer Ressource ($configFileDir . $exportDir . $someFile) für das Script nicht beschreibbar ist. In diesem Fall (und auch zu Logging-Zwecken) möchte ich Fehlermeldungen ausgeben, die den Pfad möglichst klar darstellen. Ein typischer Pfad, der durch die oben angeführte Konkatenation entsteht, ist etwa: /path/to/config/dir/../../export/./some/dir/test.html. Den möchte ich zu /path/to/export/some/dir/test.html machen. Dass die entsprechende Funktion, die diese Vereinfachung durchführt, auch mit insgesamt relativen Pfaden umgehen können soll, ist der Wunsch nach einer möglichst allgemeinen Lösung. (Außerdem sehe ich da kein Hindernis.) Es geht hierbei rein um die Darstellung. Ob der Pfad gültig ist, wird anderswo entschieden. Grundsätzlich ist die Funktion aber schon auch in anderen Bereichen einsetzbar, wo Pfade aus Teilpfaden zusammengebaut werden. Wenn kein Router eingesetzt wird, der das übernimmt, wird das ja bei Webanwendungen ebenfalls ständig benötigt. Zumindest ich stehe da oft vor dem Problem, beispielsweise nicht zu wissen, ob ein Pfad nun schon auf "/" endet oder ob ich den Slash ergänzen muss, bevor ich eine weitere Komponente anhänge. Das führt dann zu irgendwelchen rtrim-Aufrufen und dergleichen. Für diese Fälle will ich jetzt endlich mal eine Standardvorgehensweise entwickeln. Geändert von mermshaus (07.02.2012 um 10:12 Uhr). |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] In Basispfad wechseln und von dort Pfade aufrufen | Phil7789 | PHP Einsteiger | 4 | 11.09.2011 21:24 |
| [Erledigt] Php Pfade | S@ndviper | PHP Einsteiger | 17 | 18.08.2011 13:31 |
| [Erledigt] Pfade für Anwendung definieren | chunky | PHP Einsteiger | 7 | 09.05.2011 17:49 |
| Apache und relative Pfade | Cyron | Server, Hosting und Workstations | 5 | 09.11.2010 07:35 |
| Pfade in der Webentwicklung | Asipak | Wiki Diskussionsforum | 0 | 30.04.2010 08:06 |
| Schrägstriche und Pfade | chunky | PHP Tipps 2010 | 10 | 19.02.2010 07:53 |
| relative Pfade von Grafiken bei modrewrite | jjkkll | HTML, Usability und Barrierefreiheit | 1 | 03.12.2009 16:43 |
| filemtime+relative Pfade | kanti | PHP Tipps 2008 | 5 | 19.12.2008 08:17 |
| PHP: Falsche Pfade bei include/require ohne include_path | Zergling-new | Tutorials | 4 | 20.05.2008 09:55 |
| welche pfade denn nun für welche funktion? | Promaetheus | PHP Tipps 2006 | 6 | 08.11.2006 21:33 |
| opendir() auf externe pfade anwenden | PHP-Fortgeschrittene | 4 | 14.09.2005 00:10 | |
| Pfade nicht Erkannt | Server, Hosting und Workstations | 1 | 29.07.2005 13:56 | |
| Pfade in einem Formular angeben | HTML, Usability und Barrierefreiheit | 2 | 05.01.2005 10:58 | |
| Nested Set Trees und Pfade | Datenbanken | 0 | 16.12.2004 16:51 | |
| Wie gebe ich die Pfade bei lokaler installation an??? | PHP Tipps 2004 | 1 | 23.08.2004 11:29 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| urls kanonisieren, php pfad window normalisieren |