Frage

Wer weiß, wie kann ich überprüfen, um zu sehen, ob ein Verzeichnis in PHP beschreibbar ist?

Die Funktion is_writable funktioniert nicht für Ordner. (Edit:.. Es funktioniert Siehe die akzeptierte Antwort)

War es hilfreich?

Lösung

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

  

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

Andere Tipps

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
}

um genauer zu sein für Eigentümer / Gruppe / Welt

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

Frieden ...

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

$file_directory = dirname($file);

Dann nutzen is_writable($file_directory), um zu bestimmen, ob der Ordner beschreibbar ist.

Ich hoffe, das hilft jemand.

Nach der Dokumentation is_writable , sollte es nur Arbeit - aber Sie sagte "Ordner", so könnte dies Windows Ausgabe . Die Kommentare vorschlagen dieses Problem zu umgehen .

(A eilten früher hat mich zum Nachdenken zu lesen, dass folgende Schrägstriche waren wichtig, aber das erwies sich für diese Arbeit um genau zu sein um).

Ich habe ein kleines Skript geschrieben (ich nenne es isWritable.php ), die alle Verzeichnisse im gleichen Verzeichnis erkennt das Skript in und schreiben auf der Seite, ob jedes Verzeichnis beschreibbar ist oder nicht. Hoffe, das hilft.

<?php
// isWritable.php detects all directories in the same directory the script is in
// and writes to the page whether each directory is writable or not.

$dirs = array_filter(glob('*'), 'is_dir');

foreach ($dirs as $dir) {
    if (is_writable($dir)) {
        echo $dir.' is writable.<br>';
    } else {
        echo $dir.' is not writable. Permissions may have to be adjusted.<br>';
    } 
}
?>

stat ()

ähnlich wie ein System stat, aber in PHP. Was Sie prüfen möchten, ist der Moduswert, genauso wie Sie aus jedem anderen Anruf würden in anderen Sprachen stat (d C / C ++).

http://us2.php.net/stat

Nach dem PHP-Handbuch is_writable sollte auf Verzeichnisse funktionieren.

Dies ist, wie ich es tun:

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

$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 können Sie die Dummy-Datei löschen, indem Sie mit unlink ()

unlink('directory/dummy.txt');

In meinem Fall is_writable zurück wahr, aber wenn versucht, die Datei zu schreiben - ein Fehler erzeugt wurde
. Dieser Code hilft zu prüfen, ob die $dir existiert und beschreibbar ist:

<?php
$dir = '/path/to/the/dir';

// try to create this directory if it doesn't exist
$booExists     = is_dir($dir) || (mkdir($dir, 0774, true) && is_dir($dir));
$booIsWritable = false;
if ($booExists && is_writable($dir)) {
    $tempFile = tempnam($dir, 'tmp');
    if ($tempFile !== false) {
        $res = file_put_contents($tempFile, 'test');

        $booIsWritable = $res !== false;
        @unlink($tempFile);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top