kills Geschrieben 5. Juli 2005 Geschrieben 5. Juli 2005 Hallo zusammen, ich habe hier eine installations-routine in php die prüft ob Dateien/Verzeichnisse vorhanden sind. Wenn dabei nun ein Fehler auftritt möchte ich ausgeben welche Datei/Verzeichnis fehlt/nicht beschreibbar ist. Da dabei aber Pfad entstehen, die den ein oder anderne User verwirren ( z.b. ./www/app1/../../ab.php) möchte ich diese durch Absolute ersetzen. Nun wollte ich das mit der Funktion realpath() machen, dieser funktioniert aber nur, wenn die Datei/Ordner existiert. Wie könnte ich das lösen? $WRITEABLE = array("/master.inc.php", "addons/import_export/files", // snip "addons/stats/logs", "../../files"); foreach($WRITEABLE as $item) { if(is_dir($item)) { // Verzeichnisse prüfen if(!@is_writable($item."/.")) { $MSG[err] .= $I18N->msg("setup_012",$item)."<br>"; } }elseif(is_file($item)) { // Dateien prüfen if(!@is_writable($item)) { $MSG[err] .= $I18N->msg("setup_014",$item)."<br>"; } }else { // Verzeichnis/Datei fehlt $MSG[err] .= $I18N->msg("setup_015",$item)."<br>"; } } [/PHP] Danke im vorraus und Gruß, Gruß, Markus
baba007 Geschrieben 5. Juli 2005 Geschrieben 5. Juli 2005 $fuer_verwirrte = realpath("./www/app1"); $fuer_noch_mehr_verwirrte = realpth ("../../ab.php"); if (!$fuer_verwirrte) { echo "der Ordner". $var_fuer_app1 . ", existiert leider nicht"; } else { echo "Der absolute Pfad ist ".$fuer_noch_mehr_verwirrte; }
kills Geschrieben 5. Juli 2005 Autor Geschrieben 5. Juli 2005 Das ist doch genau das was ich schon versucht hab. Wenn der Pfad nicht existiert, geht realpath nicht... realpath() returns FALSE on failure, e.g. if the file does not exists. Gruß, Markus
etreu Geschrieben 5. Juli 2005 Geschrieben 5. Juli 2005 Lese doch den absoluten Pfad deines laufenden Skripts aus und "berechne" den anderen selber, denn der ist doch relativ zu deinem Skript.
kills Geschrieben 5. Juli 2005 Autor Geschrieben 5. Juli 2005 Daran hatte ich schon gedacht, aber ich hab eigentlich gehofft, dass es sowas schon gibt... Ich stell mir das nicht so einfach vor...
etreu Geschrieben 5. Juli 2005 Geschrieben 5. Juli 2005 Das lässt sich doch recht leicht als Stack implementieren: 1. push jedes Verzeichnis des abs. Pfades deines laufenden Scripts 2. push jedes weitere Verzeichnis XXX der Form XXX/ 3. pop das letzte Element vom Stack für jedes ../ das kommt
kills Geschrieben 5. Juli 2005 Autor Geschrieben 5. Juli 2005 Hi, Danke für die Tipps, ich habs hinbekommen... War doch einfacher als Gedacht :-) Gruß, Markus
kills Geschrieben 6. Juli 2005 Autor Geschrieben 6. Juli 2005 function absPath( $rel_path) { $path = realpath( '.'); $stack = explode(DIRECTORY_SEPARATOR, $path); foreach( explode( '/',$rel_path) as $dir) { if ( $dir == '.') continue; if ( $dir == '..') { array_pop( $stack); } else { array_push( $stack, $dir); } } return implode('/',$stack); } [/PHP]
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden