chmod - rechte per variable
Roger
- php
moin!
ich versuche die rechte bei meinem chmod-befehl per variable zu übergeben. allerdings klappt das nicht so, wie es soll, da diese ja als octalwert(?) angegeben werden müssen... -> chmod($datei, $wert)
wie mache ich das nun richtig?
gru.
roger.
hi,
ich versuche die rechte bei meinem chmod-befehl per variable zu übergeben. allerdings klappt das nicht so, wie es soll, da diese ja als octalwert(?) angegeben werden müssen... -> chmod($datei, $wert)
wie mache ich das nun richtig?
gruss,
wahsaga
moin!
- du liest im manual nach, wie die notation für oktalwerte ist (http://www.php.net/manual/de/language.types.integer.php)
- du liest bei der beschreibung von chmod() nach, wo ebenfalls etwas dazu steht
auf den seiten war ich bereits vorher schon. hat mich leider nicht weitergebracht...
gruß.
roger.
hi,
auf den seiten war ich bereits vorher schon. hat mich leider nicht weitergebracht...
dann zeig mal her, was du bisher versucht hast.
gruss,
wahsaga
Hello,
auf den seiten war ich bereits vorher schon. hat mich leider nicht weitergebracht...
Schau Dir auch http://www.php.net/manual/de/function.decoct.php an.
Dann klappt es.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
...
jon at zend dot com
15-Oct-2001 08:37
if 'mode' is held in a variable and is and octal value you need to convert it to decimal before passing it to the function:
chmod ($filename, octdec($mode))
Schau Dir auch http://www.php.net/manual/de/function.decoct.php an.
Dann klappt es.
also ist es genau anders herum. Die Zifferngruppe, die Du schreibst (0777), IST eine Oktalzahl. Die muss nun im Hintergrund in die Binärzahl einer Dezimalen Größe umgewandelt werden, da PHP bei Variablen dezimal arbeitet.
Also musst Du, wie in den UCN erklärt, http://www.php.net/manual/de/function.octdec.php durchlesen. Und da stehen auch die Erläuterungen zu mode.
Liebe Grüße aus http://www.braunschweig.de
Tom
moin!
mit decoct() und octdec() hab ich ne weile rumgespielt und festgestellt, dass es nicht so recht auf meinem server klappen wollte. dann hab ich einfach mal versucht an die funktion den wert ohne '-zeichen zu übergeben... und siehe da, es klappte. laut man isses aber wahrscheinlich nicht so ganz das gelbe vom ei...
hier mal das script:
<?
if ($_REQUEST['cmd'] == "unlock")
{
my_chmod(dirname($_SERVER['SCRIPT_FILENAME']), 0777);
}
elseif ($_REQUEST['cmd'] == "lock")
{
my_chmod(dirname($_SERVER['SCRIPT_FILENAME']), 0644);
}
else
{
echo '<a href="'.$_SERVER['PHP_SELF'].'?cmd=unlock">Alle Dateien im Admin-Verzeichnis beschreibbar machen (chmod 0777)</a><br>';
echo '<a href="'.$_SERVER['PHP_SELF'].'?cmd=lock">Rechte für alle Dateien zurücksetzen (chmod 0644)</a><br>';
}
function do_chmod($datei, $wert)
{
echo "CHMOD: ".$datei;
if (@chmod($datei, $wert)) echo "... OK"; else echo "... FEHLER";
echo "<br>";
}
function my_chmod($fname, $wert, $sub = 0)
{
$chmod_array = array();
$dir = opendir($fname);
while($file = readdir($dir))
{
if($file == "." || $file == "..")
{
continue;
}
$datei = $fname."/".$file;
if (is_dir($datei))
{
array_push($chmod_array, $datei);
my_chmod($datei, $wert, 1);
}
else
{
do_chmod($datei, $wert);
}
}
closedir($dir);
//setze die rechte für alle unterverzeichnisse zum schluss
if ($sub == 0)
{
if ($wert == 0644) $wert = 0755; // damit verzeichnis durchsuchbar bleibt, 0755
$chmod_array = array_reverse($chmod_array);
foreach($chmod_array as $datei)
{
do_chmod($datei, $wert);
}
}
}
?>
ziel war es ein script zu schreiben, welches die rechte auf selbst erstellte dateien und verzeichnisse, auch für andere benutzer, frei gibt. auf einigen servern ist es nämlich so, dass man auf diese dateien als ftp-user nicht zugreifen und somit einzelne dateien weder löschen noch bearbeiten kann. dieses script setzt nun schreibrechte für alle dateien und verzeichnisse im verzeichnis der ausführenden datei. damit nat. kein sicherheitsloch entsteht, kann man diese rechte wieder zurücksetzen - so dass das script wieder in die ordner schreiben kann.
wer lust hat, kann mir ja noch ein paar tips zur verbesserung geben. so läuft zumindest das script erst mal auf den von mir getesteten servern.
gruß.
roger.