2008-09-20 12 views

Antwort

80

Ja, es funktioniert für Ordner ....

Gibt TRUE zurück, wenn der Dateiname existiert und beschreibbar ist. Das Argument filename kann ein Verzeichnisname sein, mit dem Sie überprüfen können, ob ein Verzeichnis beschreibbar ist.

+22

Der Trick ist, dass Sie keine * Datei * angeben können, die noch nicht in dem Ordner vorhanden ist, den Sie wirklich testen möchten - geben Sie einfach den Ordner an. – philfreo

0

Nach dem PHP-Handbuch is_writable sollte auf Verzeichnisse funktionieren.

3

Nach the documentation for is_writable sollte es einfach funktionieren - aber Sie sagten "Ordner", so könnte dies a Windows issue sein. Die Kommentare schlagen a workaround vor.

(Ein voreiliges Lesen ließ mich denken, dass nachfolgende Schrägstriche wichtig waren, aber das stellte sich als spezifisch für diese Arbeit heraus).

1

stat()

ähnlich wie ein System stat, aber in PHP. Was Sie überprüfen möchten, ist der Moduswert, ähnlich wie bei anderen Aufrufen von stat in anderen Sprachen (I.E. C/C++).

http://us2.php.net/stat

3

Sie können einen vollständigen Dateipfad zur is_writable() Funktion senden. is_writable() gibt false zurück, wenn die Datei nicht bereits im Verzeichnis vorhanden ist. Sie müssen das Verzeichnis selbst mit dem entfernten Dateinamen überprüfen, wenn dies der Fall ist. Wenn Sie das tun, wird Ihnen is_writable korrekt sagen, ob das Verzeichnis beschreibbar ist oder nicht. Wenn $file enthält Du diesen Dateipfad tun:

$file_directory = dirname($file); 

Dann is_writable($file_directory) verwenden, um festzustellen, ob der Ordner beschreibbar ist.

Ich hoffe, das hilft jemandem.

12

Dies ist der Code :)

<?php 

$newFileName = '/var/www/your/file.txt'; 

if (! is_writable(dirname($newFileName))) { 

    echo dirname($newFileName) . ' must writable!!!'; 
} else { 

    // blah blah blah 
} 
+0

Ahh, 'dirname ($ new_file_name)', das ist einfacher als das, was ich tun würde. Ich würde 'pathinfo ($ new_file_name, PATHINFO_DIRNAME)' verwenden. Vielen Dank. –

5

spezifischer für Eigentümer/Gruppe/Welt

$dir_writable = substr(sprintf('%o', fileperms($folder)), -4) == "0774" ? "true" : "false"; 

Frieden ...

+0

Diese Funktion sollte verbessert werden. Im Moment würde es für Berechtigungen wie '0777' falsch ausgeben. –

0

dies zu sein, wie ich es tun:

erstellen Sie eine Datei mit file_put_contents() und überprüfen Sie den Rückgabewert, wenn es positiv ist (Anzahl der geschriebenen Bytes), dann können Sie voran gehen und tun, was Sie tun müssen, wenn es falsch ist, dann ist es nicht

$is_writable = file_put_contents('directory/dummy.txt', "hello"); 

if ($is_writable > 0) echo "yes directory it is writable"; 

else echo "NO directory it is not writable"; 

dann beschreibbar Sie die Dummy-Datei mit unlink()

unlink('directory/dummy.txt'); 
+0

Während dies technisch funktioniert, ist es definitiv nicht die empfohlene Methode. Dateisystemoperationen sind relativ langsam und verursachen viel Overhead. Daher ist das Erstellen einer Dummy-Datei und das anschließende Löschen/Aufheben der Verknüpfung viel langsamer als bei den meisten anderen Methoden. – Byson

0

löschen Ich habe ein kleines Skript geschrieben (ich nenne es isWritable.php), die alle Verzeichnisse in dem Verzeichnis, in dem sich das Skript befindet, erkennt und auf die Seite schreibt, ob jedes Verzeichnis beschreibbar ist oder nicht. Hoffe das hilft.

Verwandte Themen