Page 1 sur 2

Executer un script PHP chaque 2 heures

Posté : 06 avr. 2013, 15:21
par rimie
Bonjour,

J'aimerais executer un script PHP chaque 2 heures, je sais qu'il faut recourir au cron, si je ne me trompe pas, on utilise la commande exec, malheureusement cette commande est desactivee sur le server, y a t il un moyen alternatif pour l'effectuer.

Merci

Re: Executer un script PHP chaque 2 heures

Posté : 06 avr. 2013, 19:15
par moogli
Salut,

Tu vois a l'envers la tâche cron exécute une commande Shell donc quelque comme php -f lefichieraexecuter


@+

Re: Executer un script PHP chaque 2 heures

Posté : 06 avr. 2013, 19:24
par yann18
bonjour,

de mémoire une tâche cron n'est qu'un service sous linux et ne dépend pas de la commande exec. lors de la config de cron tu lui renseignes la commande à exécuter(ex : * */2 * * * php -f scriptAexecuter.php).

Alternative à cron:
Avec mysql tu peux lancer l'exécution d'une tâche avec Event Scheduler. Dans ce cas il faut déporter la logique de ton script dans une procédure stockée mysql qui sera ensuite lancée par Scheduler à l'instant t indiqué.

Re: Executer un script PHP chaque 2 heures

Posté : 07 avr. 2013, 14:51
par rimie
@moogli: une option avec script PHP sans passer par le Shell

@yann18: le script comporte des requetes SQL, je vais voir votre lien

Re: Executer un script PHP chaque 2 heures

Posté : 07 avr. 2013, 15:06
par rimie
J'ai lu l'article, merci je vais le tester apres, je veux avoir une information sur 2 methodes:

+ Methode 1: Celle donnees par yann18,
+ Methode 2: J'ai un fichier PHP qui se declenche chaque minute a l'aide de jQuery, qui verfier des fichiers, donnees,... je peux integrer le fichier comportant les requetes de verification et le lancer, exemple:
SELECT * FROM articles WHERE heure_view >= l_Heure_Actuelle LIMIT 1
Le code choisit l'article qui a l'heure superieur ou egal a l'heure actuelle.

Lequel de ces 2 methode est convenable: cote bande passante, script gourmand ou pas,...

Re: Executer un script PHP chaque 2 heures

Posté : 07 avr. 2013, 16:23
par moogli
C'est quoi le but exactement ?

Parce que la JS c'est a proscrire vue que c'est liée au client c'est le merdier assuré ;)

Si c'est un traitement qui ne concerne que les données du sgbd utiliser le gestionnaire de tâche de mysql est une bonne idée.
Si c'est une action serveur tu n'as pas le choix utilise cron.

Dernière option (si c'est pas trop gourmand en ressource) quand quelqu'un demande une page tu regarde si c'est le moment de le faire, si oui tu le fait, si non ben tu fait rien ;).
@+

Re: Executer un script PHP chaque 2 heures

Posté : 08 avr. 2013, 02:29
par rimie
Le script est d'afficher une phrase differente chaque 2 heures choisit d'une SGBD

Re: Executer un script PHP chaque 2 heures

Posté : 08 avr. 2013, 11:21
par moogli
comment est sauvegardé ce choix ? (un flag en base ?) si oui utilise la solution mysql.
si dans un fichier ou autre tu n'as pas le choix il faut utiliser cron et donc un script php ou perl ou ce que peux te proposer ton hébergeur.

d'ailleurs je ne vois pas pourquoi ton hébergeur te refuserais d’exécuter un script php s'il te propose des tâches crons ;) (qui exécute une commande shell ...)


@+

Re: Executer un script PHP chaque 2 heures

Posté : 09 avr. 2013, 02:10
par rimie
si c'est moi l'hebergeur, je dispose d'un serveur, et que le code SGBD est comme suivant:
CREATE TABLE tata
id
categorie
titre
message

INSERT INTO tata VALUES (1, '1', 'titre 1', 'message 1'),
INSERT INTO tata VALUES (2, '1', 'titre 2', 'message 2'),
INSERT INTO tata VALUES (3, '3', 'titre 3', 'message 3'),
INSERT INTO tata VALUES (4, '2', 'titre 4', 'message 4'),
INSERT INTO tata VALUES (5, '3', 'titre 5', 'message 5'),

etc...

INSERT INTO tata VALUES (n, '1', 'titre n', 'message n'),
Le but est d'afficher un message chaque 2 heures a partir d'une requete SELECT

Re: Executer un script PHP chaque 2 heures

Posté : 09 avr. 2013, 11:35
par moogli
Comme déjà dit cela dépend de la façon dont tu stock le message retenue.

Perso, vue que cette donnée est relativement statique je ne ferais pas un select en base à chaque affichage.
tu peux stocker cela dans un fichier plat, quitte à le structurer un peu ;)

et donc un fichier php relativement basique
<?php
try {
    // on récupère les données actuelles;
    $data = unserialize(file_get_contents('lefichierquivabien'));
    $pdo = new PDO('le server', 'user', 'password');
    $sql = 'select * from tata where id <> ' . $pdo->quote($data->id, PDO::PARAM_INT) . ' order by rand limit 1';
    $r = $pdo->query($sql);
    if ($r === false) {
        $err = $pdo->errorInfo();
        throw new Exception($err[2]);
    } else {
        $data = $r->fetch(PDO::FETCH_OBJ);
        file_put_contents('lefichierquivabien', serialize($data));
        $r->closeCursor();
    }

} catch (Exception $e) {
    echo 'boulette : ', $e->getMessage();
    echo '<br />Trace : ', $e->getTraceAsString();
}
Pour récupérer les données c'est la ligne 4 de mon code et un exemple d'utilisation ligne 6 (c'est un objet parce que j'ai utilisé FETCH_OBJ dans la requête).

ensuite pour ce qui est de l'actualisation, c'est aussi simple, tu ajoute une tache cron qui execute la commande suivante
php -f lefichierquicontientlecodequejaimiscidessus.php
info sur la crontab http://fr.wikipedia.org/wiki/Crontab il y a des exemples correspondant à ce que tu cherche afin de paramétrer ta cron tab ;)


autre solution, qui utilise plus le SGBD : dans la tabel tu ajoute une colonne permettant d'indiqué quel est le message actif.
par exemple
CREATE TABLE tata (
id
categorie
titre
message
actif int(1) check(actif in(0,1)) not null default 0
)
lorsque tu as choisis le message tu passe la colonne actif à 1 et toutes les autres a zéro.
pour cela une version bourrin tu garde l'id de la nouvelle ligne sélectionnée, un update sur toute la table (update tata set actif=0) et ensuite la mise à 1 du champ actif pour la ligne sélectionnée.
Ensuite pour afficher le message sélectionné un simple select * from tata where actif = 1.

La première solution me semble la plus performante, a tester en charge.


@+

Re: Executer un script PHP chaque 2 heures

Posté : 10 avr. 2013, 09:33
par rimie
merci moogli pour tes propositions, je vais lire la doc pour bien decider :)

Re: Executer un script PHP chaque 2 heures

Posté : 23 avr. 2013, 05:22
par rimie
reBonjour,

Je me suis servis de event_scheduler sur phpmyadmin, afin d'executer mes taches:

Image
http://img37.imageshack.us/img37/8231/e ... eduler.png

que dois je mettre sur definitions

Re: Executer un script PHP chaque 2 heures

Posté : 23 avr. 2013, 07:56
par moogli
Sans regarder la doc je dirais la requête sql ;)
Donc update latable set lechamp = lechamp -5

@+

Re: Executer un script PHP chaque 2 heures

Posté : 23 avr. 2013, 08:56
par rimie
Sans regarder la doc je dirais la requête sql ;)
Donc update latable set lechamp = lechamp -5

@+
Je peux pas mettre du code PHP, c'est purement SQL

Re: Executer un script PHP chaque 2 heures

Posté : 23 avr. 2013, 18:24
par moogli
est ce que j'ai mis du php ? :mrgreen: