chmod

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

chmodDosya kipini değiştirir

Açıklama

chmod(string $dosyaismi, int $kip): bool

Belirtilen dosyanın kipini kip yapmaya çalışır.

Bağımsız Değişkenler

dosyaismi

Dosya yolu.

kip

kip ile belirtilen değerin otomatik olarak sekizlik bir değer olduğu varsayılmamaktadır, bu bakımdan umulan işlemi sağlamak için değerin önüne 0 (sıfır) getirmeniz gerekir. Ayrıca, ("g+w" gibi) dizesel kip belirtimleri çalışmayacaktır

<?php
chmod
("/somedir/somefile", 755); // onluk tabanda; doğru sonuç vermeyebilir
chmod("/somedir/somefile", "u+rwx,go+rx"); // dizge; doğru sonuç vermeyebilir
chmod("/somedir/somefile", 0755); // sekizlik; doğru kip değeri.
?>

kip bağımsız değişkeni üç adet sekizlik değerden oluşur. Sırayla kullanıcı, grup ve diğerlerinin izinlerini düzenlerler. Her bileşen kullanıcıya verilen izinlerin toplamından oluşur. Çalıştırma hakkı için 1, yazma hakkı için 2 ve okuma hakkı için 4 değeri toplama dahil edilir. Unix sistemlerindeki kipler hakkında daha ayrıntılı bilgiyi 'man 1 chmod' ve 'man 2 chmod' kılavuz sayfalarında bulabilirsiniz.

<?php
//sahibinden başkası okuyup yazamasın
chmod("/birdizin/birdosya", 0600);

// Sahibi okuyup yazsın başka herkes sadece okuyabilsin
chmod("/birdizin/birdosya", 0644);

// Sahibi herşeyi yapsın, başka herkes okuyup çalıştırabilsin
chmod("/birdizin/birdosya", 0755);

// Sahibi herşeyi yapsın, grup üyeleri okuyup çalıştırabilsin,
// diğerleri hiçbir şey yapamasın
chmod("/birdizin/birdosya", 0750);
?>

Dönen Değerler

Başarı durumunda true, başarısızlık durumunda false döner.

Hatalar/İstisnalar

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

Notlar

Bilginize:

Geçerli kullanıcı PHP'yi çalıştıran kullanıcıdır. Muhtemelen normal kabuk ve FTP erişimi için kullandığınız kullanıcı değildir. Çoğu sistemde dosyanın kipini sadece dosyanın sahibi olan kullanıcı değiştirebilir.

Bilginize: Dosyaların sunucunun dosya sistemi üzerinden erişilebilir olması gerektiğinden bu işlev uzak dosyalar üzerinde çalışmayacaktır.

Ayrıca Bakınız

  • chown() - Dosyanın sahibini değiştirir
  • chgrp() - Dosya grubunu değiştirir
  • fileperms() - Dosya izinlerini döndürür
  • stat() - Bir dosya hakkında bilgi döndürür

add a note

User Contributed Notes 6 notes

up
58
MethodicalFool
14 years ago
BEWARE, a couple of the examples in the comments suggest doing something like this:

chmod(file_or_dir_name, intval($mode, 8));

However, if $mode is an integer then intval( ) won't modify it. So, this code...

$mode = 644;
chmod('/tmp/test', intval($mode, 8));

...produces permissions that look like this:

1--w----r-T

Instead, use octdec( ), like this:

chmod(file_or_dir_name, octdec($mode));

See also: http://www.php.net/manual/en/function.octdec.php
up
38
Geoff W
14 years ago
BEWARE using quotes around the second parameter...

If you use quotes eg

chmod (file, "0644");

php will not complain but will do an implicit conversion to an int before running chmod. Unfortunately the implicit conversion doesn't take into account the octal string so you end up with an integer version 644, which is 1204 octal
up
36
masha at mail dot ru
19 years ago
Usefull reference:

Value Permission Level
400 Owner Read
200 Owner Write
100 Owner Execute
40 Group Read
20 Group Write
10 Group Execute
4 Global Read
2 Global Write
1 Global Execute

(taken from http://www.onlamp.com/pub/a/php/2003/02/06/php_foundations.html)
up
8
chris at ocproducts dot com
4 years ago
Windows has a very different file permission model to Unix and integrates them only minimally.

On Windows, all this function can do is to change the "read only" flag, which is turned on if $mode & 0200 does not pass.
i.e. it only checks if u+w is missing from the bitmask, and if it is, it sets the read only flag.

The executable flag cannot be set as Windows determines it based on file extension.
The write flag cannot be set as Windows determines write access based on ACLs, which are not integrated here.
up
6
alex at feidesign dot com
19 years ago
If you cannot chmod files/directories with PHP because of safe_mode restrictions, but you can use FTP to chmod them, simply use PHP's FTP-functions (eg. ftp_chmod or ftp_site) instead. Not as efficient, but works.
up
2
sander
15 years ago
if you want to chmod directories too, use this

<?php
$iterator
= new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathname), RecursiveIteratorIterator::SELF_FIRST);

foreach(
$iterator as $item) {
chmod($item, $filemode);
}
?>
To Top