PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : chmod / Dateirechte mit PHP auf Webspace aendern



Jo Ke
17-01-2007, 00:26
Hallo zusammen,

ich brauche ein PHP-Datei, 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/tmp/php/testordner und sie ändert alles darin und darunter.

Ich brauche auf meinem Webspace 750 für alle Verzeichnisse und 640 auf allen Dateien. So weit bin ich gekommen... (wenn auch nicht selber :o ) aber es funktioniert nicht:


<?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", 640, 750);
?>

Ich habe keine Ahnung, wie ich dieses weiter voran treiben kann. Es handelt sich um normalen Webspace (also kein Root Zugang vorhanden).
Es waere gut ein paar log messages auszugeben. Hat jemand Zeit sich das mal anzuschauen?

Gruß & Dank
Jo Ke

Turbohummel
17-01-2007, 06:08
Stichwort chown, vielleicht hilft dir das weiter.

Jo Ke
17-01-2007, 06:33
Hi Turbohummel,

ja, chown sagt mir was. Was willst Du mir damit sagen? Fehlt in meinem Script noch etwas? Wenn ja, wie muesste ich dass einbauen?

Vielen Dank!
Jo Ke

undefined
18-01-2007, 13:35
chown kannst du nur mit Daemon oder root Benutzer Rechten verwenden was bei einem HTTP Upload nicht geht weil PHP ein Client von Apache ist (Siehe Manual).
Wenn du solche Aktionen planst solltest du generell mit dem FTP Protokoll Arbeiten. Damit hast du von vorne weg die passenden Benutzer Rechte und viel umstand gespart ;)
Ein zweites - manche PHP Versionen haben ein Problem bei der funktion chmod() mit Integer Werten - verwende float.
z.B.

chmod( $file, (float)0644 );

Des weiteren
Sehe dir mal deinen chmod Aufruf genau an ;)


PPS: Ein is_writeable() erspart viel Sucherei ;)