web-dev-qa-db-fra.com

PHP Erreur fatale Echec de l'ouverture du fichier requis

Je reçois l'erreur suivante d'Apache

[sam 19 mars à 23:10:50 2011] [avertir] mod_fcgid: stderr: PHP Erreur irrécupérable: require_once () [function.require]: ouverture infructueuse requise '/common/configs/config_templates.inc. php '(include_path ='.:/usr/share/pear:/usr/share/php ') dans /home/viapics1/public_html/common/configs/config.inc.php à la ligne 158

Je ne suis certainement pas un expert d'Apache, mais les fichiers config.inc.php et config_templates.inc.php sont présents. J'ai aussi essayé de naviguer vers une page test.html que j'ai placée dans common/configs /, donc je suppose qu'il n'y a pas de problème de droits. J'ai également défini les droits sur config_templates.inc.php pour donner à tous les droits de lecture, d'écriture et d'exécution. Ne sachant pas quoi faire à ce stade, j'ai vérifié s'il y avait un répertoire/usr/share/php et j'ai trouvé qu'il n'y en avait pas, mais quand j'ai installé yum, il a été dit qu'il avait le dernier. Des idées? 

39
Al Katawazi

Ce n'est pas vraiment une question liée à Apache. Même pas un lien lié à PHP . Pour comprendre cette erreur, vous devez distinguer un chemin de serveur virtuel d'un chemin de système de fichiers.

L'opérateur require travaille avec des fichiers. Mais il n'y a pas

                          /common/configs/config_templates.inc.php

déposer sur le serveur, mais plutôt 

/home/viapics1/public_html/common/configs/config_templates.inc.php

La partie /home/viapics1/public_html s’appelle "racine du document" et connecte un monde virtuel à un monde réel. Si vous changez votre code pour quelque chose comme

require_once $_SERVER['DOCUMENT_ROOT'].'/common/configs/config_templates.inc.php';

cela fonctionnera à partir de n'importe quel fichier placé dans n'importe quel répertoire. 

77
Your Common Sense

Si SELinux est en cours d'exécution, vous devrez peut-être accorder à httpd l'autorisation de lire à partir de/home dir en utilisant:

 Sudo setsebool httpd_read_user_content=1
8
user1533634

Exécutez php -f /common/configs/config_templates.inc.php pour vérifier la validité de la syntaxe PHP dans le fichier.

3
Alex Howansky

Juste au cas où cela aiderait quelqu'un d'autre, je suis tombé sur un cas obscur pour cette erreur qui a déclenché la nuit dernière. Plus précisément, j'utilisais la méthode require_once et ne spécifiais qu'un nom de fichier et aucun chemin, car le fichier requis était présent dans le même répertoire. 

J'ai commencé à avoir l'erreur «Échec d'ouverture du fichier requis» à un moment donné. Après m'être arraché les cheveux pendant un moment, j'ai finalement remarqué un message d'avertissement PHP immédiatement au-dessus de la sortie d'erreur fatale, indiquant 'Impossible d'ouvrir le flux: autorisation refusée', mais surtout, m'informant du chemin d'accès au fichier il essayait d'ouvrir. J'ai ensuite indiqué que j'avais créé une copie du fichier (dont les droits de propriété n'étaient pas accessibles à Apache) ailleurs, qui se trouvait également dans le chemin de recherche PHP 'include', et devant le dossier où je le voulais. être ramassé. D'oh!

1
John Rix

J'ai juste eu ce problème et j'ai constaté que je ne regardais pas assez attentivement l'emplacement du dossier:

J'ai eu

require_once /vagrant/public/liberate/**APP**/vendor/autoload.php

Ce qui a fonctionné était:

require_once /vagrant/public/liberate/vendor/autoload.php

Il était très facile (en tant que débutant) de passer à côté de cette question très imperceptible. Oui, je me rends bien compte que le fait d’exiger que le problème soit consigné pointe directement sur le problème en question, mais si vous êtes débutant, comme moi, vous pouvez facilement passer à côté de ces choses.

RÉPARER: 

Examinez attentivement le débogage de (__ Dir __ '/etc/etc/etc/file.php'), puis ouvrez votre système de fichiers dans une fenêtre différente et mappez les deux directement. S'il y a la moindre différence, cela ne fonctionnera pas et l'erreur ci-dessus sera recrachée.

0
Sweet Chilly Philly

Vous pouvez le réparer avec la constante PHP __DIR__

require_once __DIR__ . '/common/configs/config_templates.inc.php';

C'est le répertoire du fichier. Si utilisé dans une inclusion, le répertoire de le fichier inclus est retourné. Ceci est équivalent à nom de répertoire __FILE__. Ce nom de répertoire ne comporte pas de barre oblique finale sauf s'il s'agit du répertoire racine. 1

0
Bernard