Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3001 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1622777
Tirkyth
Posté le 12-10-2007 à 10:30:47  profilanswer
 

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 !
mood
Publicité
Posté le 12-10-2007 à 10:30:47  profilanswer
 

n°1622832
omega2
Posté le 12-10-2007 à 11:48:23  profilanswer
 

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
n°1622849
Tirkyth
Posté le 12-10-2007 à 12:03:56  profilanswer
 

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 !
n°1622876
rufo
Pas me confondre avec Lycos!
Posté le 12-10-2007 à 12:56:17  profilanswer
 

dirname(__FILE__) est ton amie ;)

n°1622956
Tirkyth
Posté le 12-10-2007 à 14:39:26  profilanswer
 

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 !
n°1622977
rufo
Pas me confondre avec Lycos!
Posté le 12-10-2007 à 15:10:31  profilanswer
 

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

n°1622985
Tirkyth
Posté le 12-10-2007 à 15:21:19  profilanswer
 

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 !
n°1623031
omega2
Posté le 12-10-2007 à 15:53:38  profilanswer
 

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.

n°1623059
Tirkyth
Posté le 12-10-2007 à 16:15:07  profilanswer
 

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 !
n°1623082
omega2
Posté le 12-10-2007 à 16:30:59  profilanswer
 

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

mood
Publicité
Posté le 12-10-2007 à 16:30:59  profilanswer
 

n°1623106
Tirkyth
Posté le 12-10-2007 à 16:47:27  profilanswer
 

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


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[RESOLU] problème d'heure dans requête mysql (heure d'hiver)comment enlever le retour chariot sur une ligne ??
[Resolu]DBI::mysql -> out of memory[résolu] Moteur de recherche interne avec fichier pdf
[RESOLU] Comparer 2 fichiers de données[PHP + SHELL] impossible d'exécuter un shell dans lighttpd
[Delphi] fonction sur String [Résolu][Résolu]Probleme d'enregistrement - envoi de formulaire
[Résolu] Probleme d'enregistrement lors d'un envoi de formulaire[RESOLU] Enlever retour à la ligne entre balises HTML
Plus de sujets relatifs à : [Résolu] PHP en ligne de commande et les includes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR