mit PHP die Berechtigungen (chmod) ändern

Jo Ke

Registered User
Hallo zusammen,

wie sieht eine PHP Datei aus, mit der ich für alle Verzeichnisse, Unterverzeichnisse und Dateien die Rechte ändern kann (also ein chmod -R)?
Z.B. lege ich die PHP Datei in htdocs/files/test/ und sie ändert alles darin und darunter.

Ich brauche auf meinem Webspace 750 für alle Verzeichnisse und 640 auf allen Dateien. Wer kann mir helfen?

Vielen Dank!

Gruß
Jo Ke
 
Hallo,

vielen Dank für die Antworten. Ich habe auch getestet, bin aber leider nicht weiter gekommen. Es sollte doch so einfach sein... :(

Kann mir das jemand "coden"?

Im aktuellen Verzeichnis:
"Alle Dateien und Dateien in Unterordnern" -> 640,
"Ordner und Unterordner" -> 750

Vielen Dank für die Unterstützung!
Jo Ke
 
PHP:
function chmod_r($path, $filemode, $dirmode) 
{ 

    $handle = opendir($path); 
    while ($file = readdir ($handle)) 
    { 
        if (eregi("^\.{1,2}$",$file)) 
        { 
            continue; 
        } 

        if(is_dir($path.$file)) 
        { 
            chmod($dirmode, $file); 
            chmod_r($path.$file."/", $filemode, $dirmode); 
        } 
        else 
        { 
            chmod($filemode, $file); 
        } 
    } 
    closedir($handle)
}

...ungetestet, grad nebenbei SternTV geguckt und getippt :)

MfG
 
Hallo kannnix,

vielen Dank dafür, aber leider verstehe ich nicht, wo die Berechtigungen gesetzt werden. Ich kann das von Dir geschriebene doch nicht einfach in eine change.php kopieren und mit "<?php" anfangen und mit "?>" aufhören, oder?

Sorry, aber ich habe leider noch nie mit PHP gearbeitet. :o

Danke!
Jo Ke
 
jo, das ist nur die Funktion, einfach wie du richtig sagtest in die php tags setzen, und am Ende mit

chmod_r(/var/www/pfad, 640, 750);

aufrufen.

MfG
 
Hallo kannnix,

ich bin zu doof! Es geht nicht... So sieht meine Datei jetzt aus:

PHP:
<?php
function chmod_r($path, $filemode, $dirmode) 
{ 

    $handle = opendir($path); 
    while ($file = readdir ($handle)) 
    { 
        if (eregi("^\.{1,2}$",$file)) 
        { 
            continue; 
        } 

        if(is_dir($path.$file)) 
        { 
            chmod($dirmode, $file); 
            show_dir($path.$file."/", $filemode, $dirmode); 
        } 
        else 
        { 
            chmod($filemode, $file); 
        } 
    } 
    closedir($handle)
}
chmod_r(../testordner, 641, 751);
?>

Ich habe es extra auf 641 und 751 gesetzt um es "auch gleich zu sehen".

Ich mache etwas falsch, oder?

Gruß & Dank
Jo Ke
 
da is mir am Anfang ein Fehler reingerutscht,
schau mal deine Zeile:
show_dir($path.$file."/", $filemode, $dirmode);
muss
chmod_r($path.$file."/", $filemode, $dirmode);
lauten.

hatte das eigentlich nur 5 sek falsche da stehen und gleich geändert :)

MfG

EDIT: und der pfad muss als string übergeben werden "/bla"
 
Last edited by a moderator:
Hallo kannix,

das Ding sieht jetzt so aus:

PHP:
<?php
function chmod_r($path, $filemode, $dirmode) 
{ 

    $handle = opendir($path); 
    while ($file = readdir ($handle)) 
    { 
        if (eregi("^\.{1,2}$",$file)) 
        { 
            continue; 
        } 

        if(is_dir($path.$file)) 
        { 
            chmod($dirmode, $file); 
            chmod_r($path.$file."/", $filemode, $dirmode); 
        } 
        else 
        { 
            chmod($filemode, $file); 
        } 
    } 
    closedir($handle)
}
chmod_r(/web/1/000/012/123/12345/htdocs/tmp/php/testordner, 641, 751);
?>

... und funktioniert weiterhin nicht. Gebe ich den Pfad falsch an? Das ist das von Provider angegebene Homedir. Habe es auch mit "/htdocs/tmp/php/testordner" versucht, hat aber auch nicht geklappt. :(

Was muss ich tun?

Gruß & Dank
Jo Ke
 
Äh, jo, der Pfad muss in Anführunsgzeichen angegeben werden...

Aber noch was, auf PHP: chmod - Manual steht:
Note: The current user is the user under which PHP runs. It is probably not the same user you use for normal shell or FTP access. The mode can be changed only by user who owns the file on most systems.

D.h. wenn die Files dem ftp user gehören kannst du mit dem php chmod keine Permissions setzen, nur per ftp, aber auch das ließe sich ja per php simulieren, in dem man die ftp Funktionen benutzt...

MfG
 
Hallo kannix,

Welches Beispiel von der angegebenen Seite macht am meisten Sinn für meine Anwendung, und wo baue ich es ein?

Und wieder danke... :o

Viele Grüße
Jo Ke
 
Für deine Anwendung ist genau das was kannnix dir geschrieben hat die beste Lösung.

Dein Aufruf ist nur falsch, es muss:
PHP:
chmod_r("/web/1/000/012/123/12345/htdocs/tmp/php/testordner", 641, 751);
sein.
 
Hallo,

es funktioniert leider nicht. Kann ich mir irgenwie debug messages ausgeben lassen? Am besten wäre diese direkt in den Browser zu posten, über den ich den Aufruf mache. Ich bin mir nicht sicher, dass der von mir verwendete Pfad richtig ist. :(

Brauche ich den / am Ende? Und brauche ich den / am Anfang oder kann ich auch einfach vom aktuellen Verzeichnis tiefer gehen, also so:
PHP:
chmod_r("testordner", 641, 751);
?

Viele Grüße & Danke für die Hilfe... ich schaffe das noch mit Eurer Hilfe!
Jo Ke
 
Back
Top