[Résolu] PHP en ligne de commande et les includes

PHP en ligne de commande et les includes [Résolu] - PHP - Programmation

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 :

Code :
  1. <?php
  2. if(!defined("CONTEXT" ))
  3. define("CONTEXT","../../../" );
  4. include(CONTEXT."inc/global.php" );
  5. require_once("systemframework/sql/sqlhelper.php" );
  6. /* Récupération des adresses mails et envoi des mails. */
  7. ?>


 
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 !
Reply

Marsh Posté le 12-10-2007 à 10:30:47   

Reply

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é.


Message édité par omega2 le 12-10-2007 à 11:49:14
Reply

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 :
  1. <?php
  2. echo getcwd();
  3. ?>


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 !


---------------
Mon Feedback !
Reply

Marsh Posté le 12-10-2007 à 12:56:17    

dirname(__FILE__) est ton amie ;)

Reply

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.  :sarcastic:  
 
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.  [:totoz]


Message édité par Tirkyth le 12-10-2007 à 14:41:53

---------------
Mon Feedback !
Reply

Marsh Posté le 12-10-2007 à 15:10:31    

t'as utilisé dirname(__FILE__) pour les includes?

Reply

Marsh 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.


Message édité par Tirkyth le 12-10-2007 à 15:21:57

---------------
Mon Feedback !
Reply

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.

Reply

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  :??:


---------------
Mon Feedback !
Reply

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. ;)

Reply

Marsh Posté le 12-10-2007 à 16:30:59   

Reply

Marsh Posté le 12-10-2007 à 16:47:27    

Ok c'est noté :)
 
Merci de ton aide et du conseil.


---------------
Mon Feedback !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed