2009-11-13 14 views
9

Czy istnieje sposób sprawdzenia, czy istnieją pliki (z bezwzględną lub względną ścieżką)? Im przy użyciu PHP. Znalazłem kilka metod, ale albo akceptują tylko absolutne, albo względne, ale nie oba. Dzięki.Sprawdź, czy istnieją pliki o ścieżce bezwzględnej i względnej

+0

Zapomniałem wspomnieć o tym, co to jest logika, jeśli plik nie istnieje w głównym sprawdzaniu dokumentu ze zdalnego adresu URL dla zamiennika. Chyba źle wypróbuję odpowiedź Roba. dzięki chłopaki – uji

Odpowiedz

25

file_exists($file); załatwia sprawę zarówno dla ścieżek względnych, jak i bezwzględnych.

Co jest bardziej użyteczne, jednak ma bezwzględne ścieżki bez twardego kodu. Najlepszym sposobem na to jest użycie dirname(__FILE__), która pobiera pełną ścieżkę katalogu bieżącego pliku w unixowym formacie Windows. Następnie używamy realpath(), która wygodnie zwraca wartość false, jeśli plik nie istnieje. Wszystko co musisz zrobić, to określić względną ścieżkę z katalogu tego pliku i umieścić je wszystkie razem:

$path = dirname(__FILE__) . '/include.php'; 
if (realpath($path)) { 
    include($path); 
} 
+0

realpath() Zwróć kanoniczną ścieżkę, więc zetrzyj linki symboliczne. Czy istnieje sposób, aby tego uniknąć i sprawdzić, czy ścieżka jest absolutna, nawet jeśli nie jest kanoniczna? – Pierre

+0

dobre umiejętności pedagogiczne – unkown

3

file_exists($path) sprawdzi bezwzględną ścieżkę lub względną lokalizację skryptu. Jeśli chcesz sprawdzić, w stosunku do głównego dokumentu można spróbować file_exists("{$_SERVER['DOCUMENT_ROOT']}path");

Jeśli chcesz funkcję, która będzie miała zarówno względne i bezwzględne ścieżki coś jak to powinno działać (niesprawdzone):

function check_file($path) { 
    return (file_exists($path) || file_exists("{$_SERVER['DOCUMENT_ROOT']}path")); 
} 
4

Można użyć realpath aby sprawdzić, czy plik istnieje w podanej ścieżce i odzyskać rozszerzoną ścieżkę do tego pliku:

$absPath = realpath($path); 
if ($absPath === false) { 
    // invalid path 
} 
Powiązane problemy