Comment puis-je détendre la restriction open basedir de PHP?
Open_basedir limite les fichiers qui peuvent être ouverts par PHP dans une arborescence de répertoires.
Je stocke plusieurs bibliothèques de classes et fichiers de configuration en dehors de mon répertoire racine web. De cette façon, le serveur web ne les rend pas accessibles au public. Cependant, lorsque j'essaie de les inclure à partir de mon application, j'obtiens une restriction open_basedir d'erreur comme ceci:
Avertissement: realpath() [fonction.realpath]: open_basedir restriction en vigueur. Le fichier/var/www/vhosts/domaine.tld / Zend / application) n'est pas dans le permis de chemin(s): (/var/www/vhosts/domaine.tld / httpdocs: / tmp) dans /var/www/vhosts/domaine.tld / httpdocs / index.php sur la ligne 5
Ma racine web est ici:
/var/www/vhosts/domain.tld/httpdocs
Mes bibliothèques et le répertoire de configuration sont ici:
/var/www/vhosts/domain.tld/zend
Quelle serait la meilleure solution pour assouplir la restriction open_basedir afin que l'arborescence des répertoires sous le dossier de domaine devienne disponible pour mon application? J'ai un nombre de domaines avec lesquels je veux faire cela, et je me méfie évidemment de créer des vulnérabilités de sécurité.
Remarque: J'utilise CentOS, Apache, Plesk, et j'ai un accès SSH root au serveur. Et bien que cela ne s'applique pas directement à Zend Framework, Je l'utilise dans ce cas. Voici donc l'inclusion du bootstrap de Zend:
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../zend/application/'));
set_include_path(APPLICATION_PATH . '/../zend/library' . PATH_SEPARATOR . get_include_path());
3 réponses
Vous pouvez également le faire facilement par répertoire en utilisant le fichier de configuration Apache (en supposant qu'il s'agit de votre serveur web) (par exemple 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>
Vous pouvez également supprimer complètement la restriction avec
<Directory /var/www/vhosts/domain.tld/httpdocs>
php_admin_value open_basedir none
</Directory>
Ajoutez les chemins auxquels vous devez accéder (/var/www/vhosts / domain.tld/zend) à votre directive open_basedir (vous pouvez spécifier plusieurs chemins en utilisant le séparateur de chemin ':' ou ';' dans windows)
Notez que les valeurs dans open_basedir sont des préfixes, ce qui signifie que tout ce qui se trouve sous le domaine/var/www/vhosts/.tld / zend sera accessible
Dans le Panneau Parallels Plesk (par exemple 1and1), vous pouvez le faire dans les paramètres du panneau PHP:
Ici: