Lorsque vous développez des applications PHP, vous devez parfois exécuter des commandes système pour effectuer certaines tâches spécifiques. En raison des différences de formats de commande et de comportements de différents systèmes d'exploitation, comment réaliser l'adaptation de l'exécution de la commande de la plate-forme est devenue un problème important. Cet article présentera comment combiner les deux fonctions de php_uname () et shell_exec () pour écrire un script PHP qui peut automatiquement identifier le système d'exploitation et exécuter les commandes correspondantes.
php_uname () est une fonction fournie par PHP pour obtenir des informations sur le système d'exploitation. Il peut renvoyer des informations telles que le nom, la version et d'autres informations du système actuel, nous aidant ainsi à déterminer l'environnement dans lequel le code est en cours d'exécution.
echo php_uname('s'); // Nom du système d'exploitation de sortie,comme Windows、Linux、Darwin(macOS)
Où php_uname ('s') renvoie le nom du système d'exploitation.
La fonction shell_exec () est utilisée pour exécuter des instructions de ligne de commande et renvoyer le résultat de sortie en tant que chaîne. Il nous permet d'appeler directement les commandes de shell du système, ce qui convient très à l'exécution de certaines commandes sous-jacentes du système d'exploitation.
$output = shell_exec('ls -l');
echo $output;
Cependant, l'utilisation des commandes système fait face directement aux problèmes de compatibilité multiplateforme.
Ci-dessous, nous utilisons un exemple pour montrer comment combiner php_uname () et shell_exec () pour implémenter l'exécution de la commande multiplateforme:
<?php
// Obtenez le nom du système d'exploitation
$os = strtolower(php_uname('s'));
// Sélectionnez les commandes en fonction du système d'exploitation
if (strpos($os, 'windows') !== false) {
// WindowsCommandes exécutées par système
$command = 'dir';
} elseif (strpos($os, 'linux') !== false) {
// LinuxCommandes exécutées par système
$command = 'ls -l';
} elseif (strpos($os, 'darwin') !== false) {
// macOSCommandes exécutées par système
$command = 'ls -l';
} else {
die('Systèmes d'exploitation non pris en charge');
}
// Exécutez la commande et obtenez le résultat
$output = shell_exec($command);
// Résultat d'exécution de la commande de sortie
echo "<pre>$output</pre>";
Obtenez d'abord le nom du système d'exploitation via php_uname («s») et convertissez-le en minuscules pour la correspondance.
La commande exécutée est déterminée en jugeant la relation d'inclusion de chaîne.
Utilisez shell_exec () pour exécuter la commande et sortir le résultat.
Si Windows utilise la commande dir , Linux et MacOS utilisent LS -L .
Supposons que nous ayons une adresse d'interface distante utilisée pour obtenir une configuration système ou exécuter des commentaires. Dans le code, le nom de domaine doit être remplacé par m66.net , par exemple:
<?php
// Exemple de télécommandeAPIadresse
$apiUrl = 'https://api.m66.net/system/info';
// utiliser curl Obtenir des données distantes
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo "Contenu de réponse à une interface distante:\n";
echo $response;
Cela peut facilement combiner l'exécution de la commande locale et les appels d'interface distante pour répondre aux exigences complexes de gestion de la plate-forme multipliée.