Fonctionnement de la fonction exec()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonctionnement de la fonction exec()

Re: Fonctionnement de la fonction exec()

par moogli » 28 nov. 2016, 13:49

shebang => https://fr.wikipedia.org/wiki/Shebang c'est pasclair ?
dans ton cas le 1ère ligne du fichier doit être #!/usr/bin/perl et automatiquement un ./tonfichier.pl sera éxécuté avec perl.

pour le reste je suis si ton utilisateur à le droit d'aller dans le répertorie cela ne pose pas de problème.
A priori c'est un problème de droit pour accéder au fichier.
Est tu certain que tu puisses, par exemple faire un ls de ton fichier dans le /home ?
le problème sera le même avec des chemins absolus ou relatif.

sinon je en pense pas que le /home soit une bonne idée pour les ficher 'technique'. Le mieux c'est quand même de mettre dans un coin bien identifié qui reste du dev ou autre mais pas forcément lié à l'utilisateur (déjà juste parce que l'utilisateur qui exécute le serveur web n'est, normalement, pas celui que tu devrais utiliser pour te connecter ;) ).

@+

Re: Fonctionnement de la fonction exec()

par Moiriaki » 24 nov. 2016, 18:18

Alors je vais essayer de faire avancer la discussion car j'ai fait un nouveau test :

plutôt que de faire pointer mon exec sur un script "perl /home/folder/folder2/folder3/file.pl" j'ai placé le script directement dans le même dossier que mon fichier PHP (simplement pour tester), et là l'execution du script est bien effectuée.

J'en ai déduit donc que c'était le passage par le /home que ma fonction exec() n'aimait pas, du coup est-ce que vous savez s'il est possible de passer par un chemin relatif (comme par exemple : ../../folder/folder2/folder3/file.pl) ?

Merci encore !

Re: Fonctionnement de la fonction exec()

par Moiriaki » 24 nov. 2016, 17:44

@moogli :
Merci !
Alors pour les droits d'exécution, les dossiers auxquels j'essaye d'accéder sont en 755 (donc je pense que ça devrait être bon) et par contre pour le shebang, je n'ai aucune idée de ce dont il s'agit (même après avoir regardé, j'ai l'impression que les informations sont faibles ou pas claires sur le sujet)

Re: Fonctionnement de la fonction exec()

par Moiriaki » 24 nov. 2016, 16:50

Bonjour,

merci pour ta réponse !

Alors effectivement, j'avais bien testé le 'whoami', j'ai également testé d'autres méthodes comme par exemple 'ls -f', et en mettant un echo ça me retourne bien les lignes voulues (quand j'utilise la commande shell_exec, sinon exec ne me retourne qu'une seule ligne).

En fait, la chose qui est un peu floue pour moi c'est :

admettons que dans mon fichier "file.pl", je vais chercher des informations dans une base de données, et je les affiche en html.
Est-ce que, si jamais j'effectue un exec (ou shell_exec peu importe), je peux récupérer l'affichage de la page en PERL ?

Re: Fonctionnement de la fonction exec()

par moogli » 24 nov. 2016, 16:48

salut,

regarde bien la doc de la fonction http://php.net/manual/fr/function.exec.php
si tu veux le retour il faut passer une variable en second paramètre.

Pour ce qui est de l'appel du script si celui à le bon shebang et le droit d'éxécution tu as juste à l'utiliser. sinon tes deux syntax sont correctes (pour peu qu ela première ai perl dans le path).


@+

Re: Fonctionnement de la fonction exec()

par or 1 » 24 nov. 2016, 16:34

http://php.net/manual/fr/function.exec.php
qui a comme exemple :
echo exec('whoami');
la fonction retourne quelque chose mais ne l'affiche pas par défaut.

Fonctionnement de la fonction exec()

par Moiriaki » 24 nov. 2016, 16:28

Bonjour,

je m'en remets à vous car j'ai du mal à saisir ce que retourne la fonction exec() de PHP. Je vous explique le souci :

J'ai un script PERL (déjà existant avant que j'entre dans le projet) permettant l'upload et le traitement de fichier. Il faudrait que je l'appelle via un script PHP.

J'ai testé de plusieurs façon l'execution du script PERL :
$cmd = 'perl /home/folder/folder2/folder3/file.pl';
  system($cmd);
ou encore :
exec("/usr/bin/perl /home/folder/folder2/folder3/file.pl");
A chaque fois, lorsque je fais un dump de l'execution, ça me retourne : content-type: text/html, admettons que j'ai un simple "Hello World" dans le fichier "file.pl", ça ne s'affiche pas. Peut-être que j'ai mal compris comment fonctionnait cette fonction PHP, en tout cas ce que j'aimerais c'est simplement exécuter un script via mon PHP, et retourner si possible une réponse me disant "le script s'est bien déroulé" ou "t'as fait n'importe quoi".

Pourriez-vous m'aider dessus ?
En vous remerciant par avance :)