Acces selectiv in director pe server

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
andras
Mesaje: 430

Acces selectiv in director pe server

Salut,
Am pe server un folder cu acces 0777, in acest folder profesorul salveaza cursurile de sah in format HTML, cursuri pe care le editeaza direct in pagina cu CKEditor.
Cum fac sa aiba acces la acest folder doar userii logati sau anumiti useri?
Daca pun alt nivel de acces (ex.0755) nu se mai poate salva fisierul HTML pe server. Daca salvez fisierul in format PDF iarasi este vizibil in browser.
Cum se rezolva de obicei astfel de situatii? Multumesc.

MarPlo Mesaje: 4343
Salut
Stiu 2 posibilitati:

1. La sectiunea de salvare fisier. Daca directorul e creat din php, sau are permisiuni sa scrie in el, ii poti modifica din php permisiunile chmod.
De exemplu, il poti lasa initial cu chmod 0777 (fiindca oricum il va schimba dupa prima accesare), iar cand vrei sa scrii /modifici ceva in el, setezi chmod 0777, apoi iar 0640. Cam asa:

Cod: Selectaţi tot

$dir ='path_to/dir';
if(chmod($dir, 0777)){
  //salveaza /scrie fisier

  chmod($dir, 0640);  //schimba chmod
}
else echo 'Unable to set chmod for: '. $dir; 
2. Sau la partea de citire a fisierului. Poti sa blochezi cu .htaccess accesul direct la fisierele din director, cu acest cod intr-un fisier ".htaccess" in acel director:

Cod: Selectaţi tot

<Files *>
  Order Allow,Deny
  Deny from All
</Files>
Si vand ai nevoie de vreun fisier, il preiei printr-un script php care le poate citi si returna. La acel script trimiti prin GET sau POST numele fisierului, iar daca utilizatorul e logat, citeste acel fisier:

Cod: Selectaţi tot

//Access this script with: script.php?f=file_name.html
if($user_loged && isset($_REQUEST['f'])){
  $f = trim(strip_tags($_REQUEST['f']));
  readfile($f);
} 

andras Mesaje: 430
Am inteles, dar mai am o intrebare. Pe server am incercat cu prima varianta. Directorul cu chmod 0777 este in root-ul aplicatiei si este copiat pe server pentru ca nu pot atribui chmod 0777 la root (deci in root nu pot defini director cu script PHP, nu executa comanda). Apoi definesc (cu script PHP) subdirectoare cu chmod 0755 in acest director, dar nu are efect, toate sint vizibile (continutul) in browser chiar daca am pus la subdirector chmod o755. Sa inteleg ca trebuie sa folosesc varianta 2?

MarPlo Mesaje: 4343
Chmod 0755 permite citirea directorului /fisierului. Ca sa blochezi citirea pentru nivelul public, seteaza chmod 0640.
- Daca vrei sa intelegi cum e cu setarile CHMOD, vezi lectia de pe site: https://marplo.net/php-mysql/fisiere.html punctul 2. Privilegii de fisier.