J'ai un script PHP qui doit exécuter des programmes qui fonctionneront sur les fichiers qui ont des espaces dans les noms. La plupart des fonctions PHP pour l'exécution de commandes externes (par exemple exec()
) prennent un argument de 1 chaîne pour la ligne de commande à exécuter. Cependant, vous devez faire des choses comme escapeshellarg()
pour sécuriser vos entrées.Exécuter une commande externe en passant un tableau, avec des espaces dans les noms de fichiers
Existe-t-il un moyen d'exécuter une commande externe en PHP avec un tableau. Ainsi, plutôt que:
exec("ls -l ".escapeshellarg($filename));
Je peux aller:
exec(array("ls", "-l", $filename));
Cela signifie que je n'ai pas à vous soucier d'échapper aux arguments. Je veux éviter d'utiliser escapeshellarg()
, puisque la version que j'utilise a un bug qui supprime les caractères non-ASCII.
Java a cette fonctionnalité http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#exec%28java.lang.String[]%29
Je sais que c'est évident, mais pour toute autre personne qui vient: JAMAIS exécuter des commandes externes basées sur l'entrée de l'utilisateur. Si le script ne se trouve sur aucun serveur Web, mais vérifiez le contraire, assurez-vous de vérifier, revérifier et vérifier 5 fois de plus que personne ne peut utiliser ce script pour exécuter une commande à laquelle il n'est pas supposé. – Matchu