2008-10-21 13 views
21

open_basedir limite les fichiers qui peuvent être ouverts par PHP dans un répertoire.Comment puis-je relâcher la restriction open_basedir de PHP?

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 je tente de les inclure de ma demande, je reçois une erreur de restriction open_basedir comme ceci:

Attention: realpath() [function.realpath]: open_basedir restriction en vigueur. Fichier (/var/www/vhosts/domain.tld/zend/application) est pas dans le chemin autorisé (s): (/var/www/vhosts/domain.tld/httpdocs:/tmp) dans /var/www/vhosts/domain.tld/httpdocs/index.php en ligne 5

Ma racine web est ici:

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

Mes bibliothèques et répertoire de configuration sont ici:

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

Quelle serait la meilleure solution pour détendre la restriction open_basedir afin que l'arborescence de répertoires sous le dossier de domaine devienne disponible pour mon application? J'ai un certain nombre de domaines avec lesquels je veux faire cela, et je me méfie aussi manifestement de la création de failles de sécurité.

Remarque: J'utilise CentOS, Apache, Plesk et j'ai un accès root ssh au serveur. Et bien que cela ne s'applique pas directement à Zend Framework, je l'utilise dans ce cas. Voici donc l'inclusion de l'amorce de Zend:

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

Répondre

20

Vous pouvez également le faire facilement par répertoire en utilisant le fichier de configuration Apache (en supposant que ce soit 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

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

Si l'op est en cours d'exécution plesk il devra être légèrement plus spécial que cela: http://www.toosweettobesour.com/2008/02/02/plesk-open_basedir-workaround/ – dcousineau

+0

tom: Wouldn La suppression de la restriction ne crée-t-elle pas une vulnérabilité de sécurité? dcousineau: merci! – isuldor

+0

Brian: Vous supprimez seulement la restriction pour les fichiers php en cours d'exécution à partir de /var/www/vhosts/domain.tld/httpdocs, mais oui, la première option est mieux –

2

ajouter les chemins dont vous avez besoin pour accéder à (/var/www/vhosts/domain.tld/zend) à votre directive open_basedir (vous pouvez spécifier plusieurs chemins à l'aide du séparateur de chemin « : » ou « ; » dans les fenêtres)

noter que les valeurs du open_basedir sont des préfixes, ce qui signifie que tout sous la /var/www/vhosts/domain.tld/zend sera accessible

+0

voir aussi: http://de2.php.net/features.safe-mode# ini.open-basedir – VolkerK

1

Dans Parallels Plesk Panel (par exemple 1and1), vous pouvez le faire dans les paramètres du panneau de PHP:

enter image description here

ici:

enter image description here

+0

Thx Igor, mais pourquoi "* ex: 1and1 *"? Ne permettent-ils pas les remplacements PHP? – Jongosi

+0

Oui, mais juste à travers leur panneau. Peut-être que la confusion est parce que le mot «ex», j'ai changé par exemple. –

Questions connexes