Bonjour,

Voila je rencontre un petit problème avec mon code.

Il s'execute normalement, mais quand j'essaye de l'executer en tache cron rien ne se passe. cela fait plusieurs jours que je recherche l'erreur car quand j'y accede normalement le script fonctionne a merveille

Mon code sert a envoyer des mail a mes inscris chaque jours afin qu'il est connaissance qu'il on eut des inscris la veille sur le mailling list

Voici mon code

require 'css/bootstrap.php';
$db = App::getDatabase();

$admin = 1;

$users = $db->query("SELECT * from users WHERE validation_admin = ? AND username = ?", [$admin]);

$compteur_prospect = 0;
while($data = $users->fetch()){
    $username = $data->username;
    $email = $data->email;

    $date = date('Y-m-d', strtotime('-1 day'));

 $prospect = $db->query("SELECT id FROM prospect WHERE username = ? AND date_ajout = ?", [$username, $date]);
    while($data1 = $prospect->fetch()){
        $compteur_prospect++;
    }

if($compteur_prospect > 0){
    $mail = $email; // Déclaration de l'adresse de destination.

    if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui rencontrent des bogues.
    {
        $passage_ligne = "\r\n";
    }
    else
    {
        $passage_ligne = "\n";
    }
    //=====Déclaration des messages au format texte et au format HTML.
    $message_txt = "Bonjour,\n\n\n\nFélicitation, vous avez eu " . $compteur_prospect . " nouveaux prospects inscris sur vos pages de capture.\n\nVous pouvez accedez à leur informations dans l'onglet Prospect en vous connecter à votre espace membre LF Stratégy.\n\nhttp://secret-prospect-mlm.com/espace-membre/login.php\n\n\n\nAmicalement,\n\nAdministration LF Strategy.\n\n\n\n";
    $message_html = "<html><head></head><body><b>Bonjour,<br/><br/>Félicitation, vous avez eu " . $compteur_prospect . " nouveaux prospects inscris sur vos pages de capture.<br/>Vous pouvez accedez à leur informations dans l'onglet Prospect en vous connecter à votre espace membre LF Stratégy.<br/><a href='http://secret-prospect-mlm.com/espace-membre/login.php'>http://secret-prospect-mlm.com/espace-membre/login.php</a><br/><br/>Amicalement,<br/>Administration LF Strategy.<br/><br/><img src='http://secret-prospect-mlm.com/espace-membre/images/lfstrategy-mail.png' /></body></html>";
    //==========

    //=====Création de la boundary
    $boundary = "-----=".md5(rand());
    //==========

    //=====Définition du sujet.
    $sujet = "Vous avez eu " . $compteur_prospect . " nouveaux prospects inscris sur vos pages de capture le " . $date . "." ;
    //=========

    //=====Création du header de l'e-mail.
    $header = "From: \"LF Strategy\"<noreply@secret-prospect-mlm.com>".$passage_ligne;
    $header.= "Reply-to: \"LF Strategy\" <noreply@secret-prospect-mlm.com>".$passage_ligne;
    $header.= "MIME-Version: 1.0".$passage_ligne;
    $header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
    //==========

    //=====Création du message.
    $message = $passage_ligne."--".$boundary.$passage_ligne;
    //=====Ajout du message au format texte.

    $message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
    $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    $message.= $passage_ligne.$message_txt.$passage_ligne;
    //==========
    $message.= $passage_ligne."--".$boundary.$passage_ligne;
    //=====Ajout du message au format HTML
    $message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
    $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    $message.= $passage_ligne.$message_html.$passage_ligne;
    //==========
    $message.= $passage_ligne."--".$boundary."--".$passage_ligne;
    $message.= $passage_ligne."--".$boundary."--".$passage_ligne;
    //==========

    //=====Envoi de l'e-mail.
    mail($mail,$sujet,$message,$header);
}
$compteur_prospect = 0;
}

Quand j'execute le code aucune érreur n'est visible le script fonctionne mais refuse de ce lancer avec cron.

Pourtant j'ai essayer avec un script d'envoie de mail seul et mes taches cron fonctionne donc je ne vois pas d'ou vien l'erreur.

Pouvez-vous m'aidez a y voir un peu plus clair, Merci d'avance a tous ;)

Amicalement, Fabien

9 réponses


keulu
Réponse acceptée

le soucis de faire ">/dev/null 2>&1" c'est que la tu lui demande d'envoyer tout le texte qui peut eventuellement ressortir (les erreurs y compris) vers /dev/null (c'est a dire vire le vide intergallactique)

ca donne quoi quand tu l'enlèves ?

pour eviter la limitte de temps d'execution, tu peux mettre un petit "set_time_limit(0)" en haut de ton fichier.

et oui ton require comme ca n'est pas bon.

essaye aussi de faire

cd /home/utilisateur/public_html/secret-prospect-mlm.com && php-cli -f ./cron.php

Salut,
Quelle commande utilises-tu pour lancer ton script en Cron ?
Sinon regarde du côté du chemin de ton require, il y a peut-être besoin de la passer en absolu (en l'éxécutant via Cron, le script n'est pas éxécuté forcément par le même utilisateur, et donc avec une chemin qu'il ne connait pas)

As tu bien fait attention de le lancer avec le shell php ?

Par exemple (crontab) :
0 0 * utilisateurMail /bin/php /var/www/html/mailAutomatique.php

Ton utilisateur cron a-t-il bien les bons droits (lecture/éxécution) sur ton(tes) fichiers php(s) ?
As-tu quelque chose dans tes logs cron ?
(Pourquoi utilisateurMail dans ta commande cron ?)

Comme dit dans ma première réponse je pense à un problème de chemin sur ton require (le script éxécuté comme celà est éxécuté à partir d'un autre dossier/user, donc il peut ne pas trouver ton fichier bootstrap.php)

Après tu peux lancer ton script autrement, c'est un peu barbare, mais ça fait le job normalement

0 0 * * * wget http://tonsite.tld/chemin/mailAutomatique.php

Le soucis avec ta méthode byflo, c'est que si le script dépasse les 30 secondes, ça peut te sortir un timeout.
Autant partir de la racine comme l'a dit Roland Merlin.

Bonjour a tous, oui mes utilisateur ont les bon droits j'ai mis le fichier en attribut 655 j'ai tester avec une simple envoie de mail et cela fonctionne, c'est simplement ce script qui me pose probleme
Je vien d'essayer de mettre mon require en absolu mais cele ne change rien mon script n'est pas executer.

ma commande cron est celle ci :

          • php-cli -f /home/utilisateur/public_html/secret-prospect-mlm.com/cron.php >/dev/null 2>&1
            j'ai mis toutes les minute afin de tester pour le moment puis je la mettrai une fois par jour comme ceci :
            0 0 * php-cli -f /home/utilisateur/public_html/secret-prospect-mlm.com/cron.php >/dev/null 2>&1

sachant que utilisateur et n'est pas utilisateur c'est le nom d'utilisateur de mon serveur. je les changer pour vous montrer ma fonction cron
je n'ai rien dans mon fichier log cron, si c'est celui qui est dans le même dossier ou se trouve le fichier cron.php

Okok j'essaye sa de suite et pour mon require que me conseils tu ?

Merci je vien d'essayer ta commande cron et cela fonctionne un grand merci a toi Keulu

np bro ! :)