Exécution de fichier .php à interval régulier

Résolu/Fermé
Angy - 30 juil. 2011 à 21:06
 Angy - 31 juil. 2011 à 20:02
Bonjour,

Je suis à la recherche d'une solution qui me permettrait d'exécuter un fichier .php une ou plusieurs fois par jour à des heures précises, et ce par le serveur lui même et non les clients/internautes.

Quelqu'un aurait-il une idée de comment procéder ? de quelle solution/technologie mettre en place (excepté les fichiers Crontab) ?


Merci d'avance !

A voir également:

6 réponses

avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
30 juil. 2011 à 21:10
Salut,

Tu peux utiliser les tâches CRON.
https://fr.wikipedia.org/wiki/Cron
0
avion-f16, il est né sans cerveau, faut pas lui en vouloir...
Cron, crontab... Tout ça, ça lui dit rien... Pour lui c'est différent. Genre Cron c'est un Roi et Crontab c'est un arbre qui n'a rien à voir avec Cron.

Il y a le bouton I LIKE de Facebook, personne ne peut inventer le bouton : JE N'AI PAS LU LA QUESTION MAIS JE REPONDS EXACTEMENT CE QU'IL NE FAUT PAS... Il y a des smiles sur CCM ?????

Crontab = par le serveur lui-même... Comique !
Ensuite un serveur, c'est un ordi. Il y a le Python, le C (ou C++), le Delphi et j'en passe.
il y a aussi ton radio réveil ou ton iPhone qui peut te rappeler tous les jours ce que tu as à faire... Le Javascript...

Dis nous en plus, et ont'en dira plus.. Fou rires garantis !
0
Le serveur mis à disposition par mon prestataire peut interpréter le Python. Je n'ai encore jamais jeter de coup d'oeil à ce langage (je ne sais même pas si c'est un langage à proprement parler...). Mais si, selon toi, l'utilisation de ce langage pourrait m'aider alors je m'y intéresserais avec grand plaisir!
Pour ce qui est du Javascript j'vois pas comment ce langage pourrait m'être utile ... J'veux dire : cela nécessite qu'un client est ouvert la page pour que le script soit exécuté. Or, je ne dois pas compter sur la lecture des fichiers par les clients pour lancer mes scripts d'envoi de mail ... :-/ A moins qu'un fichier Javascript puisse s'auto-exécuter sur le serveur ???
0
En effet, avion-f16 ne semble pas avoir totalement lu la question ^^ Quoiqu'il en soit merci a lui d'avoir quand même essayer d'y répondre.

"Crontab = par le serveur lui-même" --> Ah ok, les nombreuses pages que j'ai lu n'ont jamais mentionné ça mais seulement qu'il s'agissait d'un programme parmi tant d'autres.

En fait le but final est d'utiliser un script qui permettra, grâce aux données de dates et horaires entrées par des utilisateurs/membres du site et stockées dans une table, d'envoyer des mails de façon très précises contenant certaines données de cette table.

En gros, j'aurais besoin d'interroger ma base de données à une heure bien précise chaque jour pour savoir si le serveur doit ou non envoyer les mails (envoi qui dépend des données utilisateurs).

Voilà, j'espère vous avoir un peu plus éclairé.

Concernant ma radio ou mon iPhone je ne suis pas sûr que mes inscrits adhéreront à cette méthode novatrice - surtout les anti-Apple.
0
avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
31 juil. 2011 à 00:53
Effectivement, j'ai zappé cette parenthèse.

@trouDuk: tu n'es pas obligé de te montrer aussi agressif.
De plus, je pense qu'au vu du nombre de personnes que j'ai déjà aidé, une erreur de ce type peut être justifiée et excusable. Comme tout le monde, je fais des erreurs.
Mais ton pseudo doit sans doute refleter ta personnalité, monsieur l'anonyme, dont son message n'est pas plus utile que mon précédent car aucun élément de réponse n'y figure.

« je ne sais même pas si c'est un langage à proprement parler... »
Biensûr que si, tout comme le PHP.

« Or, je ne dois pas compter sur la lecture des fichiers par les clients »
Malheureusement, sans les tâches CRON, cela est impossible.

Il est possible de simuler ce système de tâches planifiées.
Puisqu'il s'agit d'un cycle, tu devras donc stocker la date de dernière exécution du script d'envoie de mails dans un fichier (au format timestamp, ça sera plus simple).
Il faudra créer un script inclu dans toutes les pages.
Ce script devra vérifier la différence entre la date stockée dans le fichier et la date au moment de sp, exécution.
Si la différence est supérieur à ce que tu souhaites, alors tu inclus le script pour envoyer les emails, sinon, tu ne fais rien. Une fois le script de mailing exécuté, tu devras mettre à jour le fichier par la date "actuelle".

Plutôt que d'inclure le script dans toutes les pages, tu peux le faire tourner en boucle (avec un petit arrêt de quelques secondes). Pour cela, rien de plus simple que :
<?php
set_time_limit(0);

while(true) {
    $last_exec = (int) file_get_contents('date.txt');
    $now = time();
    $diff = $now - $last_exec;
    
    // Exécuter le script toutes les heures
    if($diff > 3600) {
        include 'sendmail.php';
        file_put_contents('date.txt', $now);
    }

    sleep(10);
}
?>
Mais il faut voir si ton hébergeur supporte ça.
Et en cas de redémarrage du serveur, ton script s'arrêtera, il faudra le relancer.
0

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

Posez votre question
Merci avion-f16 pour cette réponse très complète.

"Malheureusement, sans les tâches CRON, cela est impossible."
Bon, visiblement je n'ai pas trop le choix...

Sinon, concernant ta simulation du système de tâches planifiées : si je comprends bien tout cela fonctionnera uniquement grâce aux internautes qui ouvriront mes pages .php du coup ? :-/

Je vais contacter mon hébergeur pour voir si je peux utiliser les cron sur le serveur utilisé.
0
avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
31 juil. 2011 à 12:40
« si je comprends bien tout cela fonctionnera uniquement grâce aux internautes qui ouvriront mes pages .php du coup ? :-/ »
Oui, sauf si tu utilises la boucle.
Celle-ci tournera à l'infini (le temps max. d'exécution est désactivé).
Il suffira de lancer une fois le fichier (via le navigateur, que tu pourras ensuite quitter).
Mais selon les hébergeurs, il n'est pas toujours possible de modifier le temps max. d'exécution (30 secondes par défaut). Et si le serveur est redémarré, le script devra être relancé manuellement.
0
Je vois, ok. Du coup c'est trop de risques : je ne peux pas me permettre de relancer le fichier dès que le serveur s'arrête ou redémarre (puisque je ne le saurais même pas).
Ok, bon ben je vais me forcer à étudier le système par crontab et 'prier' pour que mon prestataire accepte que j'édite ces fichiers.

Merci pour toutes ces indications avion-f16 ;-]
0