Les crons

Eléphanteau du PHP | 30 Messages

04 juil. 2011, 18:51

Bonjour voulant construire un systeme de bannisement ou je n'ai pas besoin de débannir maluement
ex: bann de 2 semaines et debann automatique
On m'a orientée vers les crons

sauf que je sais pas ce que c'est
et j'ai trouvé aucun tuto clair la-dessus

Si quelqu'in pourrait m'expliquer ca serait gentil
Merci :D

ViPHP
ViPHP | 2577 Messages

04 juil. 2011, 20:17

Bonjour,

cron est un outil Unix/Linux qui permet d'exécuter des commandes de manière régulière. Tu peux en particulier lancer un script PHP en ligne de commande ou lancer un appel à une page http.

http://www.generation-linux.fr/index.ph ... -avec-Cron

Mammouth du PHP | 2278 Messages

04 juil. 2011, 20:37

Les crpon c'est bien ce qu'on t'a dit:
table de taches à faire à des dates fixées, ou a des intervalles fixés...
Tous les dimanches du mois de mai réciter
cinq je vous salue marie
Tous les diamnches de janvier réciter
Je vous salis ma rue.
Mais ça ne va jamais suffire pour régler le problème des bans, sauf si tu mémorises dans un quelconque fichier, ou une table d'une base de données la liste des bannis, la date et la durée de leur bannissement.
Tu peux imaginer que ton cron lance tous les jours un programme quelconque qui identifie la date, lise la liste des bannis, en déduise ceux qu'on peut débannir, et mette à jour la liste en question (Surement plus simple via une BDD que par un fichier).

Mais ton appli pourrait peut-être créer sur la machine serveur un fichier dont le nom permet d'identifier la personne:
si j'ai pour login "bilou", et si je suis banni , l'appli dépose un fichier bilou.ban qui contient la date de fin de ban.
Lorsque je cherche à me connecter, l'appli vérifie qu'il n'existe pas un fichier bilou.ban; s'il n'y en a pas, elle me laisse entrer, sinon elle lit le fichier et en déduit si elle peut me laisser entrer; si oui, elle supprime ce fichier, sinon elle me jette.

Il doit y avoir moyen de passer par les cookies, mais je ne suis pas certain qu'ils ne puissent pas être supprimés brutalement par le client.
Ils contiennent une notion de durée de validité; c'est utilisé, je pense, sur des sites de jeux gratuits.

M Billard
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 30 Messages

04 juil. 2011, 21:00

Ah mais c'est un truc qui est pas activé par défaut chez l'herbergeur?

ViPHP
ViPHP | 3607 Messages

05 juil. 2011, 11:35

Bonjour,

Si par hébergeur tu parles de mutualisées "low-cost", oui ça n'est pas disponible.
Il existe des services externes comme http://webcron.org pour palier à ce problème.
Ils permettent de se connecter intervalles précis sur une url de ton site ( http://exemple.com/crons/daily.php ) et permettent également d'accéder à des ressources protégées par htaccess.
Ainsi tu pourras être que ton cron n'est éxécuté qu'une fois et pas par des visiteurs trop curieux.

Eléphanteau du PHP | 30 Messages

05 juil. 2011, 12:10

Oui j'ai vérifier : mon hebergeur propose les crons

mais conretement en code : si je veux par exemple que mon cron affiche une fenetre pop-up disant bonjour tous les lundis a 12h20 sur ma page index.php
Quelle code devrai-je marquer?

Merci d'avance

Mammouth du PHP | 2278 Messages

05 juil. 2011, 12:28

Ah mais c'est un truc qui est pas activé par défaut chez l'herbergeur?
:?: Comme j'ai parlé de plusieurs trucs différents, je ne comprends pas à quoi tu réponds.
Si tu es chez un hébergeur, ça m'étonnerait que tu puisses créer ta crontab personnelle.
mais cette bidouille me plait bien :idea: : comme fichier index.php
 
<?PHP
/** le bannissement */
mysql_connect ();
mysql_select_db ("blog");
/** la table bannis a deux colonnes
id int(11) (numero du banni)
datefin date (date de fin de bannissement)
*/
/** bannir qqn pour une semaine*/
$numero_banni = 313; // toute valeur fournie par toi
// casse indifférente (DAY ou HOUR ou MINUTE entre autres)
$requete = "insert into bannis (id,  datefin) values( $numero_banni, DATE_ADD(NOW(),  INTERVAL 7 DAY))"; 
mysql_query ($requete);
/** pendant qu'on le bannit on peut voir débannir ceux qui ont passé la date
on devrait caser ça aussi avant chaque tentative de connexion*/
$requete = "delete from bannis where datefin < now()"; // il faut mettre < parce que now() renvoie date et heure... ca fait, involontairement de ma part, un ban à la seconde près... 
mysql_query ($requete);
?>
Modifié en dernier par sirakawa le 05 juil. 2011, 18:08, modifié 1 fois.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
ViPHP | 3607 Messages

05 juil. 2011, 12:41

mais conretement en code : si je veux par exemple que mon cron affiche une fenetre pop-up disant bonjour tous les lundis a 12h20 sur ma page index.php
Quelle code devrai-je marquer?
Concrètement, un cron ne te permet pas de faire celà.
Il te permet d'effectuer des traitements sur des données, modification de base de donnée, suppression de fichiers de caches obsolètes, envoie de mails, etc...
En suite à toi de programmer en fonction.

Si par exemple, tu souhaites prévenir que l'utilisateur n'est plus bannis, dans ton cron, tu envoies uniquement le mail et tu modifies la base de donnée si besoin.

Ensuite reste à savoir comment tu stockes le fait qu'un utilisateur est banni ou non...
Il n'est pas forcément nécessaire d'avoir un cron...
En admettant que tu stocke la date de dernier banissement ainsi que la durée du banissement (disons en jours).
Tu peux savoir si l'utilisateur est banni, au sein même d'un requête sql:
SELECT
id, username, email, etc...
( DATE_ADD(date_banissement, INTERVAL duree_banissement DAY) > NOW() ) as is_banned
FROM
tatableutilisateurs

Mammouth du PHP | 2278 Messages

05 juil. 2011, 13:28

mais concretement en code : si je veux par exemple que mon cron affiche une fenetre pop-up disant bonjour tous les lundis a 12h20 sur ma page index.php
Quelle code devrai-je marquer?
Pour ca, il suffit de ça:
<?PHP
date_default_timezone_set('Europe/Paris');
$aujourdhui = getdate();
$heure = $aujourdhui ['hours'];
$minutes = $aujourdhui ['minutes'];
if ($heure == "13"):
print "<script text ='text/javascript'> alert ('bonjour')</script>";
endif;
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 juil. 2011, 13:41

mais concretement en code : si je veux par exemple que mon cron affiche une fenetre pop-up disant bonjour tous les lundis a 12h20 sur ma page index.php
Quelle code devrai-je marquer?
Pour ca, il suffit de ça:
<?PHP
date_default_timezone_set('Europe/Paris');
$aujourdhui = getdate();
$heure = $aujourdhui ['hours'];
$minutes = $aujourdhui ['minutes'];
if ($heure == "13"):
print "<script text ='text/javascript'> alert ('bonjour')</script>";
endif;
?>
NON il ne peux le faire a partir de cron, c'est exécuter sur le serveur comme PHP, il n'aura jamais accès à un navigateur quel qu’il soit !!!!!

sont script ne sert qu'a l'affichage d 'une page affichera tout cela tant qu'il sera 13h (donc pendant une heure si tu a ça sur le site oueb tu ferme la fenêtre ^^
Il en faut peu pour être heureux ......

Mammouth du PHP | 2278 Messages

05 juil. 2011, 15:21

NON il ne peux le faire a partir de cron, c'est exécuter sur le serveur comme PHP, il n'aura jamais accès à un navigateur quel qu’il soit !!!!!

Ai-je jamais dit que c'était faisable à partir du cron?

remarque subtile, mais mal venue:
1) un alert ne reste affiché que tant qu'on ne le ferme pas et ne se réaffiche que si l'on repasse à l'endroit qui le déclenche.
2) il s'affichera au chargement de la page si on met ce code au début; de plus, on peut rafiner:
<body onload ='cequejenecriraipas()'>
3) la condition peut être changée...
M.B.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 30 Messages

05 juil. 2011, 19:17

Et ce code il faut que je le mette dans la page concernée?

ViPHP
ViPHP | 3607 Messages

05 juil. 2011, 19:20

Ah mon avis il vaudrait mieux qu'il soit sur un autre site, sur un autre serveur...
Mais je me trompe peut-être...

Eléphanteau du PHP | 30 Messages

05 juil. 2011, 20:16

Je vous fait un screen de ce que me demande l'hebergeur

Image

ViPHP
ViPHP | 3607 Messages

06 juil. 2011, 09:08

Bon avant d'aller plus loin, il faudrait définir ce que tu veux que ton script fasse réellement... :|
Parce que ça, ça veut tout dire et rien dire...
Bonjour voulant construire un systeme de bannisement ou je n'ai pas besoin de débannir maluement
ex: bann de 2 semaines et debann automatique
Comment fonctionne ton système de banissement actuel déjà?
Quels actions sont nécessaires pour ne plus être banni?

Répond à ces quelques questions, et on verra ensuite...