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`
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
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');
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
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
php --ini
( dans mon cas : /etc/php5/cli/php.ini
)include_path
dans vi en utilisant esc
puis appuyez sur /include_path
puis enter
include_path = ".:/usr/share/php:/var/www/<directory>/"
Sudo service Apache2 restart
Ça y est. J'espère que ça aide.
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.
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
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.
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.