chmod

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

chmodÄndert den Modus für die Zugriffsrechte einer Datei

Beschreibung

chmod(string $filename, int $permissions): bool

Versucht, den Modus für die Zugriffsrechte der angegebenen Datei zu dem in permissions definierten zu ändern.

Parameter-Liste

filename

Pfad zu der Datei.

permissions

Es ist zu beachten, dass permissions nicht automatisch für einen Oktalwert gehalten wird. Um also sicherzustellen, dass die Operation wie erwartet verläuft, muss permissions mit dem Präfix Null (0) versehen werden. Zeichenketten wie etwa "g+w" funktionieren nicht korrekt.

<?php
chmod
("/einverzeichnis/einedatei", 755); // dezimal; wahrscheinlich falsch
chmod("/einverzeichnis/einedatei", "u+rwx,go+rx"); // Zeichenkette; falsch
chmod("/einverzeichnis/einedatei", 0755); // oktal; richtiger Wert für den Modus
?>

Der Parameter permissions besteht aus drei oktalen Zifferkomponenten, die die Zugriffsberechtigungen für den Besitzer, für die Gruppe, in der der Besitzer ist, und für alle anderen in dieser Reihenfolge festlegen. Eine Komponete kann durch Addition der benötigten Rechte für das jeweilige Ziel berechnet werden. Die Ziffer 1 bedeutet, dass man Ausführrechte gewährt, die Ziffer 2 bedeutet, dass die Datei beschreibbar ist, die Ziffer 4 bedeutet, dass die Datei lesbar ist. Addieren Sie diese Zahlen, um die benötigten Rechte anzugeben. In unixoiden Betriebssystemen können Sie mit 'man 1 chmod' und 'man 2 chmod' mehr über diese Modi lesen.

<?php
// Lese- und Schreibrechte für den Besitzer, keine für alle anderen
chmod("/somedir/somefile", 0600);

// Lese- und Schreibrechte für den Besitzer, Leserechte für alle anderen
chmod("/somedir/somefile", 0644);

// Alle Rechte für den Besitzer, Lese- und Ausführrechte für andere
chmod("/somedir/somefile", 0755);

// Alle Rechte für den Besitzer, Lese- und Ausführrechte für die Gruppe
chmod("/somedir/somefile", 0750);
?>

Rückgabewerte

Gibt bei Erfolg true zurück. Bei einem Fehler wird false zurückgegeben.

Fehler/Exceptions

Bei einem Fehler wird ein E_WARNING ausgegeben.

Anmerkungen

Hinweis:

Der aktuelle Nutzer ist der Nutzer, unter dem PHP läuft. Dies ist möglicherweise nicht der gleiche Nutzer wie der, der für den Shell- oder FTP-Zugang verwendet wird. Auf den meisten Betriebssystemen können die Zugriffsrechte nur durch den Besitzer der Datei geändert werden.

Hinweis: Diese Funktion kann nicht mit entfernten Dateien arbeiten, da der Zugriff auf die Datei, die bearbeitet werden soll, über das Dateisystem des Servers möglich sein muss.

Siehe auch

  • chown() - Ändert den Eigentümer einer Datei
  • chgrp() - Ändert die Gruppenzugehörigkeit einer Datei
  • fileperms() - Liefert die Zugriffsrechte einer Datei
  • stat() - Sammelt Informationen über eine Datei

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