Vider une table périodiquement en php

Fermé
leto23 Messages postés 86 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 24 janvier 2010 - 28 janv. 2008 à 16:38
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 - 23 juil. 2008 à 13:28
Bonjour,
J'aimerais que une de mes tables sur mysql se vide de façon périodique. Pour cela j'ai déjà fait le code de suppression de la table :

<?php
mysql_connect("mon_serveur", "mon_login", "mon_pass");
mysql_select_db("mon_login");

mysql_query("DELETE FROM ma_table") or die(mysql_error());


mysql_close();
?>


Le code est assez simple (vue que j'arrive a le faire marcher ^^), mais créer la suppression de la table a intervalle régulier n'est pas de mon niveau (du moins pas maintenant :)). Le but serai de faire vider la table par exemple tout les jours a 15h, ou bien de la faire vider toutes les 4h,...se genre de chose quoi.

Je ne pense pas que cela soit compliqué pour une personne aillant de bonne base en php, donc si quelqu'un a la solution je l'en remercie !


Leto23
A voir également:

8 réponses

[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
28 janv. 2008 à 16:53
Salut,

Le code PHP est exécuté à la requête des visiteurs du site. Tu ne maîtrises par l'heure et la date à laquelle ils se connectent.

Ce dont tu as besoin, c'est d'un programmeur d'évènements tournant sur le serveur et lançant un script effectuant cette tâche de maintenance selon la périodicité souhaitée.

Sur une machine Linux (BSD, ou Unix), tu peux utiliser cron pour programmer le lancement si tu as un accès en ligne de commande (shell) au serveur d'hébergement, ou une interface de gestion du type Cpanel, Plesk ou Webmin si celles-ci te permettent de le faire.

Ensuite, pour le script proprement dit, tu devras utiliser un langage de script de programmation qui soit supporté par le serveur d'hébergement (php en ligne de commande, bash pour un simple script shell pilotant le client mysql, perl s'il est installé avec le support de myql, etc.).

Si c'est ta propre machine, tu n'auras pas trop de mal à trouver l'outil adéquat (ou à l'installer). Si c'est un serveur qui ne t'appartient pas, et qui est mutualisé, tu peux avoir plus de mal, renseigne toi sur ce qui existe auprès de ton hébergeur.

Si c'est une machine sous Windows, il existe surement des solutions comparables, mais je ne les connait pas.

Bon courage.


Dal
0
leto23 Messages postés 86 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 24 janvier 2010 6
28 janv. 2008 à 22:52
merci de ta réponse Dal !

C'est vrai que le fait que l'on ne peut pas savoir a l'avance quand un visiteur viendra activé le script change beaucoup de chose...je n'y avait pas pensé...

Sinon pour mon serveur, c'est celui de mon hébergeur (power-heberg), voici les options dont je bénéficie dessus : PHP 4, PHP 5, CGI, PERL,...
Comment créer un programmateur d'évènement dans se cas ? pour le script je peux garder celui que j'ai mit dans le premier message je pense...

J'ai trouvé se lien : https://atranchant.developpez.com/mysql/evenement/

Sauf que je n'ai apparament pas la bonne version de mysql pour l'utiliser...


Leto23
0
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
29 janv. 2008 à 10:35
Salut Leto23,

Merci pour le lien, je ne connaissais pas cette nouvelle fonctionnalité du serveur MySQL. Ce serait l'idéal pour toi, si cette version (récente) de MySQL équipait ton hébergeur.

mon hébergeur (power-heberg)

Je ne connais pas, mais on dirait un hébergement mutualisé. Ils parlent d'un centre de contrôle, as-tu bien regardé s'il n'y avait rien dans le genre de cron (ou crontab) ? Ceci dit, il est rare que des hébergements mutualisés donnent accès à ces fonctionnalités.

Renseigne toi auprès de ton hébergeur, éventuellement sur leurs forums de discussion aussi (ils indiquent en avoir).

Sinon si tout ce que tu cherches c'est à vider la table avant qu'elle n'atteigne une taille trop importante, tu pourrais tester la taille de la table, ou le nombre d'enregistrements qu'elle contient, et lancer son effacement si c'est nécessaire.

Tu peux récupérer des informations de taille complètes avec la commande "show table status" et en extraire le champ taille (Data_length) de la table (Name) considérée.

Ou, plus simplement en comptabilisant le nombre de lignes de la table avec une requête "select count(champ_id) from table"


Dal
0
Sh@tter Messages postés 157 Date d'inscription jeudi 29 novembre 2007 Statut Membre Dernière intervention 26 octobre 2009 46
29 janv. 2008 à 11:33
Moi ce que je te conseille c'est le site https://www.webcron.org/
Il marche sur le principe de la commande cron de linux. C'est tout simple tu t'inscris tu mets le nom du site et du fichier à y éxécuter, l'intervalle (toutes les heures, chaque soir à minuit, une fois par mois...) et après tu ne t'occupes plus de rien.
Je l'utilise moi-même et je ne vois pas plus simple^^

Pour ce qui est du problème qu'une personne lance le fichier à ta place tu as juste à mettre ce fichier dans un répertoire distinct que tu protèges via les fichiers .htaccess et .htpasswd.

En espérant que ça t'aide :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
leto23 Messages postés 86 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 24 janvier 2010 6
29 janv. 2008 à 14:20
merci de vos réponses,

Je vais tester cron alors pour voir, j'espère que c'est simple ^^


Enfaite j'aimerais vider ma table tout les jours a minuit (comme le font certain site de jeux...) pour tout remettre a zéro. Changer la taille de la table ne me conviendrait pas, car elle pourrai être saturé avant minuit par exemple.
Pour se qui est de "select count(champ_id) from table" je ne voit pas comment vider entièrement ma table avec...

En tout cas, merci, je teste le site avec cron pour voir ^^

Leto23
0
sebastienjulien
7 mai 2008 à 00:05
Salut les gars, je suis dev en php, asp, ajax, web2.0, etc. Je monte de grosses applications.

Et lorsque j'ai pas accès à cron, alors j'utilise, selon les besoins bien sûr, une logique bien simple.

Je mets mon code du robot de maintenance (vigile que je contruis sur de gros portails genre, ou nettoyages réguliers de paniers d'achats) en bas de page en inclusion.

car logiquement, le dernier visiteur sur le site, est le dernier. Le site est alors suspendu dans le temps. Alors le dernier visiteur (ou webbot ) passe et la table se vide. Le prochain visiteur aura tout beau pour sa part.

N'oubliez pas que les arraignées, ou webBot de google, msnbot , ceux de yahoo, et ainsi de suite sont ausssi alors considérés comme des visiteurs.

Alors au passage d'un visiteur ou d'une arraignée, et bien tu vérifies l'heure espérée et tu déclanches ton script.

L'idéal aussi est un journal de transactions, où tu insert simplement le statut de l'opération, le timestamp, etc.

Pour ma part, j'utilise cron pour mes paniers d'achats, outils de masss mailing, robots de maintencance, surveillance en ligne sur web 2.0, et ainsi que les web marchands qui ont besoin , par xml de mettre à jour les quantités de leur catalogue via le site de leur fournisseur même ou leur distributeur.

J'espère que ca te donne une tite lumière sur tout ca.

ps : tu peux aussi paramêtrer des procédures stockées avec mysql 5

www.sebastienjulien.com
0
leto23 Messages postés 86 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 24 janvier 2010 6
22 juil. 2008 à 00:28
Ma question date un peu, mais merci pour ta réponse !

J'avais pensé a sa (effectivement, c'est se qui parait le plus logique ne soi) mais pour moi je trouve qu'il y a un problème car il faut définir une heure précise, que sa passe t'il si personne ne vient a l'heure indiquée ? Et bien la table ne se videra pas...
Puis si je met une intervalle de temps, et qu'il vient plusieurs personne pendant se temps, alors sa cause un problème, car un restriction applicable uniquement avec une table pleine n'aurai plus lieu pendant cette intervalle ou il y aurait des visiteurs...
0
sebastien julien
22 juil. 2008 à 01:44
Et bien en fait, comme je disais, une fois le dernier visiteur sur le site, entre lui et le prochain, la variable temps n'a plus d'importance car c'est comme figé, mort, sur le hold. Donc, au prochain visiteur, tu vire ta viande pis tu save le time stamp de ton dernier vidage. Pis là, ben tu vérifies avant si ca te va entre les dates de mise à jour PEU IMPORTE le nombre de visiteurs et PEU IMPORTE l'espace temps.

tsé, moi je vois ca simplement. Pas besoin d'heure précise, juste un interval dont tu as le loisir de ELSER comme tu veux selon les nomenclatures que tu veux donner. En plus clair, une fois le nettoyage fait, tu save le time, pis tu fais un comparatif selon tes règles de maintenance ET sa nomenclature ou ses contraintes, genre toutes les heures tu nettoie seulement si .......sinon..........etc.

bref, même si il y a 30 000 visiteurs en même temps, tu as déjà nettoyé pis savé ton dernier timestamop de nettoyage. Pourquoi le refaire à nouveau, sans cesse alors que c'est fait ? Et op.

Les chats marchent comme ca à la base.

le plus important dans le développement de bonnes applications, est de se défaire des nomenclatures, contraintes pis de penser aux facteurs, comme tu mentionnais justement. Car tu devras inexorablement fixer un pool dans l'interval, soit toutes les heures, les jours, les semaine, car c'est las base de ta question. Pis à moins de faire ca en ajax et en backbase, alors tu te fie aux visiteurs pis aux bots qui passent régulièrement. La viande est vidée, on save ca dans un champ, pis à chaque passages on regarde dans un unique champ pis on évalue la différence de temps.

Reviens moi si tu as des trucs qui collent pas. Sinon tu te monte un script client sur ton ordi chez-toi qui va caller ta page d'update tous les jours, genre avec windows tu peux caller le gestionnaire de taches pis caller ton browser automatiquement pis ouvrir la page que tu veux, qui en fait va caller tous les jours à l'heure précise ton script de nettoyage. Les bases de données industrielles ont elles-même des taches internes, procédures stockées, tu serait surpris si ca se trouve.

a plus
0
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
23 juil. 2008 à 13:28
Salut,

Je crois que toute la question est de savoir pourquoi notre ami leto23 voulait vider sa table MysQL et si le fait que ce soit à intervalles précis est important ou pas, histoire d'adapter la solution aux besoins.


Dal
0