Conversions automatiques toutes les X minutes

creadunet
2014-08-18 22:10

SCRIPT NON TESTÉ, FAITES IMPÉRATIVEMENT UNE SAUVEGARDE AVANT UTILISATION

On m'a demandé récemment, comment configurer une conversion automatique des points des joueurs.

La demande :

- conversion automatique des points
- toutes les 10 mn
- taux de $0.1

1- On va faire un petit fichier PHP, qu'on va appeler : cron_conversion_auto.php
(vous mettez le nom que vous voulez !! mettez un nom compliqué pour éviter les problèmes...)

2- Vous mettez ce fichier à la racine, ou dans un répertoire, ou encore mieux, hors de l'arborescence accessible via internet (souvent dans le répertoire précédent /public_html ou /www - demandez à votre hébergeur)

3- Le fichier

<?php
include dirname(__FILE__).'/conf.php';//on inclut le fichier de config, à adapter selon l'endroit où sera stocké ce fichier PHP

//configurations
$taux_conversion_auto=0.1;//mettez ici le taux que vous voulez utiliser.
$envoi_email_admin=0;//mettre à 1 pour envoyer un email à l'admin quand c'est terminé


/*démarrage du script
* NE PAS TOUCHER CI-DESSOUS
*/

$day=date("Y-m-d");
//Récupération des points, et mise en place dans la table histo_point
$rq=send_sql("SELECT id,point FROM ".PREFIX."membres_tbl ");
if(mysql_num_rows($rq)>0)
{
    $insert="";
    while($ligne=mysql_fetch_array($rq,MYSQL_ASSOC))
    {
        if($insert!="")$insert.=",";
        $insert.="('".$day."','".$ligne['id']."','".$ligne['point']."',-1)";
    }
}

if($insert!="")
{
    $ins=send_sql("INSERT INTO ".PREFIX."histo_point VALUES $insert ");
    //on remet à 0 les points de tous les clients
    $upd=send_sql("UPDATE ".PREFIX."membres_tbl SET point=0 ");
}


//conversion des points de la table histo_point
$tabla = send_sql("SELECT id_mem,points FROM ".PREFIX."histo_point WHERE mois='".$day."' AND conversion<0");
while ($registro = mysql_fetch_array($tabla,MYSQL_ASSOC))
{
    $user = $registro["id_mem"];
    $pointuser = $registro["points"];

    $point = ceil($pointuser);
    $division = $point/1000;
    $moneyadd = $division*$taux_conversion_auto;
    if($moneyadd<0)$moneyadd=0;

    if($moneyadd>0)
    {
        //mets à jours les gains des membres
        $upd=send_sql("UPDATE ".PREFIX."membres_tbl SET money=money+$moneyadd WHERE id='$user'") or die(mysql_error());
    }
}
//sauvegarde dans histo_point-1 et effacement de l'historique des gains
$svg=@send_sql("DROP TABLE IF EXISTS ".PREFIX."histo_point-1 ");
$svg=@send_sql("CREATE TABLE ".PREFIX."histo_point-1 (
        mois date NOT NULL ,
        id_mem int( 11 ) NOT NULL ,
        points float(11,2) NOT NULL ,
        conversion float NOT NULL ,
        KEY mois ( mois , id_mem , points , conversion )
        ) ENGINE = MYISAM DEFAULT CHARSET = latin1;");
$svg=@send_sql("INSERT INTO ".PREFIX."histo_point-1 SELECT * FROM ".PREFIX."histo_point");
$del=send_sql("DELETE FROM ".PREFIX."histo_point WHERE mois='".$day."' ");

if($envoi_email_admin==1)
    mail($email_admin,"Fin CRON conversion auto","Fin CRON conversion auto","From:".$email_admin);
?>

4- Ensuite, une tâche CRON (si vous ne pouvez pas faire de tâche cron, il faut bricoler un appel PHP depuis une page PHP, mais je déconseille fortement). La tâche CRON sera du genre :

*/10 * * * * php /path/to/your/file/cron_conversion_auto.php

*/10 = toutes les 10mn
Voyez avec votre hébergeur ce qu'il propose pour les tâches CRON
(appelées Cronjobs ou Tâches automatisées)

Moyenne des notes : 5 (1 Vote)

Vous pouvez commenter cet article