Page 1 sur 1

utilisation de exec

Posté : 06 janv. 2009, 18:03
par jduv
Bonjour à tous,
J'ai besoin de lancer un programme fait en fortran depuis un script php.
Le répertoire contenant l'executable est stocké sur le serveur sous la racine du site.
Le truc c'est que l'appel du script doit ce faire depuis un repertoire précis (un repertoire inférieur à l'executable),
j'ai donc placé un fichier prog.php dans ce repertoire qui contient :
 exec('../mon_prog');
si j'appel cette page
(http://mon_site/prog/prog.php)
depuis mon navigateur, le programme est bien executé,

mais si je fait l'appel depuis un autre page en faisant qlq chose comme
include 'prog/prog.php';
ou
require 'prog/prog.php';
rien ne se passe :?: et je ne comprend pas pourquoi
J'ai aussi essayer avec shell_exec mais sans succés.

Quelqu'un à t'il une idée sur le pourquoi ?

Merci d'avance

Posté : 06 janv. 2009, 18:09
par Calimero
Bonjour,

Si tu appelles un chemin relatif sur ton serveur, il est nécessaire de bien maîtriser le répertoire d'éxécution courant.

Pour cela, fais un
<?php echo getcwd() ?>
juste avant la ligne exec() pour visualiser quel est le répertoire courant de php, puis relance tes tests. Tu verras que ce n'est tout simplement pas le même, ce qui explique ton souci.

Posté : 06 janv. 2009, 18:42
par jojolapine
Regarde du côté des variables SERVER, ça te permettra d'éxécuter ton script depuis n'importe quel dossier
(genre DOCUMENT_ROOT pour la variable ;) )
A voir aussi la fonction realpath(), fait des tests et tu y arriveras, j'ai confiance ;)

Posté : 06 janv. 2009, 20:15
par fab
Le plus simple est d'utiliser dans ton fichier qui fait appel au programme en fortant
dirname(__FILE__); 
ainsi tu auras TOUJOURS le répertoire dans lequel se trouve le fichier prog.php ( si j'ai bien compris ) même si celui-ci est inclu dans un autre fichier :)


PS : Si tu utilises PHP 5.3.0 il existe la constante __DIR__ qui est le parfait équivalent de dirname(__FILE__)

Posté : 07 janv. 2009, 11:53
par jduv
Bonjour à tous,

Merci pour vos réponses, je m'en suis sorti en utilisant la méthode de fab le
dirname(__FILE__);
J'ai donc placé ce code dans le repertoire depuis lequel doit se faire l'appel du programme à executer
//on stocke le repertoire courant pour pouvoir y revenir ensuite
$rep=getcwd();

//on change le dossier courant dans celui d'appel
chdir(dirname(__FILE__));

//execution
exec('../mon_prog');

//on revient dans le repertoire initial
chdir($rep);
:D
Il ya surement d'autres méthodes mais pour le moment celle-ci fonctionne et me convient bien

Encore merci
@+