Come posso rilassare la restrizione open_basedir di PHP?

open_basedir limita i file che possono essere aperti da PHP all'interno di un tree di directory.

Sto memorizzando diverse librerie di classi e file di configuration al di fuori della mia directory principale web. In questo modo il server Web non li rende accessibili pubblicamente. Tuttavia quando provo ad includerli dalla mia applicazione ottengo un errore di restrizione open_basedir come questo:

Attenzione: realpath () [function.realpath]: restrizione in open_basedir in vigore. Il file (/var/www/vhosts/domain.tld/zend/application) non si trova nei routes consentiti: (/var/www/vhosts/domain.tld/httpdocs:/tmp) in / var / www / vhosts / domain.tld / httpdocs / index.php sulla linea 5

La mia web root è qui:

/var/www/vhosts/domain.tld/httpdocs 

Le mie librerie e la directory di configuration sono qui:

 /var/www/vhosts/domain.tld/zend 

Quale sarebbe la soluzione migliore per rilassare la restrizione open_basedir in modo che la struttura della directory nella cartella del dominio sia disponibile per la mia applicazione? Ho un certo numero di domini con cui voglio fare questo, e ovviamente sono anche cauto nel creare vulnerabilità di sicurezza.

Nota: sto utilizzando CentOS, Apache, Plesk e ho accesso root ssh al server. E sebbene questo non si applichi direttamente a Zend Framework, lo sto usando in questa istanza. Quindi ecco l'inclusione dal bootstrap di Zend:

 define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../zend/application/')); set_include_path(APPLICATION_PATH . '/../zend/library' . PATH_SEPARATOR . get_include_path()); 

Puoi anche farlo facilmente in base alle directory usando il file di configuration di Apache (supponendo che questo sia il tuo server web) (ad esempio httpd.conf)

 <Directory /var/www/vhosts/domain.tld/httpdocs> php_admin_value open_basedir "/var/www/vhosts/domain.tld/httpdocs:/var/www/vhosts/domain.tld/zend" </Directory> 

puoi anche rimuovere completamente la restrizione con

 <Directory /var/www/vhosts/domain.tld/httpdocs> php_admin_value open_basedir none </Directory> 

aggiungi i routes necessari per accedere a /var/www/vhosts/domain.tld/zend alla tua direttiva open_basedir (puoi specificare più routes usando il separatore di path ':' o ';' in windows)

si noti che i valori in open_basedir sono prefissi, il che significa che qualsiasi cosa sotto /var/www/vhosts/domain.tld/zend sarà accessibile

In Parallels Plesk Panel (es. 1and1) puoi farlo nelle impostazioni del pannello PHP:

inserisci la descrizione dell'immagine qui

Qui:

inserisci la descrizione dell'immagine qui