Perché ricevo il "permesso negato" in PHP quando provo a rinominare una directory?

StackOverflow https://stackoverflow.com/questions/196114

  •  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');
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top