Airfield Cam

La météo du terrain, en un coup d'œil avant de partir.

La webcam de votre terrain d'aviation.

Votre caméra pousse déjà ses photos par FTP ? Cette page les affiche : la dernière image en direct, et le timelapse rejouable de la dernière heure pour voir d'où vient le temps. Rien à compiler, rien à administrer.

PHP 8, zéro dépendance, zéro build, pas de cron. On dépose les fichiers sur un hébergement mutualisé et ça tourne. Libre, sous licence AGPL-3.0.

Fonctionnalités

Quatre choses, bien faites.

Le périmètre est volontairement court : ni comptes utilisateurs, ni flux vidéo temps réel, ni détection de mouvement. Ce que fait la page, elle le fait sans réglage.

  • Direct

    La dernière image reçue, rafraîchie toute seule, avec un bandeau d'alerte explicite si la caméra se tait. On ouvre la page, on sait.

  • Timelapse

    La dernière heure rejouée en accéléré : lecture/pause, vitesses ×1 à ×8, navigation image par image, curseur. Vitesse et boucle sont mémorisées d'une visite à l'autre.

  • URL stable

    latest.jpg renvoie toujours l'image la plus récente : de quoi l'afficher dans une appli tierce, un écran d'accueil de club ou un tableau de bord.

  • Ménage automatique

    Les images au-delà de la rétention sont supprimées à la volée, pendant les requêtes. Sans cron : le disque d'un mutualisé ne se remplit pas.

Aperçu

Deux modes, une seule page.

Interface sobre et responsive, faite main, sans framework. Thème clair ou sombre selon le réglage du système.

Mode Live : la dernière image de la caméra, avec son horodatage et les boutons de rafraîchissement et de téléchargement.
Live — la dernière image, son heure de prise de vue, et le téléchargement à nom horodaté.
Mode Timelapse : le rejeu de la dernière heure, avec curseur de navigation, contrôles de lecture et sélecteur de vitesse.
Timelapse — le rejeu de la dernière heure, avec les contrôles de lecture et le curseur de navigation.
Fonctionnement

La caméra dépose, PHP affiche.

Aucune base de données : l'arborescence des fichiers est la base de données, et le nom du fichier porte l'heure de la prise de vue.

  1. La caméra pousse en FTP

    Un snapshot toutes les ~30 secondes, dans snap/AAAA/MM/JJ/. Testé avec une Reolink ; toute caméra respectant le format convient.

  2. Le nom du fichier fait foi

    cam_01_20260611193004.jpg : l'heure affichée vient de , jamais de la date système du fichier, faussée par l'upload. Un fichier hors format est ignoré en silence — c'est la première chose à vérifier si la page reste vide.

  3. PHP sert, et fait le ménage

    La page lit le dossier du jour, sert la dernière image et la liste de la fenêtre courante. Au passage, elle supprime ce qui a dépassé la rétention : pas de cron à demander à l'hébergeur.

Installer

Ce qu'il faut avoir sous la main.

  • PHP 8.0+ — n'importe quel hébergement mutualisé récent.
  • Apache avec mod_rewrite — le .htaccess fourni porte l'essentiel de la sécurité ; sans lui, l'application refuse délibérément de démarrer plutôt que de s'ouvrir.
  • Une caméra capable de pousser des JPEG horodatés par FTP.
  • Pas de Composer, pas de npm, pas de base, pas de cron.

Le dossier snap/ est une zone d'écriture partiellement hors de votre contrôle

C'est la caméra qui y dépose des fichiers, par FTP. Le .htaccess livré n'y sert qu'un chemin conforme au contrat de nommage, et refuse l'exécution de tout PHP qui s'y trouverait — extensions alternatives et casse comprises. Le raisonnement complet, et la checklist à dérouler une fois en ligne, sont dans la documentation.

Revue de sécurité · Checklist de mise en production