is_writable

(PHP 4, PHP 5, PHP 7, PHP 8)

is_writablePrüft, ob in eine Datei geschrieben werden kann

Beschreibung

is_writable(string $filename): bool

Gibt true zurück, wenn filename existiert und schreibbar ist. Der Dateinamens-Parameter kann auch ein Verzeichnisname sein, um prüfen zu können, ob ein Verzeichnis schreibbar ist.

Bedenken Sie, dass PHP mit der Benutzer-ID auf die Datei zugreift, unter der der Webserver läuft (oftmals ist dies 'nobody').

Parameter-Liste

filename

Der zu prüfende Dateiname.

Rückgabewerte

Gibt true zurück, wenn filename existiert und schreibbar ist.

Fehler/Exceptions

Im Fehlerfall wird eine E_WARNING ausgegeben.

Beispiele

Beispiel #1 is_writable()-Beispiel

<?php
$filename
= 'test.txt';
if (
is_writable($filename)) {
echo
'Die Datei kann geschrieben werden';
} else {
echo
'Die Datei kann nicht geschrieben werden';
}
?>

Anmerkungen

Hinweis: Die Ergebnisse dieser Funktion werden zwischengespeichert. Weitere Details sind bei clearstatcache() zu finden.

Tipp

Seit PHP 5.0.0 kann diese Funktion mit einigen URL-Wrappern benutzt werden. Schauen Sie in der Liste unter Unterstützte Protokolle und Wrapper nach, welcher Wrapper die Funktionalität von stat() unterstützt.

Siehe auch

  • is_readable() - Prüft, ob eine Datei existiert und lesbar ist
  • file_exists() - Prüft, ob eine Datei oder ein Verzeichnis existiert
  • fwrite() - Binär-sicheres Dateischreiben

add a note

User Contributed Notes 9 notes

up
22
helvete at bahno dot net
8 years ago
Be warned, that is_writable returns false for non-existent files, although they can be written to the queried path.
up
5
h3ssan at protonmail dot com
10 months ago
In Linux, you might encountering an issue which is a file is not writable even tho it has 644 permission! The problem is with SELinux, just disable it or add rules to allow it.
up
8
starrychloe at yahoo dot com
17 years ago
To Darek and F Dot: About group permissions, there is this note in the php.ini file:; By default, Safe Mode does a UID compare check when; opening files. If you want to relax this to a GID compare,; then turn on safe_mode_gid.safe_mode_gid = Off
up
5
arikan134 at gmail dot com
9 years ago
Check director is writable recursively. to return true, all of directory contents  must be writable<?phpfunction is_writable_r($dir) {    if (is_dir($dir)) {        if(is_writable($dir)){            $objects = scandir($dir);            foreach ($objects as $object) {                if ($object != "." && $object != "..") {                    if (!is_writable_r($dir."/".$object)) return false;                    else continue;                }            }                return true;            }else{            return false;        }            }else if(file_exists($dir)){        return (is_writable($dir));            }}?>
up
8
darek at fauxaddress dot com
19 years ago
It appears that is_writable() does not check full permissions of a file to determine whether the current user can write to it.  For example, with Apache running as user 'www', and a member of the group 'wheel', is_writable() returns false on a file like-rwxrwxr-x           root         wheel          /etc/some.file
up
2
JimmyNighthawk
19 years ago
Regarding you might recognize your files on your web contructed by your PHP-scripts are grouped as NOBODY you can avoid this problem by setting up an FTP-Connection ("ftp_connect", "ftp_raw", etc.) and use methods like "ftp_fput" to create these [instead of giving out rights so you can use the usual "unsecure" way]. This will give the files created not the GROUP NOBODY - it will give out the GROUP your FTP-Connection via your FTP-Program uses, too.Furthermore you might want to hash the password for the FTP-Connection - then check out:http://dev.mysql.com/doc/mysql/en/Password_hashing.html
up
4
agrenier at assertex dot com
21 years ago
This file_write() function will give $filename the write permission before writing $content to it.Note that many servers do not allow file permissions to be changed by the PHP user.<?php    function file_write($filename, &$content) {         if (!is_writable($filename)) {            if (!chmod($filename, 0666)) {                 echo "Cannot change the mode of file ($filename)";                 exit;            };        }        if (!$fp = @fopen($filename, "w")) {            echo "Cannot open file ($filename)";            exit;        }        if (fwrite($fp, $content) === FALSE) {            echo "Cannot write to file ($filename)";            exit;        }         if (!fclose($fp)) {            echo "Cannot close file ($filename)";            exit;        }    } ?>
up
2
gr
14 years ago
The results of this function seems to be not cached :Tested on linux and windows<?phpchmod($s_pathFichier, 0400);echo'<pre>';var_dump(is_writable($s_pathFichier));echo'</pre>';chmod($s_pathFichier, 04600);echo'<pre>';var_dump(is_writable($s_pathFichier));echo'</pre>';exit;?>
up
1
develop at radon-software dot net
3 years ago
This function returns always false on windows, when you check an network drive.See PHP Bug https://bugs.php.net/bug.php?id=68926See https://stackoverflow.com/q/54904676
To Top