web-dev-qa-db-fra.com

qu'est-ce que cela signifie "(include_path = '.: / usr / share / pear: / usr / share / php')"?

J'ai une structure de fichiers sur EC2 comme: mais face à un problème de référencement de fichiers.

index.php
-db
  -config.php
-cron
  -cron1.php

J'ai essayé le référencement de fichiers comme:

`require_once (dirname(__FILE__).'/db/config.php');`
`require_once (($_SERVER['DOCUMENT_ROOT']).'/db/config.php');`

mais cron ne s'exécute pas.

`PHP Warning:  require_once(/db/config.php): failed to open stream: No such file or directory in /var/www/html/cron/cron1.php on line 3

Warning: require_once(/db/config.php): failed to open stream: No such file or directory in /var/www/html/cron/cron1.php on line 3

PHP Fatal error:  require_once(): Failed opening required '/db/config.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/cron/cron1.php on line 3

Fatal error: require_once(): Failed opening required '/db/config.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/cron/cron1.php on line 3`
17
ketul shah

Si vous regardez la PHP constante PATH_SEPARATOR , vous verrez que c'est ":" pour vous.

Si vous séparez votre chaîne ".:/Usr/share/pear:/usr/share/php" en utilisant ce caractère, vous obtiendrez 3 parties

  • . (cela signifie le répertoire courant dans lequel se trouve votre code)
  • / usr/share/poire
  • / usr/share/ph

Toute tentative d'inclure des choses ()/require (), sera recherchée dans ces répertoires, dans cet ordre.

Il vous montre que dans le message d'erreur pour vous faire savoir où il n'a PAS pu trouver le fichier que vous essayez d'exiger ()

Pour votre premier besoin, si cela est inclus à partir de votre index.php, alors vous n'avez pas besoin du répertoire, faites simplement:

require_once ( 'db/config.php');
11
Uberfuzzy

Solution au problème

comme mentionné par Uberfuzzy [cause réelle du problème]

Si vous regardez la constante PHP [PATH_SEPARATOR] [1], vous verrez que c'est ":" pour vous.

Si vous séparez votre chaîne ".:/Usr/share/pear:/usr/share/php" en utilisant ce caractère, vous obtiendrez 3 parties

  • . (cela signifie le répertoire courant dans lequel se trouve votre code)
  • / usr/share/poire
  • / usr/share/ph

Toute tentative d'inclure des choses ()/require (), sera recherchée dans ces répertoires, dans cet ordre.

Il vous montre que dans le message d'erreur pour vous faire savoir où il n'a PAS pu trouver le fichier que vous essayez d'exiger ()

C'était la cause de l'erreur.

Arrive maintenant à la solution

  1. Étape 1 : Trouvez votre fichier php.ini en utilisant la commande php --ini ( dans mon cas : /etc/php5/cli/php.ini)
  2. Étape 2 : recherchez include_path dans vi en utilisant esc puis appuyez sur /include_path puis enter
  3. Étape 3 : décommentez cette ligne si elle est commentée et incluez votre répertoire de serveur, votre chemin devrait ressembler à ceci include_path = ".:/usr/share/php:/var/www/<directory>/"
  4. Étape 4: redémarrez Apache Sudo service Apache2 restart

Ça y est. J'espère que ça aide.

8
Abhishek Goel

J'avais un problème similaire. Juste pour aider quelqu'un avec le même problème:

Mon erreur était l'attribut de fichier utilisateur pour les fichiers dans/var/www. Après les avoir remis à l'utilisateur "www-data", le problème avait disparu.

1
Gaston

En fait, la solution consiste à ouvrir le fichier php.ini, à modifier la ligne include_path et à la changer complètement en

include_path='.:/usr/share/php:/usr/share/pear' 

ou ajoutez le

'.:/usr/share/php:/usr/share/pear' 

à la valeur actuelle de include_path.

Il est expliqué plus en détail dans: http://pear.php.net/manual/en/installation.checking.php#installation.checking.cli.phpdir

1
Ivan Aranibar

J'ai eu la même erreur lors de l'inclusion du fichier de la racine de mon projet dans codeigniter. J'utilisais ceci dans common.php de mon projet.

<?php include_once base_url().'csrf-magic-master/csrf-magic.php';  ?>

je l'ai changé en

<?php include_once ('csrf-magic-master/csrf-magic.php');  ?>

Ça marche bien maintenant.

0
Bugfixer

C'est juste les répertoires qui vous montrent où PHP recherchait votre fichier. Assurez-vous que cron1.php Existe là où vous pensez qu'il existe. Et assurez-vous de savoir où dirname(__FILE__) et $_SERVER['DOCUMENT_ROOT'] pointent là où vous vous attendez.

Cette valeur peut être ajustée dans votre fichier php.ini.

0
castis