Aller au contenu

ftp_exec()

Comprendre la fonction PHP ftp_exec()

Ce tutoriel explique la fonction historique ftp_exec(), pourquoi elle a été supprimée et comment exécuter des commandes à distance en toute sécurité dans les versions modernes de PHP.

Qu'est-ce que ftp_exec() ?

La fonction ftp_exec() était une fonction intégrée à PHP qui vous permettait d'exécuter une commande sur un serveur FTP distant. Elle acceptait auparavant deux paramètres :

  1. ftp_stream : L'identifiant de connexion renvoyé par la fonction ftp_connect().
  2. command : La commande que vous souhaitez exécuter sur le serveur FTP.

La fonction renvoyait une valeur booléenne. Si l'exécution de la commande réussissait, elle renvoyait true. Sinon, elle renvoyait false.

Important : ftp_exec() dépendait de la prise en charge de la commande SITE EXECUTE par le serveur FTP. En raison de risques de sécurité majeurs, cette fonctionnalité a été désactivée par défaut sur la plupart des serveurs FTP modernes (comme vsftpd et ProFTPD). Plus important encore, ftp_exec() a été dépréciée dans PHP 5.3.0 et supprimée dans PHP 7.0.0, ce qui la rend complètement indisponible dans les versions modernes de PHP.

Syntaxe de ftp_exec()

La syntaxe historique de la fonction ftp_exec() était la suivante :

Syntaxe de ftp_exec()

php
bool ftp_exec ( resource $ftp_stream , string $command )

(Remarque : Cette fonction acceptait historiquement un identifiant de connexion de type resource. La classe OOP FTP\Connection a été introduite dans PHP 8.0, après que ftp_exec() ait déjà été supprimée.)

Exécution sécurisée de commandes à distance

Puisque ftp_exec() a été supprimée et que le protocole FTP ne propose pas d'exécution sécurisée de commandes, il est préférable d'utiliser des bibliothèques basées sur SSH. L'extension ssh2 ou phpseclib sont les approches standard pour les versions modernes de PHP.

Utilisation avec l'extension ssh2

php
<?php

// Set up an SSH connection
$conn = ssh2_connect('ftp.example.com', 22);
if (!$conn) {
    die("Could not connect to server.");
}

// Login with SSH credentials
if (!ssh2_auth_password($conn, 'username', 'password')) {
    die("SSH login failed.");
}

// Execute a command
$stream = ssh2_exec($conn, 'ls -al');
if ($stream === false) {
    die("Failed to execute command.");
}

// Read output
$output = stream_get_contents($stream);

// Close the connection
ssh2_disconnect($conn);

Dans cet exemple, nous établissons une connexion SSH à l'aide de la fonction ssh2_connect(). Nous nous authentifions ensuite avec ssh2_auth_password(). Enfin, nous exécutons une commande avec ssh2_exec() et fermons la connexion avec ssh2_disconnect().

Gestion des erreurs dans l'exécution à distance moderne

Il est important de gérer correctement les erreurs lors de l'exécution de commandes à distance. Si la fonction renvoie false, cela signifie que la commande n'a pas pu être exécutée pour une raison quelconque. Voici un exemple de gestion des erreurs :

Gestion des erreurs dans ssh2_exec()

php
<?php

$stream = ssh2_exec($conn, 'ls -al');
if ($stream === false) {
    echo "Failed to execute the command.\n";
} else {
    echo "Command executed successfully.\n";
}

Dans cet exemple, nous vérifions la valeur de retour de la fonction ssh2_exec(). Si elle est false, nous affichons un message d'erreur ; sinon, nous affichons un message de succès.

Conclusion

La fonction ftp_exec() a été dépréciée dans PHP 5.3.0 et supprimée dans PHP 7.0.0 en raison de vulnérabilités de sécurité et de l'absence d'exécution sécurisée de commandes via FTP. Pour l'exécution de commandes à distance dans les versions modernes de PHP, utilisez toujours des solutions basées sur SSH comme l'extension ssh2 ou phpseclib.

Pratique

Quel est l'objectif de la commande exec FTP dans PHP ?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.