restriction open_basedir en vigueur. Le fichier (/) ne se trouve pas dans le (s) chemin (s) autorisé (s):


87

J'obtiens cette erreur lors d'un téléchargement d'avatar sur mon site. Je ne l'ai jamais eu auparavant et rien n'a été changé récemment pour que je commence à avoir cette erreur ...

Warning: is_writable() [function.is-writable]: 
open_basedir restriction in effect. 
File(/) is not within the allowed path(s):

18
Vous avez accepté une réponse non fonctionnelle.
sjas

Réponses:


-22

Modifiez les open_basedirparamètres de votre configuration PHP (voir Configuration du Runtime ).

Le open_basedirparamètre est principalement utilisé pour empêcher les scripts PHP d'un utilisateur particulier d'accéder aux fichiers du compte d'un autre utilisateur. Donc, généralement, tous les fichiers de votre propre compte doivent être lisibles par vos propres scripts.

Exemple de paramètres via .htaccesssi PHP s'exécute en tant que module Apache sur un système Linux:

<DirectoryMatch "/home/sites/site81/">
    php_admin_value open_basedir "/home/sites/site81/:/tmp/:/"
</DirectoryMatch>

2
@Nikesh Cela m'a donné une erreur 500 après que je laissa tomber dans mes .htaccces et changé les chemins à: /my/cutsom/dir/. Je ne sais pas pourquoi j'ai pensé.
hitautodestruct

79
Cool, 12 votes positifs à ce jour pour une réponse incorrecte. Vous ne pouvez pas utiliser php_admin_valuedans les .htaccessfichiers . Vous ne pouvez pas utiliser DirectoryMatch dans les fichiers .htaccess . (Quel genre de mesure de sécurité serait open_basedirsi elle pouvait simplement être désactivée?)
Álvaro González

1
@eoinoc - Faites défiler vers le bas et voyez par exemple la réponse d'Andrei. Ou éditez le fichier global php.ini.
Álvaro González

19
VOUS NE METTEZ PAS CECI DANS VOTRE HTACCESS! MAIS PLUTOT DANS VOTRE FICHIER DE CONFIG APACHE.
tfont

8
L'inclusion du répertoire racine dans open_basedir va à l'encontre de l'objectif de open_basedir entièrement. Cette solution "fonctionne" uniquement dans le sens où elle désactive essentiellement la restriction.
Martin

113

Modifiez les paramètres open_basedir dans votre compte d'hébergement et définissez-les sur aucun. Trouvez le paramètre open_basedir donné dans la zone 'Paramètres PHP' de votre Plesk / cPanel. Réglez-le sur «aucun» dans la liste déroulante qui y est donnée. Je les ai montrés dans l'image du panneau Plesk.

entrez la description de l'image ici entrez la description de l'image ici


1
@yogihosting après avoir fait cela, j'ai une erreur - Impossible de localiser le modèle que vous avez spécifié: Home_model
Heemanshu Bhalla

1
Un peu tard, mais existe-t-il un moyen de le faire pour tous les sites Plesk? Je l'ai défini sur aucun dans le php.ini global pour la version que les sites utilisent: gyazo.com/dfffbe7f9b3a20ede97da72f1ddfc777 Mais ils obtiennent toujours l'erreur.
Matt Cowley

@MattCowley, vous devez le faire pour chaque site hébergé dans Plesk Panel.
yogihosting

1
Réponse très utile, mon problème résolu Thumbs up :)
Muhammadanish

1
Merci pour cette solution! Cela fonctionne parfaitement pour moi sur l'hébergement partagé!
Smilefounder

38

Pour résoudre cette erreur, vous devez modifier le fichier httpd.conf. Bien avant que cela ne soit visible dans phpinfo dans la directive de la section apache2handler Server Root. Par exemple, dans mon cas, de cette façon - / etc / httpd / httpd.conf. Ouvrez le fichier httpd.conf, recherchez la mention du paramètre open_basedir. Et réglez-le sur aucun. ( php_admin_value open_basedir aucun )


Le réglage sur «aucun» a fonctionné pour moi - en utilisant également une interface Plesk.
diggersworld

8
J'ai trouvé la open_basedirconfiguration dans mon php.ini. (Arch Linux sur Raspberry Pi avec php 5)
Dennis van der Schagt

2
Je l'ai également trouvé dans mon php.ini (également Arch). Il suffit de commenter la ligne pour obtenir le même effet que cette réponse.
Ben Elgar

@BenElgar juste en commentant la ligne a mentionné des travaux, je demande simplement s'il y a un risque
mwangaben

6

Si vous exécutez ceci avec php file.php. Vous devez modifier php.ini Rechercher ce fichier:

: locate php.ini
/etc/php/php.ini

Et ajoutez le chemin du fichier à la open_basedirpropriété:

open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/:/run/media/andrew/ext4/protected


C'est la seule solution qui pointe vers plusieurs chemins spécifiques au lieu de simplement ignorer complètement la sécurité.
mvreijn

5

Pour moi, le problème était des valeurs de configuration incorrectes / manquantes pour le serveur Plesk exécutant le tout. Je viens de suivre les instructions ici: http://davidseah.com/blog/2007/04/separate-php-error-logs-for-multiple-domains-with-plesk/

Vous pouvez configurer PHP pour avoir un fichier journal d'erreurs distinct pour chaque définition de VirtualHost. L'astuce est de savoir exactement comment le configurer, car vous ne pouvez pas toucher directement la configuration sans casser Plesk. Chaque nom de domaine sur votre (dv) a son propre répertoire dans / var / www / vhosts. Un répertoire typique contient les répertoires de niveau supérieur suivants:

cgi-bin/
conf/
error_docs/
httpdocs/
httpsdocs/
...and so on

Vous voudrez créer un fichier vhost.conf dans le dossier conf / du répertoire de domaine avec les lignes suivantes:

php_value error_log /path/to/error_log
php_flag display_errors off
php_value error_reporting 6143
php_flag log_errors on

Modifiez la première valeur pour qu'elle corresponde à votre installation réelle (j'ai utilisé /tmp/phperrors.log). Une fois que vous avez terminé de modifier le fichier vhost.conf, testez la configuration depuis la console avec:

apachectl configtest
…or if you don’t have apachectl (as Plesk 8.6 doesn’t seem to)…

/etc/init.d/httpd configtest

Et enfin, dites à Plesk que vous avez effectué ce changement.

/usr/local/psa/admin/bin/websrvmng -a

2

Le chemin auquel vous faites référence est incorrect et ne correspond pas à la racine du répertoire de votre espace de travail. Essayez de construire un chemin absolu pour le fichier auquel vous souhaitez accéder, où vous utilisez probablement maintenant un chemin relatif ...


Il utilise un chemin absolu. Cela fonctionne pour tous les utilisateurs sauf celui-ci.
Webnet

2

si vous avez ce genre de problème avec ispconfig3 et que vous avez une erreur comme celle-ci

restriction open_basedir en vigueur. Le fichier (/ var / www / clients / client7 / web15) ne se trouve pas dans le (s) chemin (s) autorisé (s): .........

Pour le résoudre (dans mon cas), définissez simplement PHP sur SuPHP dans le panneau du site Web de ispconfig3

J'espère que cela aide quelqu'un :)


2

J'ai eu ce problème @ l'un de mes sites wordpress après la mise à jour et / ou le déplacement :)

Vérifiez dans la table de base de données 'wp_options' le 'upload_path' et modifiez-le correctement ...


quelle valeur l'avez-vous définie? / ^^^/public_html/wp-content/uploads?
brett

1

Si utilisé ispconfig3:

Allez dans la section Site Web -> Options -> PHP open_basedir:

entrez la description de l'image ici

  • Dans ce champ a décrit les chemins autorisés et chaque chemin est séparé par ":"

/ var / www / clients / client2 / web3 / image: / var / www / clients / client2 / web3 / web: / var / www / ... et ainsi de suite

  • Donc ici doit mettre le chemin auquel vous souhaitez avoir accès, dans mon cas est:

/ var / www / clients / client2 / web3 / image:

  • Le problème apparaît parce que:

Lorsqu'un script tente d'accéder au système de fichiers, par exemple en utilisant include ou fopen (), l'emplacement du fichier est vérifié. Lorsque le fichier est en dehors de l'arborescence de répertoires spécifiée, PHP refusera d'y accéder.


0

Si vous exécutez une pile PHP IIS et que vous rencontrez cette erreur, il s'agit généralement d'un correctif d'autorisation rapide.

Si vous administrez vous-même le serveur Windows et y avez accès, essayez d'abord ceci:

Accédez au dossier qui vous gêne lors de l'écriture et cliquez dessus avec le bouton droit de la souris> ouvrir les propriétés> sécurité.

Voir quels utilisateurs ont accès au dossier, lesquels sont en lecture seule et lesquels sont pleins. Avez-vous un groupe qui bloque l'écriture?

Le correctif sera spécifique à votre configuration IIS, utilisez-vous l'authentification anonyme avec un utilisateur IUSR spécifique ou avec l'identité du pool d'applications?

Quoi qu'il en soit, vous allez finir par ajouter une nouvelle autorisation d'écriture complète pour l'un des IUSR, IIS_IUSRS ou l'identité de votre pool d'applications - comme je l'ai dit, cela va varier en fonction de votre configuration et de la façon dont vous souhaitez le faire, vous pouvez aller dans le trou du lapin google sur celui-ci (un de ces messages - autorisations IIS_IUSRS et IUSR dans IIS8 ) Pour moi, j'utilise anon avec mon identité de pool d'applications afin que je puisse m'en tirer MACHINE_NAME\IIS_IUSRSavec une lecture / écriture complète sur n'importe quelle température ou téléchargement Dossiers.

Je n'ai pas besoin d'ajouter quoi que ce soit de plus à mon open_basedir =dans le php.ini.


0

En plus de la réponse de @ yogihosting , si vous utilisez DirectAdmin , procédez comme suit:

  1. Accédez à la page de connexion de DirectAdmin. Habituellement, son port est 2222.
  2. Connectez-vous en tant qu'administrateur. Son nom d'utilisateur estadmin par défaut.
  3. À partir du "Niveau d'accès" sur le panneau de droite, assurez-vous que vous êtes au "Niveau administrateur". Sinon, changez-le.
  4. Dans la section "Fonctionnalités supplémentaires", cliquez sur "Configurations HTTPD personnalisées".
  5. Choisissez le domaine que vous souhaitez modifier.
  6. Entrez les configurations que vous souhaitez modifier dans la zone de texte en haut de la page. Vous devriez considérer le fichier de configuration existant et modifier les valeurs en fonction de celui-ci. Par exemple, si vous voyez que cela open_basedirest défini dans a <Directory>, vous devriez peut-être entourer votre modification dans la <Directory>balise associée :

    <Directory "/path/to/directory">
        php_admin_value open_basedir none
    </Directory>
    
  7. Après avoir effectué les modifications nécessaires, cliquez sur le bouton "Enregistrer".

  8. Vous devriez maintenant voir vos modifications enregistrées dans le fichier de configuration si elles étaient valides.

Il existe cependant une autre façon de modifier le fichier de configuration:

Attention : soyez prudent et utilisez les étapes suivantes à vos propres risques, car vous pourriez rencontrer des erreurs ou entraîner des temps d'arrêt. La méthode recommandée est la précédente, car elle vous empêche de modifier le fichier de configuration de manière incorrecte et vous montre l'erreur.

  1. Connectez-vous à votre serveur en tant que root.
  2. Allez à /usr/local/directadmin/data/users. Parmi les utilisateurs répertoriés, accédez à celui lié au domaine que vous souhaitez modifier.
  3. Ici, il y a un httpd.conffichier. Faites une sauvegarde à partir de celui-ci:

    cp httpd.conf httpd.conf.back
    
  4. Modifiez maintenant le fichier de configuration avec l'éditeur de votre choix. Par exemple, modifiez l'existant open_basediren none. N'essayez pas de supprimer des éléments ou vous pourriez rencontrer des temps d'arrêt. Enregistrez le fichier après l'édition.

  5. Redémarrez le serveur Web Apache en utilisant l'une des méthodes suivantes (utilisez sudosi nécessaire):

    httpd -k graceful
    apachectl -k graceful
    apache2 -k graceful
    
  6. Si vous rencontrez des erreurs, remplacez le fichier de configuration principal par le fichier sauvegardé et redémarrez le serveur Web.

Encore une fois, la première solution est la meilleure et vous ne devriez pas essayer la deuxième méthode la première fois. Comme il est indiqué dans la mise en garde, l'avantage de la première méthode est qu'elle empêche de sauvegarder vos éléments mal configurés.

J'espère que cela aide!


0

J'utilise un Apache vhost -File pour exécuter PHP avec des ini-options spécifiques à l'application sur mon serveur Windows. Par conséquent, j'utilise l' option -d de la commande php.

Je configure l' open_basedir pour chaque application comme l'une de ces options.

J'avais besoin de définir plusieurs URL comme open_basedir, y compris un chemin UNC , et la syntaxe de ce cas était un peu difficile à trouver. Vous devez séparer les chemins par des points-virgules - et si votre premier chemin commence par une lettre, vous devrez peut-être commencer la liste par un point-virgule également. Au moins, c'est ce qui fonctionne pour moi.

Exemple:

php.exe -d open_basedir=;d:/www/applicationRoot;//internal.unc.path/ressource/

-3

Cherchez simplement

open_basedir =

dans php.ini et désactivez-le. C'est la solution la plus simple pour résoudre ce problème.

Avant les changements open_basedir =

Après les changements ;open_basedir =

Ps - Après les modifications, n'oubliez pas de redémarrer votre serveur.

Prendre plaisir ;)


3
ne faites pas cela ... la sécurité est, croyez-le ou non, importante. :) Il est temps de lire la documentation sur vos outils: php.net/manual/en/ini.core.php#ini.open-basedir
Adam Lenda
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.