Fonction system();

Fermé
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 - 7 mai 2013 à 14:40
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 - 7 mai 2013 à 16:28
Bonjour tout le monde,

Voilà j'ai un problème que je ne comprend pas moi-même. J'ai un fichier nommé exec.sh contenant un script shell. Lorsque je double-clic dessus, des programmes s'exécutent afin d'analyser des fichiers. Un premier programme, écrit en C++, s'exécute et me crée deux fichiers .cvs. Ensuite, un deuxième programme, écrit en R, s'exécute et me crée un fichier pdf à partir des deux fichiers précédents. Ce fichier pdf contient 4 graphiques.

Moi, je souhaite mettre en ligne ce programme (je l'ai déjà fait pour un autre programme). Pour cela, je crée une interface web et sur l'une de mes pages php, j'exécute le fichier exec.sh à l'aide de la fonction system().

De cette façon:
system("./exec.sh");


Mon problème c'est que cela ne fonctionne pas. Le programme écrit en C++ ne s'exécute pas et donc le programme R n'ont plus. Du coup, je n'ai pas mon fichier pdf. J'ai déjà réalise ce genre d'interface avec un autre programme mais c'était le programme R qui ne s'exécutais pas. Du coup, on m'a conseillé d'importer une library R dans mon script shell.

De cette façon:
export DYLD_LIBRARY_PATH=/Library/Frameworks/R.framework/Resources/lib/x86_64/libR.dylib:DYLD_LIBRARY_PATH


De cette façon, mon programme s'exécute parfaitement. Du coup, j'ai fait la même chose pour ce nouveau programme. Mais bon, cette fois le problème vient de C++.

Du coup, je me demandais si je devais pas importer un library de ce genre mais pour c++? Sinon, je ne voit pas d'où peut provenir le problème.

Le truc c'est que mon programme c++ s'exécute parfaitement lorsque l'on double clic sur exec.sh. Et je ne sais pas pourquoi mais avec la fonction system() il ne s'exécute pas.
Du coup, le problème doit venir du php, mais à partla library je n'ai aucune idée d'ou le problème peut venir.

Quelqu'un peut m'aider ou me donner son avis s'il vous plait !

Merci d'avance.

Voici mon script shell, exec.sh, si sa peut aider:
cd /Users/nom/programme/
echo "" > chrono.txt
echo "" > reflex.txt
ls /Volumes/Data/RawData | grep dat | cut -d"." -f1 >> reflex.txt
 
acc=0
k=0
for j in 'cat reflex.txt'; do
    echo "$j" | ./traitement&
    k=$(($k+1))
    acc=$(($acc+1))
    if [ $k = 1 ]; then
                k=0
        wait
    fi
done
wait
 
export DYLD_LIBRARY_PATH=/Library/Frameworks/R.framework/Resources/lib/x86_64/libR.dylib:DYLD_LIBRARY_PATH
R CMD BATCH --vanilla /Users/nom/programme/src/Graphique.R log.txt
 
path='pwd'
cd /Volumes/Data/Output
zip $path\/outputs.zip OutputR/*.csv OutputCherryPick/*.csv OutputPdf/*.pdf
cd $pwd
rm /Volumes/Data/Output/OutputR/*.csv /Volumes/Data/Output/OutputCherryPick/*.csv /Volumes/Data/Output/OutputPdf/*.pdf

6 réponses

Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2013 à 14:49
Bonjour,

Le serveur sur lequel est déployé ton application, permet-il l'exécution de la fonction "system" ?

Cordialement,
Gigatrappeur
0
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 1
7 mai 2013 à 15:15
oui car je l'ai déjà fait avec une autre interface pour un autre programme. Sinon le serveur que j'utilise est MAMP.
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2013 à 15:38
Et je suppose que ton autre programme tourne sur le même serveur ?

Es-ce que tu as des logs ? Peut-être que ton bash ne trouve pas ton programme.

Il faudrait tester si cela vient de "system" ou si cela vient de ton bash.
Pour cela, il suffit de créer un bash qui contient juste un "hello world!" de récupérer le résultat. Si "system" te retourne "hello world!", c'est que cela ne vient pas de "system". Mais bien de ton bash.

Peut-être as-tu le safe-mode d'activé : https://www.php.net/system, du coup vérifie que safe_mode_exec_dir pointe bien dans le dossier ou est présent ton bash.

Cordialement,
Gigattrappeur
0
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 1
7 mai 2013 à 16:15
Oui ils tournent tout les deux sur le même serveur.

J'ai fait le test comme conseiller. Et j'ai bien "Hello world" qui s'est affiché. Du coup, le problème vient du bash.

Quand à safe_mode_exec_dir, il est bien activé et il ne pointe sur aucun dossier.
J'ai ceci:
; When safe_mode is on, only executables located in the safe_mode_exec_dir
; will be allowed to be executed via the exec family of functions.
safe_mode_exec_dir =


Mais bon, c'est mieux pour moi qu'il ne pointe sur aucun dossier car mon autre programme est dans un autre dossier.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2013 à 16:20
Ok. bah désolé, je n'ai pas la moindre idée de pourquoi cela ne fonctionne pas.
Pose la question sur un forum pour les bash, peut-être auront-ils une réponse/solution à t'apporter.

Cordialement,
Gigatrappeur
0
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 1
7 mai 2013 à 16:28
ok merci.
0