Automatisation & Tâches planifiées (Crons)
NGZ Ads inclut deux scripts de tâches planifiées (crons) situés dans le dossier cron/. Ces scripts peuvent être déclenchés automatiquement chaque jour par le système d'exploitation, ou manuellement via le navigateur pour des tests.
Les deux scripts disponibles
1. cron/expire-ads.php — Expiration des annonces
Ce script parcourt les annonces dont la date d'expiration est dépassée et les bascule en statut expired. Si les notifications d'expiration sont activées, un e-mail est envoyé au déposant.
Il gère également les alertes préventives : un e-mail d'avertissement est envoyé N jours avant la date d'expiration (configurable dans les paramètres).
Fréquence recommandée : une fois par jour, de préférence la nuit (ex : 02h00).
2. cron/daily-report.php — Rapport quotidien d'activité
Ce script génère et envoie par e-mail un rapport d'activité journalier à l'administrateur du site. Il contient :
| Donnée | Description |
|---|---|
| Annonces actives | Nombre total d'annonces en ligne |
| Nouvelles annonces | Annonces publiées dans la journée (▲/▼ vs la veille) |
| Annonces expirées | Passées en statut expired dans la journée |
| Annonces supprimées | Passées en statut deleted dans la journée, avec la liste détaillée (titre + ID) |
| Variation nette | Nouvelles − (supprimées + expirées) = évolution réelle des actives |
| Utilisateurs | Total inscrits + nouvelles inscriptions du jour (▲/▼ vs la veille) |
Le rapport est disponible en HTML (mise en page soignée) ou en texte brut selon le paramètre Format des e-mails dans l'administration.
Fréquence recommandée : une fois par jour, le matin (ex : 08h00).
Configuration dans l'administration
Rendez-vous dans Administration → Paramètres → onglet Email.
Token secret Cron
Tous les scripts cron sont protégés par un token secret. Sans ce token, une requête HTTP vers le script retourne une erreur 403 Forbidden.
Générez un token aléatoire via le bouton ⟳ dans la section Expiration & Notifications, puis copiez-le.
Ne communiquez jamais ce token publiquement. Traitez-le comme un mot de passe.
Paramètres du rapport quotidien
| Paramètre | Valeur |
|---|---|
| Activer le rapport | Active/désactive l'envoi quotidien |
| Langue du rapport | Français 🇫🇷 ou Anglais 🇬🇧 |
| Destinataire | L'e-mail de contact du site (onglet Site) |
Format des e-mails
Le menu déroulant Format des e-mails sortants (section Email Format) contrôle le format de tous les e-mails sortants :
- HTML — mise en forme enrichie avec couleurs et tableaux (par défaut)
- Texte brut — e-mail simple, meilleure compatibilité avec certains clients
Paramètres d'expiration (script expire-ads.php)
| Paramètre | Description |
|---|---|
| Envoyer des notifications d'expiration | Active les e-mails lors des expirations |
| Jours d'alerte avant expiration | Envoie un avertissement N jours avant la date limite |
| Expiration des annonces (jours) | Durée de vie par défaut d'une nouvelle annonce |
Préférence de langue e-mail par utilisateur
Chaque utilisateur peut choisir la langue dans laquelle il reçoit ses e-mails (notifications d'expiration, alertes, etc.) depuis son profil → section Préférences.
| Option | Description |
|---|---|
| 🇫🇷 Français | E-mails reçus en français (défaut) |
| 🇬🇧 English | E-mails reçus en anglais |
Cette préférence est indépendante de la langue d'affichage de l'interface.
Mise en place sur un serveur Linux (production)
Méthode CLI (recommandée)
Éditez la crontab de l'utilisateur serveur (www-data, apache, ou votre utilisateur dédié) :
crontab -e
Ajoutez les deux lignes suivantes en adaptant les chemins :
# Expiration des annonces — tous les jours à 02h00
0 2 * * * /usr/bin/php /var/www/html/cron/expire-ads.php >> /var/log/ngzads-expiry.log 2>&1
# Rapport quotidien — tous les jours à 08h00
0 8 * * * /usr/bin/php /var/www/html/cron/daily-report.php >> /var/log/ngzads-report.log 2>&1
Vérifiez le chemin de PHP avec which php ou php -v.
Méthode HTTP (hébergements mutualisés)
Si vous n'avez pas accès à la crontab système, la plupart des hébergements proposent un planificateur de tâches dans leur panneau de contrôle (cPanel, Plesk, etc.). Configurez-y une requête HTTP périodique vers les URLs suivantes :
https://votre-site.com/cron/expire-ads.php?token=VOTRE_TOKEN_SECRET
https://votre-site.com/cron/daily-report.php?token=VOTRE_TOKEN_SECRET
Remplacez VOTRE_TOKEN_SECRET par la valeur affichée dans Administration → Paramètres → Expiration & Notifications → URL Cron.
Sur certains hébergements, utilisez
curlouwgetdans la crontab :
> curl -s "https://votre-site.com/cron/expire-ads.php?token=TOKEN" > /dev/null
>
Mise en place sur MAMP (développement local)
MAMP ne fournit pas de planificateur intégré. Deux options :
Option 1 — Crontab macOS
crontab -e
# Expiration — chaque jour à 02h00
0 2 * * * /Applications/MAMP/bin/php/php8.3.9/bin/php /Applications/MAMP/htdocs/claude/ngzads/NGZADS/cron/expire-ads.php >> /tmp/ngzads-expiry.log 2>&1
# Rapport — chaque jour à 08h00
0 8 * * * /Applications/MAMP/bin/php/php8.3.9/bin/php /Applications/MAMP/htdocs/claude/ngzads/NGZADS/cron/daily-report.php >> /tmp/ngzads-report.log 2>&1
Vérifiez que macOS a bien autorisé le terminal à accéder aux fichiers (Préférences Système → Sécurité → Accès complet au disque).
Option 2 — Déclenchement manuel via navigateur (test)
Collez l'URL Cron affichée dans l'administration dans votre navigateur. La réponse JSON confirme l'exécution :
{
"success": true,
"sent": true,
"to": "admin@monsite.com",
"lang": "fr",
"format": "html",
"stats": {
"totalActive": 142,
"newAdsToday": 5,
"deletedToday": 1,
"expiredToday": 2
}
}
Tester les crons en ligne de commande
Vous pouvez aussi exécuter les scripts directement dans un terminal sans nécessiter le token (le mode CLI bypasse la vérification HTTP) :
# Sur un serveur Linux
php /var/www/html/cron/expire-ads.php
php /var/www/html/cron/daily-report.php
# Sur MAMP
/Applications/MAMP/bin/php/php8.3.9/bin/php /Applications/MAMP/htdocs/claude/ngzads/NGZADS/cron/expire-ads.php
/Applications/MAMP/bin/php/php8.3.9/bin/php /Applications/MAMP/htdocs/claude/ngzads/NGZADS/cron/daily-report.php
La sortie console résume le résultat :
[2026-04-06 08:00:01] Daily report sent → admin@monsite.com (lang:fr, format:html, active_ads:142, new_ads:5, users:87)
[2026-04-06 02:00:03] Expiry check complete — expired: 2, warned: 1
Sécurité
| Bonne pratique | Détail |
|---|---|
| Token aléatoire long | Utilisez le générateur intégré (32 caractères aléatoires) |
Fichier .htaccess | Le dossier cron/ contient un .htaccess qui refuse l'accès direct sans paramètre |
| Régénérez le token | Si vous suspectez une compromission, changez le token dans les paramètres |
| Logs | Tous les envois d'e-mails sont tracés dans logs/mails.log (accessible depuis Administration → Paramètres → Journaux) |
Récapitulatif
| Script | Quand l'exécuter | Déclencheur |
|---|---|---|
expire-ads.php | Tous les jours à 02h00 | CLI ou HTTP + token |
daily-report.php | Tous les jours à 08h00 | CLI ou HTTP + token |
Conseil : commencez par tester chaque script manuellement (navigateur ou CLI) avant de configurer la crontab, afin de vous assurer que l'e-mail arrive bien et que les paramètres SMTP sont corrects.