PHP, ce n'est pas que pour le web
\n\nQuand on dit « PHP », la plupart des gens imaginent immédiatement le fil d'actualités de Facebook, le panier d'une boutique en ligne ou le backend de WordPress. C'est logique : le langage est né comme un outil pour le web. Mais que diriez-vous si je vous disais que PHP excelle aussi dans des tâches généralement confiées à Python, Bash ou Go ? Je parle du développement multiplateforme en PHP — la création d'utilitaires qui fonctionnent aussi bien sur Windows, Linux que macOS, sans avoir à réécrire le code.
\n\nDans cet article, nous n'allons pas vous apprendre à créer des formulaires. Nous allons vous montrer comment écrire un gestionnaire de fichiers en console, un analyseur de logs et un système de surveillance de dossiers — le tout en PHP pur, sans aucun serveur web. Vous apprendrez à contourner les pièges des différents systèmes d'exploitation et à écrire un code qui s'exécute partout de la même manière.
\n\nPrêts ? Ouvrez votre terminal et préparez-vous à être surpris par les possibilités du bon vieux PHP.
\n\nPourquoi PHP pour des tâches multiplateformes ? Trois arguments solides
\n\nAvant de plonger dans le code, voyons pourquoi utiliser PHP pour des utilitaires desktop et serveur. Python a Django et Flask, Node.js a Express. Pourquoi PHP ?
\n\n- \n
- Disponibilité omniprésente. PHP est installé sur presque tous les hébergements mutualisés et sur 80% des serveurs dans le monde. Si vous écrivez un outil d'administration, il y a de fortes chances que PHP soit déjà présent sur la machine cible. Pas besoin d'installer un runtime supplémentaire. \n
- Faible barrière à l'entrée pour les développeurs web. Vous connaissez déjà la syntaxe, les fonctions de manipulation de chaînes et de tableaux. Vous n'avez pas besoin d'apprendre un nouveau langage pour automatiser les tâches courantes sur le serveur. \n
- Bibliothèque standard riche. PHP dispose de tout le nécessaire pour travailler avec les fichiers, les processus, les sockets réseau et les archives zip. Et les extensions PECL comme
paralleloupthreadsajoutent le multithreading. \n
Bien sûr, PHP n'est pas idéal pour les applications GUI (bien qu'il existe PHP-GTK). Mais pour les utilitaires console et les démons, c'est un outil mature et stable. Voyons comment écrire ce type de code correctement.
\n\nLes bases du code PHP multiplateforme
\n\nLa première chose à retenir : les séparateurs de chemins. Sous Linux, c'est /, sous Windows, c'est \\. PHP fournit la constante DIRECTORY_SEPARATOR, mais il est encore plus pratique d'utiliser la fonction DIRECTORY_SEPARATOR ou la barre oblique universelle / — Windows la comprend parfaitement depuis PHP 7+.
Gestion correcte des chemins
\n\n<?php\n// Mauvais — barre oblique codée en dur\n$path = '/var/log/errors.log'; // Plantera sur Windows\n\n// Bien — utilisation de DIRECTORY_SEPARATOR\n$path = 'var' . DIRECTORY_SEPARATOR . 'log' . DIRECTORY_SEPARATOR . 'errors.log';\n\n// Excellent — utilisation de / et de realpath()\n$path = __DIR__ . '/logs/errors.log';\necho $path; // Fonctionne sur les deux OS\n?>\n\n\nDeuxième point important : l'encodage. Sous Windows, la console utilise souvent CP866 par défaut, tandis que les scripts PHP sont en UTF-8. Pour afficher des caractères accentués sous Windows, utilisez la fonction mb_convert_encoding() ou définissez l'encodage via chcp 65001 au début du script.
Exemple : lecture multiplateforme d'un fichier
\n\n<?php\nfunction lireFichierLog(string $nomFichier): string {\n // Vérifier l'existence du fichier\n if (!file_exists($nomFichier)) {\n throw new RuntimeException("Le fichier $nomFichier est introuvable");\n }\n \n // Lire le contenu\n $contenu = file_get_contents($nomFichier);\n \n // Déterminer l'OS et convertir l'encodage pour l'affichage\n if (PHP_OS_FAMILY === 'Windows') {\n $contenu = mb_convert_encoding($contenu, 'CP866', 'UTF-8');\n }\n \n return $contenu;\n}\n\necho lireFichierLog('logs/app.log');\n?>\n\n\nCréation d'un utilitaire concret : surveillance des modifications dans un dossier
\n\nÉcrivons quelque chose d'utile — un script qui surveille un dossier et af