2011-01-03 26 views
6

Smarty si lamenta delle autorizzazioni. Ho scritto un piccolo framework in mvc per un progetto su cui sto lavorando e ho bisogno di essere in grado di renderizzare i template in ogni controller. Sono andato avanti e ho seguito le istruzioni di installazione di Smarty, e ho impostato tutte le opzioni di configurazione nel mio "front controller", o nella pagina che indirizza le richieste al resto dell'applicazione. La funzione testinstall dice che tutto è kosher, eppure quando tento di renderizzare i template nei miei controller, finisco con questo.Problemi di autorizzazioni Smarty

Attenzione: mkdir(): Permesso negato in /var/www/HRTRL/includes/CallLog/lib/Smarty/libs/sysplugins/smarty_internal_write_file.php on line 28 Warning: rename (/ tmp/. wrt6piczo,/templates_c/73b1662b4c376f493278f9873564df03430a0b43.file.poopy.tpl.php): Nessun file o directory in /var/www/HRTRL/includes/CallLog/lib/Smarty/libs/sysplugins/smarty_internal_write_file.php on line 48 Avviso: chmod(): Nessun file o /var/www/HRTRL/includes/CallLog/lib/Smarty/libs/sysplugins/smarty_internal_write_file.php on line 50 includono (./ templates_c/73b1662b4c376f493278f9873564df03430a0b43.file.poopy.tpl.php): non è riuscito ad aprire flusso: Nessun file o directory in /var/www/HRTRL/includes/CallLog/lib/Smarty/libs/sysplugins /smarty_internal_template.php on line 423 Warning: include(): Failed apertura './templates_c/73b1662b4c376f493278f9873564df03430a0b43.file.poopy.tpl.php' per l'inclusione (include_path ='.:/usr/share/php:/usr/share/pear ') in /var/www/HRTRL/includes/CallLog/lib/Smarty/libs/sysplugins/smarty_internal_template.php on line 423

012.351.

Ho testato il resto del mio framework indipendentemente e tutto sembra funzionare. Il mio "front controller" indirizza correttamente le richieste ai controller corretti, e mi sembra di essere in grado di rendere l'HTML normale bene.

Inoltre, ho acquisito tutte le cartelle della libreria Smarty e le altre directory richieste su 777 solo per motivi di test. Sto ancora ricevendo gli stessi errori di autorizzazione.

EDIT

Queste sono le impostazioni che ho usato per tutte le cartelle Smarty richiesti.

$smarty->setTemplateDir('lib/smarty/templates'); 
$smarty->setCompileDir('lib/smarty/templates_c'); 
$smarty->setCacheDir('lib/smarty/cache'); 
$smarty->setConfigDir('lib/smarty/configs'); 
+2

Perché vuoi utilizzare Smarty? Perché non usare solo PHP stesso (e risparmiarti da questi fastidi)? – ircmaxell

+3

Il risultato finale deve essere di design. Probabilmente non progetterò personalmente tutti i punti di vista. –

+0

A cosa è stato impostato smarty compile_dir? Il server Web ha le autorizzazioni per scrivere lì? – James

risposta

4

Potrebbe essere un problema con percorsi relativi? Potresti aggiungere i percorsi completi per impostare le funzioni di **** Dir, così sarai sicuro di utilizzare le posizioni corrette.

Se si chiama da /specialdir/thisdirhasonlyaPHPfile/file.php posizione, si potrebbe ottenere nei guai.

-2

Basta commentare la seguente riga dal file index.php.

$smarty->caching = true; 

Questo risolverà il problema.

-1

È necessario ricontrollare l'autorizzazione di accesso per la scrittura. Ho avuto gli stessi errori, quindi ho impostato le autorizzazioni su 777 per la cartella "templates_c" e qualsiasi cosa al suo interno e ora funziona. Tuttavia ho dovuto ripetere questa operazione per 3 volte in Filezilla, non so perché non ha modificato le autorizzazioni in una volta.

+1

Questo mi ha aiutato. Grazie! –

5

autorizzazioni appropriate risolti per me:

chown -R www-data /var/www/HRTRL 
-1

Secondo il documentation, il permesso di cartella 'template_c' dovrebbe essere 775. Ma non funziona qualche volta. È necessario impostare il suo permesso su 777.

+0

Vorrei capire perché 775 non funziona in quanto dovrebbero essere le autorizzazioni più flessibili per qualsiasi file/cartella nel progetto ed è il motivo per cui la documentazione dice 775 e non 777. –

0

Per chiunque abbia a che fare con problemi di autorizzazione con Smarty dopo aver seguito tutto quanto sopra (Controllo configurazione/chown/chmod ecc ...) Ci siamo imbattuti in un problema durante l'esecuzione di Smarty su SE (Sicurezza avanzata) Linux.

Le directory di compilazione/cache erano sottodirectory all'interno di una directory ~/tmp.

Il criterio di targeting predefinito impedisce le scritture alle directory tmp.

È possibile utilizzare semianage per aggiornare i contesti/politiche. Probabilmente dovrai creare una nuova politica per assegnare il contesto httpd_sys_rw_content_t alla directory che la tua app web deve anche scrivere.

Maggiori informazioni: http://www.serverlab.ca/tutorials/linux/web-servers-linux/configuring-selinux-policies-for-apache-web-servers/ t