[ BytEfLUSh @ 29.04.2005. 00:16 ] @
Imam sledeći kod:

Code:
function dircopy($source, $dest)
{
    if (is_file($source)) {
        return copy($source, $dest);
    }
    if (!is_dir($dest)) {
        mkdir($dest);
    }
    $dir = dir($source);
    while (false !== $entry = $dir->read()) {
        if ($entry == '.' || $entry == '..') {
            continue;
        }
        if ($dest !== "$source/$entry") {
            dircopy("$source/$entry", "$dest/$entry");
            $perms = substr(sprintf('%o', fileperms("$source/$entry")), -4);
            chmod ("$dest/$entry", $perms);
        }
    }
    $dir->close();
    return true;
}


Dakle, to treba da kopira ceo direktorijum (i njegove poddirektorijume) na drugo mesto na disku s tim što će na destination fajlove staviti isti mod kao što je na source fajlovima. Međutim, to ne funkcioniše - kopira on sve, ali fajlovi dobiju mode 0411 umesto 0777. Negde sam pročitao da je to zato što user pod kojim se pokreće Apache nema privilegiju da menja permissions od drugih fajlova, a mislim da mu ni ne bi bilo pametno dati tu mogućnost (gledano iz sigurnosnog ugla).

Da li postoji neki drugi način da se ovo odradi iz PHP-a?


EDIT: ftp_chmod ne može zato što nemam FTP usera koji bi to mogao odraditi.
[ _owl_ @ 29.04.2005. 14:27 ] @
Pa fora je u tome sto ti je promenljiva $perms tipa string a funkcija chmod ocekuje da drugi parametar bude tipa int pa zato dobijas pogresne dozvole (PHP pri konverziji podrazumeva da je $params u decimalnom a ne oktalnom formatu).
[ BytEfLUSh @ 29.04.2005. 14:35 ] @
To sam i ja pomislio, ali ni kad stavim chmod ("$dest/$entry", 0777); neće da radi, već mu uvek stavi mod 0411... Nije mi jasno - ako je PHP owner tih fajlova, zar ne bi trebao da može i da im menja permisije?
[ _owl_ @ 29.04.2005. 22:58 ] @
Bice da si ti nesto lose testiro.
Code:

<?php
function create_file($filename, $perms) {
    $filename="./" . basename($filename);
    if ( file_exists($filename) ) {
        return;
    }
    $fp=fopen($filename, "w");
    fclose($fp);
    chmod ($filename, $perms);
}
create_file("test1.txt", "0777");
create_file("test2.txt", 0777);
echo "Fajlovi kreirani";
?>

Rezultat rada skripte je:
Code:

-r----x--t    1 apache   web             0 Apr 29 22:16 test1.txt*
-rwxrwxrwx    1 apache   web             0 Apr 29 22:16 test2.txt*
[ BytEfLUSh @ 30.04.2005. 00:09 ] @
Hmmm zaista čudno. To je u principu isto ono što sam i ja uradio (tj. 0777 bez navodnika), samo što sam umesto ./filename.txt stavljao punu putanju do fajla (tu nema greške pošto je sa istom tom putanjom uspešno kreirao fajlove).

Da li je moguće da je na serveru podešeno da apache user nema prava da menja permisije na fajlu čak i ako je on owner tog fajla?