PHP en ligne de commande et les includes [Résolu] - PHP - Programmation
Marsh Posté le 12-10-2007 à 11:48:23
exécution par un site web : répertoire courant = répertoire du script php appellé par le navigateur
exécution en ligne de commande : répertoire courant = répertoire du shell (celui d'avant que t'appelle php)
exécution grace à cron : répertoire courant = répertoire de l'exécutable de php.
Donc à toi de définir le bon répertoire courant si tu ne veux pas celui par défaut.
PS : Je me rappelle plus le nom de la fonction en question. Désolé.
Marsh Posté le 12-10-2007 à 12:03:56
Je vais chercher dans ce sens là !
Je me disais que le répertoire courant serait celui du script, je n'aurais jamais pensé que ce serait celui de l'executable PHP.
Un
Code :
|
m'indique en effet le répertoire du binaire PHP.
Pas de soucis pour l'oubli du nom de la fonction, je vais surement réussir à résoudre mon problème maintenant que j'en connais la cause, merci !
Marsh Posté le 12-10-2007 à 14:39:26
J'ai solutionné une partie du problème mais bon c'est pas encore ça...
Pour les includes qui rataient, c'est réglé. Mais maintenant il me sort un autre truc étrange.
Genre il m'affiche une grande partie de code PHP et termine par une erreur genre "Call to undefined function isSqlDebug() in blablabla line truc" , alors que la définition de la fonction est dans l'affichage qu'il me fait juste au dessus.
C'est bizarre cette différence de comportement entre un script lancé en ligne de commande ou exécuté directement dans un navigateur.
Marsh Posté le 12-10-2007 à 15:10:31
ReplyMarsh Posté le 12-10-2007 à 15:21:19
rufo a écrit : t'as utilisé dirname(__FILE__) pour les includes? |
Oui, ça marche très bien merci beaucoup
Le problème venait d'ailleurs en fait. Les includes qui étaient inclus, comportaient les balises courtes <? et ?>. Et visiblement, en ligne de commande, elles ne sont pas interprêtées par défaut ! (Elles peuvent l'être avec un paramètre dans la ligne de commande je crois.) Je les ai donc remplacé par <?php et ?>
Et ça fonctionne très bien. C'est pour ca qu'il m'affichait toute une portion de code en fait, car les balises n'étaient pas interprêtées.
Merci rufo pour l'astuce du dirname, et omega2 pour m'avoir indiqué l'origine du problème des warnings.
Marsh Posté le 12-10-2007 à 15:53:38
Tirkyth > Quelque chose me dit que le module php chargé par apache et l'exécutable php.exe n'utilisent pas le même php.ini Si tu fais un "phpinfo();", le chemin du php.ini utilisé sera indiqué parmis tout le blabla.
Marsh Posté le 12-10-2007 à 16:15:07
omega2 a écrit : Tirkyth > Quelque chose me dit que le module php chargé par apache et l'exécutable php.exe n'utilisent pas le même php.ini Si tu fais un "phpinfo();", le chemin du php.ini utilisé sera indiqué parmis tout le blabla. |
Tu veux que j'execute un phpinfo en navigateur et en ligne de commande pour et que je compare le chemin vers le php.ini dans les deux ?
Etant donné que mon script s'execute maintenant correctement des deux façons je ne vois pas le problème que tu cherches à trouver
Marsh Posté le 12-10-2007 à 16:30:59
Si tout marche, alors t'as pas besoin de vérifier quel php.ini est utilisé, mais garde quand même l'info en mémoire pour le jour où tu voudras utiliser d'autres extensions de php.
Marsh Posté le 12-10-2007 à 16:47:27
Reply
Marsh Posté le 12-10-2007 à 10:30:47
Bonjour à tous,
Je viens faire appel à votre aide car j'ai un petit problème que je n'arrive pas à résoudre. En fait je cherche à créer un script PHP qui va récupérer une fois par jour un certain nombre d'adresse mail en base de données, et leur envoyer un mail.
J'ai donc développé mon petit script, je le lance à partir de mon navigateur il récupère tout comme il faut. Paf, je créé mon cron, et en fait je viens de voir ce matin que le script a généré des erreurs. Et je viens de faire le test en effet il fonctionne bien en le lançant d'un navigateur, mais pas en ligne de commande.
Le début du script :
Comme je le disais, je le lance dans un navigateur, tout est nickel les mails partent sans problème. En ligne de commande, voici les erreurs :
D:\wamp\php>php.exe -f D:\wamp\www\*******PHP\*******\**\*******\***********\cron_parrainage.php
Warning: include(../../../inc/global.php): failed to open stream: No such file or directory in D:\wamp\www\*******PHP\*******\**\*******\***********\cron_parrainage.php on line 5
Warning: include(): Failed opening '../../../inc/global.php' for inclusion (include_path='.;C:\php5\pear') in D:\wamp\www\*******PHP\*******\**\*******\***********\cron_parrainage.php on line 5
Warning: require_once(systemframework/sql/sqlhelper.php): failed to open stream:
No such file or directory in D:\wamp\www\*******PHP\*******\**\*******\***********\cron_parrainage.php on line 6
Fatal error: require_once(): Failed opening required 'systemframework/sql/sqlhelper.php' (include_path='.;C:\php5\pear') in D:\wamp\www\*******PHP\*******\**\*******\***********\cron_parrainage.php on line 6
D:\wamp\php>
Donc voilà, ma question est : Pourquoi n'arrive-t-il pas à inclure les fichiers en execution en ligne de commande ? Y'a t'il une solution pour résoudre ce problème ?
Message édité par Tirkyth le 12-10-2007 à 15:32:29
---------------
Mon Feedback !