Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Appel d'un programme dont le chemin contient des espaces

1 réponse
Avatar
Jean-Marc Molina
Bonjour,

Je ne parviens pas à appeler un programme Windows dont le chemin contient
des espaces depuis un script PHP. Le problème se pose-t-il aussi pour Linux
ou d'autres OS ?

Répertoire de travail : "C:\test copy"

Script PHP "copy.php" :
<?php

system ('"C:\test copy\mycopy" /B "C:\test copy\folder1\file1" "C:\test
copy\folder2\file2"');

?>

Batch mycopy.bat :
copy %1 %2 %3

À l'exécution du script j'ai le message d'erreur suivant :
« C:\>php "test copy\copy.php
'C:\test' is not recognized as an internal or external command,
operable program or batch file. »

Si je remplace le répertoire « test copy » par « test », sans espace ou «
test_copy », aucun problème.

Le problème ne se pose pas si la ligne de commande à exécuter n'a pas de
paramètre entre guillemets :

<?php

system ('"C:\test copy\mycopy" /B');

?>

Notezz que ces lignes de commande fonctionnenet parfaitement à l'extérieur
du script PHP, on peut les utiliser directement dans une fenêtre DOS.

En quels caractères doit-on transformer les espaces ? Par exemple dans une
URL on doit transformer les espaces en « %20 », parfois les \ en / ou \\...

Pour terminer, ceci n'est qu'un exemple, mon but est d'appeler un programme
situé dans le répertoire « "C:\Program Files" ». Sur la page
<http://fr.php.net/manual/en/function.system.php> du manuel quelqu'un
propose une solution pour appeler le programme htpasswd mais ses paramètres
n'ont pas de guillemets.

--
Jean-Marc.

1 réponse

Avatar
Jean-Marc Molina
Jean-Marc Molina a écrit/wrote :
Je ne parviens pas à appeler un programme Windows dont le chemin
contient des espaces depuis un script PHP. Le problème se pose-t-il
aussi pour Linux ou d'autres OS ?


Il s'agit en fait d'un bogue présent dans la bibliothèque C. La solution
consiste à exécuter la commande via l'application cmd et en utilisant
l'option /C :

<?php

$cmd = "..."; // Votre commande
system ("cmd /C "$cmd"");

?>

--
Jean-Marc.