2010-11-05 3 views
2

J'ai un script PHP qui inclut un autre fichier dans un répertoire adjacent.include() échoue lors de l'exécution à partir du terminal mais pas à partir du Web

Exemple Code:

include("../lib/file.php"); 

Le code fonctionne très bien lorsque vous accédez à la page en cours d'exécution à partir d'un navigateur, mais échoue (sur la ligne mentionnée include()) si je le lance à partir d'un terminal ou Cron.

Je reçois un avertissement qui dit "Aucun fichier ou répertoire dans /path/to/file.php" et par conséquent la classe que j'essaye d'appeler à partir de ce fichier n'existe pas, ce qui conduit à une erreur fatale .

Ce qui provoquerait cela à partir d'un navigateur mais échouer à partir du terminal.

+0

Je suppose que le chemin est relatif au répertoire php.exe lorsque vous exécutez le code à partir du terminal. – Harmen

Répondre

8

Utilisez toujours toujours toujours des chemins absolus avec les suivants:

include(dirname(__FILE__) . "/../lib/file.php"); 
+0

Apprenez quelque chose (à la dure) tous les jours. Merci Monsieur. – Evan

1

Utilisez toujours des chemins absolus.

En tant que seconde pensée, en cours d'exécution php du terminal exécutera php comme cli, de sorte que le php.ini utilisé est différent (généralement, /etc/php5/cli/php.ini au lieu de /etc/php5/apache2/php.ini si si elle fonctionne votre utilisation web service de mod_php apache ou /etc/php5/cgi/php.ini php comme cgi/mode fastcgi), donc la configuration peut être différente (inclure les chemins, dans votre cas peut importer).

Questions connexes