Supprimer un cache local

  • Auteur de la discussion Auteur de la discussion kev
  • Date de début Date de début
Nouveau WRInaute
Bonjour

j'ai créer en local une recherche par API, j'ai creer un cache par jour en json dans mon localhost, (plus precisement chaque jour quand je fais appel a l'api celui ci se met dans un cache pour pouvoir y revenir dans la journée ou plus tard grace a un rechargement par date )

Je souhaiterais pouvoir affacer par exemple le premier cache créer en debut de semaine et faire sa chaque jour (donc par exemple le lundi 9 supprimerer le cache du lundi 2 et ainsi de suite pour chaque jour)

Je ne sais pas si je suis trés claire

Premiere question: est-ce possible ? et si oui comment dois-je proceder ?

En vous remerciant par avance pour votre aide
 
WRInaute accro
Si ton système de cache le permet (c'est souvent le cas), tu peux indiquer un TTL (Time To Live / durée de vie) de 1 semaine.
Sinon année + numéro de semaine comme clé et purge des caches précédents.

Si tu donnais plus d'infos sur le cache dont tu parles ce serait plus simple.
 
Nouveau WRInaute
Si ton système de cache le permet (c'est souvent le cas), tu peux indiquer un TTL (Time To Live / durée de vie) de 1 semaine.
Sinon année + numéro de semaine comme clé et purge des caches précédents.

Si tu donnais plus d'infos sur le cache dont tu parles ce serait plus simple.
Voici le code de mon cache, normalement j'avais mis une duré de 24h mais cela ne fonctionne pas

// Configuration du cache
$cacheFolder = DIR . DIRECTORY_SEPARATOR . 'cache';
if (!is_dir($cacheFolder)) {
mkdir($cacheFolder, 0777, true);
}
$cacheFile = $cacheFolder . DIRECTORY_SEPARATOR . 'sirene_' . $ENV['DEPARTEMENT'] . '' . $dateCible . '.json';
$cacheExpiration = 86400; // 24 heures
$statusMessage = "";
// On vérifie si un cache valide existe
if (file_exists($cacheFile) && (time() - filemtime($cacheFile) < $cacheExpiration)) {
$content = file_get_contents($cacheFile);
if ($content) {
$cacheData = json_decode($content, true);
$etablissements = $cacheData['data'] ?? [];
$nbTotalInsee = $cacheData['total'] ?? 0;
$statusMessage = "Données chargées depuis le cache local.";
}
}
else {
try {
do {
$data = $api->fetchEntreprises($dateCible, $curseur);
if ($curseur === '*') {
$nbTotalInsee = $data['header']['total'] ?? 0;
}
if (isset($data['etablissements'])) {
foreach ($data['etablissements'] as $e) {
$etablissements[] = $e;
}
}
$curseur = $data['header']['curseurSuivant'] ?? null;
} while ($curseur && $curseur !== '*');
if (!empty($etablissements)) {
file_put_contents($cacheFile, json_encode([
'total' => $nbTotalInsee,
'data' => $etablissements
]));
}
} catch (Exception $e) {
if (file_exists($cacheFile)) {
$cacheData = json_decode(file_get_contents($cacheFile), true);
$etablissements = $cacheData['data'];
$nbTotalInsee = $cacheData['total'];
$statusMessage = "Secours (L'API ne répond pas)";
}
}
}
 
WRInaute accro
Ca ne fonctionne pas ?
Tu dois créer un dossier de cache du jour et itérer les autres répertoires pour les supprimer.

Mais ce serait plus simple et performant avec 1 seul fichier cache (tu peux combiner les JSON en 1 seul) expiré via filemtime()
 
Nouveau WRInaute
J’ai juste un dossier nommé cache et tous le json sont créer directement dedans, actuellement dans les json je récupère les données de l'API sirene de l'INSEE, si je fusionne les json cela ne va pas être lourd ? chaque fichier cache créer le nom automatiquement par exemple celui d'aujourd'hui ce nome :

cache\sirene_11_2026-01-11.json

Chaque jour je créer un appel à l'api qui va recupérer les donné du jour -1 mois
 
WRInaute accro
Dans ce cas ce serait qd même bcp plus pratique d'enregistrer ces données dans une base de données SQL et de faire un "insert or update" en se basant sur siren/nic/siret.
 
  • Like
Reactions: kev
Nouveau WRInaute
Ok donc si je comprend bien meme en pur local je dois creer une base de donnée sql, et dans cette base je peux utiliser le Time To Live
 
WRInaute passionné
Pas tout compris où tu supprimes ton cache dans ton extrait de code...
C'est sûr qu'une base de données est un choix plus logique, après si tu n'en as pas une de déjà installée ou que tu ne connais pas le SQL je comprends que faire des fichiers peut sembler plus simple...

Si pas envie d'installer un truc lourd comme MySQL en local, une extension SQLite de PHP peut suffire pour avoir une base de données.
 
Nouveau WRInaute
Pas tout compris où tu supprimes ton cache dans ton extrait de code...
C'est sûr qu'une base de données est un choix plus logique, après si tu n'en as pas une de déjà installée ou que tu ne connais pas le SQL je comprends que faire des fichiers peut sembler plus simple...

Si pas envie d'installer un truc lourd comme MySQL en local, une extension SQLite de PHP peut suffire pour avoir une base de données.
Bonjour

j'avais mis en place $cacheExpiration = 86400; // 24 heures, en pensant que cela me supprimerais le fichier json

mais je vais regarder pour mettre une petite base de donné avec l'extention
 
WRInaute discret
A ta place j'éviterai les droits en 0777 sur ton dossier, puisque c'est du local: ne donne pas l'accès complet à tout le monde.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut