Bonjour à tous.
Après 2-3 heures de recherches, j'en reviens a vous poser une question au sujet de la commande exec de PHP.
Voici la situation:
OS : Windows XP
But : Executer un programme dans un folder différent du working directory.
Solution ensagée : Spécifier le chemin absolu du répertoire
Ex:Problème : L'execution du programme ne fonctionne pas si on ne l'execute pas à partir du répertoire courant. La raison : ce dernier fait appel à deux fichiers de configurations présents dans deux repertoires.
Code : Sélectionner tout - Visualiser dans une fenêtre à part cd ..\..\..\executable_path\executable_name -arg..
Voici l'arborescence du programme
Si l'on execute le programme à partir du repertoire courant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 executable_path/ | | file_config1 | | -- server/ | | | -- bin / executable_name | | | | -- config / | | | | file_config2
==> Marche sans problème!
Code : Sélectionner tout - Visualiser dans une fenêtre à part executable_path/server/bin/executable_name -args..
Si on l'éxecute d'un repertoire différent:
==> Erreur, il ne trouve pas les fichiers de config
Code : Sélectionner tout - Visualiser dans une fenêtre à part dir1/dir2/executable_path/server/bin/executable_name -args..
Fin du contexte.
Donc pour résoudre ce problème, je pense qu'il serait intéressant de se placer dans le répertoire ou se trouve l'exécutable (executable_path/server/bin/) puis de le lancer.
Sous Unix, cela n'aurais pas posé de problème. Mais sous Windows.. je ne trouve aucun moyen d'executer deux commandes avec la fonction exec!
J'ai tenté divers moyen permettant de représenter deux commandes distinctes (en banalisant les anti-slash bien sur):
Mais aucune ne marche (cela ne m'étonne pas vraiment).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 exec("cd ..\..\..\executable_path\server\bin \r\n exec_name -args"); exec("cd ..\..\..\executable_path\server\bin; exec_name -args");
Ma question est donc de savoir comment faire pour spécifier un CRLF qui correspond à un retour à la ligne. Ainsi je pourrais passer deux commandes dans la fonction exec :-).
Merci d'avance pour vos réponses, idées, etc. ;-)
Partager