Bonjour,
Nous avons créé des tâches CRON sur OVH, mais les mails n'arrivent pas :
Voici les logs d'erreur OVH du CRON :
[QUOTE][2016-12-29 18:12:02] ## OVH ## START - 2016-12-29 18:12:02.903724 executing: /usr/local/php7.0/bin/php /homez.2193/likemywora/www/tacheCron/ristourne.php
[2016-12-29 18:12:02]
[2016-12-29 18:12:02]
[2016-12-29 18:12:02]
[2016-12-29 18:12:02] Test de Cron
[2016-12-29 18:12:02]
[2016-12-29 18:12:02]
[2016-12-29 18:12:02]
[2016-12-29 18:12:02] ## OVH ## END - 2016-12-29 18:12:03.009896 exitcode: 255
[2016-12-29 18:12:02]
[2016-12-29 18:12:02] ## OVH ## Your job could not be initiated for an unknown reason. Please contact customer support for more information.
[2016-12-29 18:12:02] ## OVH ## END - 2016-12-29 18:12:03.010710 exitcode: 255
[2016-12-29 19:12:02] ## OVH ## START - 2016-12-29 19:12:02.707878 executing: /usr/local/php7.0/bin/php /homez.2193/likemywora/./www/tacheCron/ristourne.php
[2016-12-29 19:12:02]
[2016-12-29 19:12:02]
[2016-12-29 19:12:02]
[2016-12-29 19:12:02] Test de Cron
[2016-12-29 19:12:02]
[2016-12-29 19:12:02]
[2016-12-29 19:12:02]
[2016-12-29 19:12:02] ## OVH ## END - 2016-12-29 19:12:02.756471 exitcode: 255
[2016-12-29 19:12:02]
[2016-12-29 19:12:02] ## OVH ## Your job could not be initiated for an unknown reason. Please contact customer support for more information.
[2016-12-29 19:12:02] ## OVH ## END - 2016-12-29 19:12:02.757204 exitcode: 255
[2016-12-29 20:12:02] ## OVH ## START - 2016-12-29 20:12:02.755897 executing: /usr/local/php7.0/bin/php /homez.2193/likemywora/./www/tacheCron/ristourne.php
[2016-12-29 20:12:02]
[2016-12-29 20:12:02]
[2016-12-29 20:12:02]
[2016-12-29 20:12:02] Test de Cron
[2016-12-29 20:12:02]
[2016-12-29 20:12:02]
[2016-12-29 20:12:02]
[2016-12-29 20:12:02]
[2016-12-29 20:12:02]
[2016-12-29 20:12:02] ## OVH ## END - 2016-12-29 20:12:03.224268 exitcode: 255
[2016-12-29 20:12:02]
[2016-12-29 20:12:02] ## OVH ## Your job could not be initiated for an unknown reason. Please contact customer support for more information.
[2016-12-29 20:12:02] ## OVH ## END - 2016-12-29 20:12:03.225044 exitcode: 255
[2016-12-29 21:12:02] ## OVH ## START - 2016-12-29 21:12:02.616244 executing: /usr/local/php7.0/bin/php /homez.2193/likemywora/./www/tacheCron/ristourne.php
[2016-12-29 21:12:02]
[2016-12-29 21:12:02]
[2016-12-29 21:12:02]
[2016-12-29 21:12:02] Test de Cron
[2016-12-29 21:12:02]
[2016-12-29 21:12:02]
[2016-12-29 21:12:02]
[2016-12-29 21:12:02]
[2016-12-29 21:12:02]
[2016-12-29 21:12:02] ## OVH ## END - 2016-12-29 21:12:02.669607 exitcode: 255
[2016-12-29 21:12:02]
[2016-12-29 21:12:02] ## OVH ## Your job could not be initiated for an unknown reason. Please contact customer support for more information.
[2016-12-29 21:12:02] ## OVH ## END - 2016-12-29 21:12:02.670369 exitcode: 255
[2016-12-29 22:12:02] ## OVH ## START - 2016-12-29 22:12:02.683366 executing: /usr/local/php7.0/bin/php /homez.2193/likemywora/./www/tacheCron/ristourne.php
[2016-12-29 22:12:02]
[2016-12-29 22:12:02]
[2016-12-29 22:12:02]
[2016-12-29 22:12:02] Test de Cron
[2016-12-29 22:12:02]
[2016-12-29 22:12:02]
[2016-12-29 22:12:02]
[2016-12-29 22:12:02]
[2016-12-29 22:12:02]
[2016-12-29 22:12:02] ## OVH ## END - 2016-12-29 22:12:02.734003 exitcode: 255
[2016-12-29 22:12:02]
[2016-12-29 22:12:02] ## OVH ## Your job could not be initiated for an unknown reason. Please contact customer support for more information.
[2016-12-29 22:12:02] ## OVH ## END - 2016-12-29 22:12:02.734771 exitcode: 255
[2016-12-29 23:12:02] ## OVH ## START - 2016-12-29 23:12:02.661073 executing: /usr/local/php7.0/bin/php /homez.2193/likemywora/./www/tacheCron/ristourne.php
[2016-12-29 23:12:02]
[2016-12-29 23:12:02]
[2016-12-29 23:12:02]
[2016-12-29 23:12:02] Test de Cron
[2016-12-29 23:12:02]
[2016-12-29 23:12:02]
[2016-12-29 23:12:02]
[2016-12-29 23:12:02]
[2016-12-29 23:12:02]
[2016-12-29 23:12:02] ## OVH ## END - 2016-12-29 23:12:02.733093 exitcode: 255
[2016-12-29 23:12:02]
[2016-12-29 23:12:02] ## OVH ## Your job could not be initiated for an unknown reason. Please contact customer support for more information.
[2016-12-29 23:12:02] ## OVH ## END - 2016-12-29 23:12:02.733828 exitcode: 255
[/QUOTE]
Et voici le code du fichier PHP qui est censé s'exécuter :</body><html></html><br /><head></head><br /> <meta content="text/html; charset=utf-8" /><br /> <title>Test de Cron</title><br /><br /><body><br /><br /><br />require_once("../vendor/autoload.php");<br />require_once ('../config/ConnexionDB.php');<br />$managerFacture = new ManagerFacture($pdo);<br />/*$req = "SELECT pro.email FROM facture fac, professionnel pro WHERE fac.num_confidentiel_pro = pro.code_confidentiel "<br /> . "and fac.date <= DATE_SUB( NOW(), INTERVAL 1 Hour) and pro.id_professionnel = 34 and `visible` = 0` ";*/<br />$req ="SELECT pro.email, fac.nom_client, fac.code_evaluation, fac.prenom_client,fac.montant_htva, fac.mail_client, fac.date, fac.num_confidentiel_pro<br />FROM facture fac, professionnel pro <br />WHERE fac.num_confidentiel_pro = pro.code_confidentiel <br />and TO_DAYS(NOW()) - TO_DAYS(fac.date) = 10<br />and fac.visible = 1";<br />$resultats=$pdo->query($req);<br />$resultats->setFetchMode(PDO::FETCH_OBJ);<br /><br />while( $resultat = $resultats->fetch() )<br />{<br /><br /> $email = $resultat->email;<br /> /* echo $email ;*/<br /> //On crée une instance de la classe PHPMailer.<br /> $mail = new PHPMailer();<br /> //On change le charset.<br /> $mail->CharSet = 'UTF-8';<br /> //On précise que le contenu sera du code html.<br /> $mail->IsHtml(true);<br /> //On précise de qui vient l'email.<br /> $mail->setFrom("LikeMyWork@noreply.be", "LikeMyWork");<br /> //On change le sujet du mail.<br /> $mail->Subject = "1er rappel d'acceptation de formulaire de ristourne.";<br /> //On modifie son contenu avec l'adresse mail du client ainsi que le contenu du message du client.<br /> $mail->Body = ' <br /> <div style="position: relative; border-bottom-width: 20px ;border-right-width: 20px ;border-left-width: 20px ;border-top-width: 65px ; border-style: solid; border-color: #555; border-radius: 10px; padding: 20px 30px 60px 30px; margin:auto; max-width: 800px; width: 100%; box-sizing: border-box; background: #EEE"><br /> <img style="position: absolute; left: 25px; top: -60px" src="http://likemywork.be/images/logo.png" width="150" height="52" /><br /> <br /><br /> <h2 style="text-align: center; color: #3FA9F5; font-weight: bold">Rappel de payement </h2><br /> <br /> <br /> <p>Voici le 1er rappel de payement concernant la demande de ristourne de votre client '.$resultat->nom_client.' '.$resultat->prenom_client.'.</p><br /> <p>Veuillez noter que dès réception de votre payement, nous rétribuerons 2 % à '.$resultat->prenom_client.' pour avoir contribué à l’évolution de votre profil.</p><br /> <p>Les 3% à verser à LikeMyWork : <b><span style=" color: #3FA9F5; font-weight=bold">' . number_format($troisPoucentAvecTva, 2, ',', '.') . '</span> EUR TVAC</b>, <br /> Les 2% pour le client : <b><span style=" color: #3FA9F5; font-weight=bold">' . number_format($deuxPourcentPourClient, 2, ',', '.') . '</span> EUR</b>, <br />Ce qui fait un total de : <b><span style=" color: #3FA9F5; font-weight=bold">' . number_format($pourcentageTotal, 2, ',', '.') . ' </span>EUR</b> sur un montant de <b>'.number_format($resultat->montant_htva, 2, ',', '.').' EUR</b></p><br /> <p>Communication à mentionner sur le virement: <b><span style=" color: #3FA9F5; font-weight=bold">'.$resultat->code_evaluation.'</span></b></p><br /><br /> <p>Compte en banque de LikeMyWork: BE70-3770-8002-3825 </p><br /><br /> <br /> <p>L\'équipe LikeMyWork</p><br /><br /><br /> <hr /><br /> <div style="text-align: center; color: #3FA9F5"><br /> <p><b><a href="http://likemywork.be/" target="_blank" rel="nofollow">www.likemywork.be</a></b></p><br /> </div><br /><br /> <hr /><br /> <div style="text-align: center; color: #3FA9F5"><br /> <p><b><a href="http://likemywork.be/" target="_blank" rel="nofollow">www.likemywork.be</a></b></p><br /> </div><br /> </div>';<br /><br /> $mail->AddAddress($email);<br /> $mail->send();<br />}<br />?><br /></body><br />
Voici le contenu du fichier .ovhconfig :; pour plus d'informations sur ce fichier:<br />; http://www.ovh.com/fr/g1175.format_du_point_ovhconfig<br /><br />app.engine=php<br />app.engine.version=7.0<br />http.firewall=none<br />environment=production<br />
Auriez-vous une idée svp ?
Merci d'avance et bonnes fêtes.
Mauvaise idée les chemins relatifs.
```
require_once("../vendor/autoload.php");
require_once ('../config/ConnexionDB.php');
```
A tout hasard, et avec :
```
require_once(DIR . '/../vendor/autoload.php');
require_once(DIR . '/../config/ConnexionDB.php');
```
? (quelqu'un disait que le répertoire courant aurait été changé en cli/cron)
Mais je suppose que, si ça vient de ça, l'autoload, va foirer aussi de la même façon. Dans ce cas, c'est plutôt un `chdir(DIR);` qu'il faudrait ajouter avant les require.
Je dirais carrément /home/[user]/vendor/autoload.php
Comme le dit @Daniel60 et la doc : https://docs.ovh.com/fr/fr/web/hosting/mutualise-taches-automatisees-cron/#utilisation-de-chemins-absolus
il faut utiliser les chemins absolus.
Puisque tu utilises php 7.0 je te conseille de passer aussi en environnement stable
https://docs.ovh.com/fr/fr/web/hosting/modifier-lenvironnement-dexecution-de-mon-hebergement-web/
'/../vendor/autoload.php'
On peut toujours prendre le risque d'utiliser des chemins relatifs, mais celui-là ne marchera sûrement pas car tu vas chercher un répertoire qui est à coté de ton niveau le plus élevé, donc pas chez toi. Donc "../" peut-être que ça marche, bien que déconseillé, mais sûrement pas "/../"
On peut toujours prendre le risque d'utiliser des chemins relatifs
Non, car les crons ne sont pas exécutés sur l'hébergement, mais sur un serveur à part, donc si on met un chemin relatifs, les robots ne vont rien trouver.
Quitte à me citer, ce serait bien de reprendre le `DIR` concaténé devant : ce n'est pas cherché à remonter plus haut que la racine (à moins vraiment d'un chroot sur le répertoire du script) et le chemin n'est plus vraiment relatif. Enfin si mais plus par rapport au répertoire courant qu'on hérite de cron mais à ce qui est concaténé devant, le répertoire même du script (ie, si mon script est /home/toto/www/foo/bar.php, `DIR` vaut `/home/toto/www/foo` donc `DIR . '/../config/db.php'` équivaut à `/home/toto/www/foo/../config/db.php` soit `/home/toto/www/config/db.php`).
Pourquoi hardcoder un chemin quand on peut le retrouver dynamiquement (via `DIR`) ? Pas mieux pour rendre son code portable/réutilisable. En plus c'est la solution donnée dans le doc OVH (aux 2 `_` manquants près - c'est `DIR`, non `DIR`).
Quitte à insister ![]()
Tout dépend de ce contient la variable `DIR` . En CRON rien ne te dit qu'elle correspond au répertoire du script.
Si tu regarde les logs tu verras que l’exécution va chercher ton script par une adresse absolue.
Donc il faut coder en dur, tant pis pour les paranos.
Ce n'est pas une variable mais une constante et elle est gérée par PHP lui-même.
> En CRON rien ne te dit qu'elle correspond au répertoire du script.
Parce qu'elle pourrait valoir quoi alors selon toi pour être fausse ? Dans quelles circonstances ?
> Si tu regarde les logs tu verras que l’exécution va chercher ton script par une adresse absolue.
Peu importe, ça n'a strictement aucune influence sur `DIR` : PHP résoudra quoi qu'il arrive le chemin du script en chemin absolu. (au même titre que `FILE`)
Lesdits robots ne sont quand même pas des parseurs PHP minimaux qui extraient (copient) les scripts des (require|include)(_once)? et ne savent gérer que des chemins absolus ? Dès lors tout autoload en serait inutilisable en cron (le chemin de l'inclusion étant dynamique). Pas non plus de chroot sur ce qui correspondrait à `DIR`, empêchant ainsi d'aller chercher des scripts situés plus haut ou dans un répertoire parallèle/frère ?
Parce qu'elle pourrait valoir quoi alors selon toi pour être fausse ? Dans quelles circonstances ?
Parce que c'est une constante... variable :laughing:
Le comportement actuel des scripts en CRON n'a pas toujours été le même à ce sujet et il a fallu que je les révise en passant en stable si j'ai bonne mémoire.
Maintenant rien ne t'empêche :
- de tester le retour de ` __DIR__`
- d'émettre un vœu pour un traitement conforme à tes désirs (vœu auquel je souscris volontiers)
Bonne continuation.
Tout dépend de ce contient la variable \_\_DIR\_\_ . En CRON rien ne te dit qu'elle correspond au répertoire du script.
la constante php \_\_FILE\_\_ contient le chemin absolu du fichier dans lequel elle est appelée
la constante php \_\_DIR\_\_ est un équivalent de dirname(\_\_FILE\_\_)
la façon de faire que propose toto fonctionnera toujours.