Die überprüfung für die relative vs absolute Pfade/URLs in PHP
Muss ich Funktionen implementieren, um zu überprüfen, ob die Pfade und urls werden relative, absolute oder invalid (ungültig syntaktisch - nicht, ob eine Ressource vorhanden ist). Was sind das Spektrum der Fälle, die ich gesucht werden soll?
function check_path($dirOrFile) {
//If it's an absolute path: (Anything that starts with a '/'?)
return 'absolute';
//If it's a relative path:
return 'relative';
//If it's an invalid path:
return 'invalid';
}
function check_url($url) {
//If it's an absolute url: (Anything that starts with a 'http://' or 'https://'?)
return 'absolute';
//If it's a relative url:
return 'relative';
//If it's an invalid url:
return 'invalid';
}
nashruddin.com/... nehmen Sie die Ergebnisse der Funktion, die detailliert im link an und vergleichen Sie die vorher - /nachher-Ergebnisse. Wenn es geändert ist, dann haben Sie wahrscheinlich hatte eine relative url
roger, dass
B - Während, der link hat einige nützliche Teile, funktioniert es nicht für mich, da ist das esp, wenn ich nicht weiß, was die Basis der url, an mich weitergegeben werden - ich nicht in der Lage sein, um es anzupassen...
<ocd>
Haben Sie vergessen, die schließende einfache Anführungszeichen in die return
Werte.</ocd>
roger, dass
B - Während, der link hat einige nützliche Teile, funktioniert es nicht für mich, da ist das esp, wenn ich nicht weiß, was die Basis der url, an mich weitergegeben werden - ich nicht in der Lage sein, um es anzupassen...
InformationsquelleAutor Yarin | 2011-09-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Absolute Pfade und URLs
Sind Sie richtig, absolute URLs in Linux starten muss mit
/
, so dass die Prüfung für einen Schrägstrich in der Anfang des Pfades wird genug sein.Für URLs, die Sie brauchen, um zu überprüfen für
http://
undhttps://
, wie du geschrieben hast, allerdings gibt es noch weitere URLs beginnend mitftp://
,sftp://
odersmb://
. So ist es sehr abhängig davon, was Vielzahl von Verwendungen, die Sie abdecken möchten.Ungültige Pfade und URLs
Vorausgesetzt, Sie beziehen sich auf Linux, das nur mit chars, die sind verboten in einem Pfad sind
/
und\0
. Dies ist eigentlich sehr Dateisystem abhängig, können Sie jedoch davon ausgehen, das oben zu korrigieren für die meisten Anwendungen.In Windows ist es etwas komplizierter. Sie können darüber Lesen Sie in der Pfad.GetInvalidPathChars Methode Dokumentation unter Bemerkungen.
URLs sind komplizierter als Linux-Pfade als nur erlaubt chars sind
A-Z
,a-z
,0-9
,-
,.
,_
,~
,:
,/
,?
,#
,[
,]
,@
,!
,$
,&
,'
,(
,)
,*
,+
,,
,;
und=
(wie beschrieben in einer anderen Antwort hier).Relative Pfade und URLs
Im Allgemeinen, Pfade und URLs, die weder absolute noch ungültig sind relativ.
"C:\"
... ich kam mit der folgenden (Preg) regulärer Ausdruck:/^(?:\/|\\|\w\:\\).*$/
- diese entsprechen"/file"
,"\file"
,"c:\file"
, aber nicht"file"
oder"path/file"
etc.Tatsächlich, ich erinnere mich an einen Namen, der hatte eine
\0
im es auf Linux einmal auf Ext3 IIRC (nur zum Spaß). Auch\n
im Dateinamen funktioniert, diese beiden Dinge können brechen, 99% von scripts (nicht zu vergessen die Hälfte von Ihnen schon brechen, wenn die Pfade Leerzeichen enthalten, lol).Hey @mindplay.dk, deine regex funktioniert nicht für C:/. Aber es funktioniert für C:\. Nun in Windows -, C:/ Pfade sind legitim, wie gut! Irgendwelche Ideen, wie zu beheben?
Ich fügte hinzu, eine zusätzliche optional zum Update:
^(?:\/|\\|\w\:\\|\w\:\/).*$
. Es erkennt jetzt C:/.Da versucht es auf PHP, aufgrund der Art, wie PHP komischerweise entweicht backslashes, die regex umgewandelt werden
^(?:\/|\\\\|\w:\\\\|\w:\/).*$
/InformationsquelleAutor Ofir
Ich habe vor kurzem begonnen, ein Komponist Paket, das könnte nützlich sein für die Prüfung, ob die URL ' s sind relativ /absolut (und mehr, natürlich).
Auschecken repository hier: https://github.com/Enrise/UriHelper
Oder der Komponist Packagists Paket hier: https://packagist.org/packages/enrise/urihelper
Einige Beispiele:
InformationsquelleAutor Rob Quist
Da kann ich nicht kommentieren, Antworten, wegen meiner schlechten Ruf habe ich zu reagieren, um ymakux Antwort mit der Funktion, dass er kopiert von Drupal-Bibliothek.
Ich diese Funktion und ich habe herausgefunden, dass urls mit query-Teil (text nach ? symbol), die durch das symbol | wird ausgewertet zu false
Beispiel:
Wird ausgewertet zu false.
Alles, was Sie tun müssen ist, fügen Sie
Abfragen Teil der regex, damit die Funktion sieht wie folgt aus:
Hoffe, es hilft jemandem 🙂
InformationsquelleAutor Roman Zahradník
Vom Symfony-Dateisystem-Komponente zu prüfen, ob ein Pfad absolut ist:
InformationsquelleAutor CIRCLE
Diese Funktion wird übernommen von Drupal
Was müssen Sie überprüfen?
InformationsquelleAutor ymakux