5. Juli 200520 j 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
5. Juli 200520 j $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; }
5. Juli 200520 j 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
5. Juli 200520 j Lese doch den absoluten Pfad deines laufenden Skripts aus und "berechne" den anderen selber, denn der ist doch relativ zu deinem Skript.
5. Juli 200520 j Daran hatte ich schon gedacht, aber ich hab eigentlich gehofft, dass es sowas schon gibt... Ich stell mir das nicht so einfach vor...
5. Juli 200520 j 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
5. Juli 200520 j Hi, Danke für die Tipps, ich habs hinbekommen... War doch einfacher als Gedacht :-) Gruß, Markus
6. Juli 200520 j 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]
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.