utilisation de exec

Eléphanteau du PHP | 34 Messages

06 janv. 2009, 18:03

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

ViPHP
ViPHP | 2287 Messages

06 janv. 2009, 18:09

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.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

ViPHP
ViPHP | 3607 Messages

06 janv. 2009, 18:42

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 ;)

ViPHP
fab
ViPHP | 2657 Messages

06 janv. 2009, 20:15

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__)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 34 Messages

07 janv. 2009, 11:53

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
@+