unixmaniax.frLE CARNET DES SYSTÈMES UNIX

Développement / Développement

PHP : moderniser les petits scripts du wiki

Dates françaises, galerie d’images et outil réseau : remplacer les raccourcis anciens par validation, échappement HTML et bibliothèques adaptées.

Afficher une date française sans tableau de mois manuel

Le script original découpait la chaîne SQL puis remplaçait le mois avec un switch. Avec l’extension intl, IntlDateFormatter gère la langue et le format. Validez d’abord la date : les parseurs peuvent normaliser une valeur impossible au lieu de la rejeter. Définissez explicitement le fuseau.

L’exemple attend une date stricte YYYY-MM-DD. Si vous voulez « 1er » au lieu de « 1 », c’est une règle éditoriale supplémentaire à traiter explicitement ; ne supposez pas qu’un format numérique l’ajoute.

$input = "2026-09-07";
$zone = new DateTimeZone("Europe/Paris");
$date = DateTimeImmutable::createFromFormat("!Y-m-d", $input, $zone);
if (!$date || $date->format("Y-m-d") !== $input) {
    throw new InvalidArgumentException("Date invalide");
}
$format = new IntlDateFormatter("fr_FR", IntlDateFormatter::NONE,
    IntlDateFormatter::NONE, "Europe/Paris", null, "d MMMM yyyy");
echo htmlspecialchars($format->format($date), ENT_QUOTES, "UTF-8");

Distinguer fichier local, URL et texte HTML

La galerie d’origine associait images et vignettes présentes dans un dossier. Conservez une liste de formats autorisés, validez les fichiers et générez les vignettes avec une bibliothèque adaptée. Un nom de fichier est une donnée, pas du HTML : échappez les libellés et encodez correctement les segments d’URL.

Si vous ajoutez le téléversement, vérifiez taille, contenu et dimensions, stockez hors d’un répertoire exécutable et attribuez des noms maîtrisés. Ne réutilisez pas directement un chemin fourni par la requête pour lire un fichier du serveur.

Sortir les scans réseau des requêtes web

L’ancien exemple lançait ping, nslookup et nmap depuis PHP sur des adresses internes. Une version actuelle doit définir les réseaux autorisés, un contrôle d’accès, des délais et des limites de concurrence. Un utilisateur ne doit pas pouvoir choisir arbitrairement une cible ou injecter des arguments dans une commande shell.

Placez les contrôles longs dans une tâche dédiée, avec résultats consultables et journalisation. L’absence de réponse ICMP ne démontre pas qu’un serveur est arrêté. Pour diagnostiquer un service, vérifiez le protocole et le port dont vous avez réellement besoin.

Choisir la documentation de la bonne version

Le manuel PHP reste le premier point de contrôle pour les paramètres et changements de comportement. Vérifiez les extensions chargées sur le serveur web et sur le client CLI : leurs configurations peuvent différer. Les anciens tutoriels utilisant des API supprimées ou dépréciées ne doivent pas être transposés à l’identique.

Ajoutez des cas d’essai : date invalide, caractère accentué, nom de fichier contenant des guillemets, dossier absent et commande réseau expirée. Ce sont des conditions normales à gérer explicitement, pas seulement des erreurs rares.

Sources & documentation

Consultez la documentation correspondant à vos versions avant d’appliquer les exemples. Les commandes illustrent la méthode ; elles ne remplacent pas un essai dans votre environnement.