Perché ricevo il "permesso negato" in PHP quando provo a rinominare una directory?
-
10-07-2019 - |
Domanda
Ho modificato la directory su 777, lo stesso con il contenuto della directory. Tuttavia, ottengo un'autorizzazione "negata" " errore. PHP genera questo errore se apache non è il gruppo / proprietario, indipendentemente dalle autorizzazioni del file? Ecco la chiamata che non riesce:
rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
Soluzione
Stai modificando la directory di livello superiore, quindi l'utente PHP deve avere accesso in scrittura a quella directory.
Altri suggerimenti
Probabilmente perché Apache non è il proprietario della directory principale. Rinominare (o spostare) un file è sostanzialmente la stessa cosa della creazione di un nuovo file.
per chiarire, php può solo rinominare le directory su cui ha l'effettiva proprietà:
-rwxrwxrwx user user temp/
-rwxr-xr-x apache apache temp2/
-rw-r--r-- user user script.php
assume che script.php stia provando a rinominare queste due directory:
// this operation fails as PHP (running as apache) does not own "temp",
// despite having write permissions
rename('temp', 'temp.bak');
// this operation is successful as PHP owns "temp2"
rename('temp2, 'temp.bak');
Prova a eseguire il seguente script:
print_r(posix_getpwuid(getmyuid()));
print_r(pathinfo($YOUR_PATH));
E guarda cosa ritorna.
Un'altra cosa che potrebbe aiutare questo tipo di situazioni è provare a ridurre effettivamente le autorizzazioni. Ho visto occasioni in cui apache nega a un'applicazione il permesso di fare qualcosa perché i suoi permessi sono troppo alti . La mia ipotesi è che ciò incoraggi buone pratiche di sicurezza.