PHP 8.4.2 Released!

is_writable

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

is_writableDosyanın yazılabilir kipte ise bunu doğrular

Açıklama

is_writable(string $dosya): bool

dosyaismi ile belirtilen dosya mevcutsa ve yazılabilirse true döndürür. dosyaismi olarak bir dizin belirtilerek bir dizinin yazılabilirliği sınanabilir.

PHP'nin sadece HTTP sunucusunun aidiyetinde çalıştığı kullanıcının (çoğunlukla 'nobody') sahibi olduğu dosyalara erişebildiği unutulmamalıdır.

Bağımsız Değişkenler

dosya

Yazılabilirliği sınanacak dosya veya dizin.

Dönen Değerler

dosya mevcutsa ve yazılabilirse true aksi takdirde false döndürür.

Hatalar/İstisnalar

Başarısızlık durumunda bir E_WARNING çıktılanır.

Örnekler

Örnek 1 - is_writable() örneği

<?php
$dosya
= 'test.txt';
if (
is_writable($dosya)) {
echo
'Dosyaya yazılabilir';
} else {
echo
'Dosya yazılabilir kipte değil';
}
?>

Notlar

Bilginize: Bu işlevin sonuçları önbelleğe kaydedilir. Daha ayrıntılı bilgi clearstatcache() işlevinde bulunabilir.

İpucu

PHP 5.0.0 sürümünden itibaren bu işlev bazı URL sarmalayıcıları ile kullanılabilmektedir. stat() ailesini destekleyen sarmalayıcıların listesi Desteklenen Protokoller ve Sarmalayıcılar başlığı altında bulunabilir.

Ayrıca Bakınız

  • is_readable() - Bir dosyanın mevcut ve okunabilir olup olmadığını söyler
  • file_exists() - Bir dosya veya dizinin mevcut olup olmadığına bakar
  • fwrite() - Dosyaya ikil kipte yazar

add a note

User Contributed Notes 9 notes

up
22
helvete at bahno dot net
7 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
2 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
16 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
8 years ago
Check director is writable recursively. to return true, all of directory contents must be writable

<?php
function 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
18 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
20 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

<?php
chmod
($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
2 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=68926
See https://stackoverflow.com/q/54904676
To Top