Executer un script shell

Eléphanteau du PHP | 25 Messages

19 févr. 2016, 01:12

Bonjour,

je souhaite exécuter le script shell "script.sh" présent dans le même répertoire que le fichier php l’exécutant.
J'ai testé avec la fonction exec et system, mais le script ne se lance pas.
if( exec('./script.sh') ) {   echo "OK";    }
else {  echo "marche pas" ;     }
L'utilisateur nginx est "http" et le groupe "http". En effet quand je crée un fichier via PHP, il se crée avec l'user "http" (et non pas www-data) j'ai vérifié également dans /etc/passwd.

J'ai donc fais ceci :

chmod 777 script.sh
chown http:http script.sh

Le script se lance bien manuellement, mais pas à l'appel de ma page php.

Merci d'avance pour votre aide ! :wink:

Avatar du membre
Mammouth du PHP | 1609 Messages

19 févr. 2016, 01:21

Bonsoir, ça echo quoi ? OK ou marche pas ? question bête mais la fonction exec est-elle bien autorisée par la configuration du serveur ?
Sinon les droits ont l'air bons. Un peu brutale le 777, tu peux rester sur un chown ton_user:http avec chmod 775.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

19 févr. 2016, 01:23

Le echo répond "marche pas" ;).
Et oui je suis d'accord c'est brutal le 777, je modifierai quand mon problème sera réglé.

Je vais essayer de me renseigner sur la configuration nginx pour executer des fonctions. Si quelqu'un à la solution, je veux bien :).

J'ai également testé la fonction shell_exec, meme resultat !

Eléphanteau du PHP | 25 Messages

19 févr. 2016, 01:31

Pour info, mon fichier "/etc/php/php.ini" contient la variable disable_functions, mais celle ci est configuré à NULL (enfin aucune valeur).
Donc le php ne semble pas bloquer cette fonction.

Avatar du membre
Mammouth du PHP | 1609 Messages

19 févr. 2016, 01:32

Et la commande fait quoi ? t'es sur qu'elle ne s'est pas exécutée ? c'est pas juste un problème de retour du exec ? (sensé retourner la dernière ligne du résultat de la commande, alors si la dernière ligne est 0 ^^)

EDIT je viens de tester chez moi et pas de problème avec exec.php :
<?php
echo exec('./hello.sh');
hello.sh (en 775 avec mon_user:mon_user) :

Code : Tout sélectionner

echo HELLO
La page php affiche HELLO
Modifié en dernier par Saian le 19 févr. 2016, 01:40, modifié 5 fois.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

19 févr. 2016, 01:36

Je suis certain à 100% que le script n'est pas exécuté.
En réalité je n'ai pas besoin de valeur de retour, je veux juste que le script s'execute et face son job, ce qu'il ne fait pas ^^

Eléphanteau du PHP | 25 Messages

19 févr. 2016, 01:40

Réponse suite à ton EDIT :

Tu es sous apache ou nginx ?

Avatar du membre
Mammouth du PHP | 1609 Messages

19 févr. 2016, 01:42

Sous Apache.

Si tu exécutes le script php en ligne de commande ça fonctionne ou pas ?
Si ça fonctionne, le problème vient du serveur web.

EDIT tu as rien dans le log d'erreur nginx ? peut être une piste...
Peut être tu peux vérifier le safe_mode aussi (qu'il aurait fallu vérifier en premier ^^).
Note: Lorsque le safe mode est activé, vous pouvez uniquement exécuter des programmes qui se situent dans le dossier défini par safe_mode_exec_dir. Pour des raisons pratiques, il n'est actuellement pas permis d''avoir le composant .. dans le chemin de l'exécutable.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

19 févr. 2016, 01:52

Comment executer ma page php en ligne de commande ? ^^

Rien dans le fichier error.log de nginx

Apparement le safe_mode a été abandonné depuis PHP 5.4.0 (http://php.net/manual/fr/ini.sect.safe-mode.php), mais j'ai tout de même vérifié, je n'ai aucune ligne safe_mode sauf pour le sql à l'état OFF.

Pour info j'ai testé en executant ton script hello.sh, ça marche pas :/ (chown + chmod bien sur). Le script :

#!/bin/sh
echo "HELLO"
exit 0

EDIT : version PHP 5.5.31

Avatar du membre
Mammouth du PHP | 1609 Messages

19 févr. 2016, 01:56

Pour exécuter le script php en ligne de commande, c'est simplement :
php script.php
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

19 févr. 2016, 01:59

Au lieu d'executer le script php, il m'affiche le contenu de mon fichier fichier x).

Avatar du membre
Mammouth du PHP | 1609 Messages

19 févr. 2016, 02:00

Genre il manque la balise <?php en haut du fichier ? ^^
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

19 févr. 2016, 02:04

Ah non pardon il l'execute bien (la page PHP), autant pour moi :p

Bon bah on a une partie de l'explication, ça affiche :

[...]
sh: ./hello.sh: not found
<font color='white'> marche pas </font>
[...]


[EDIT] : si je fais un exec('ls') ça fonctionne, mais pas pour mon script. why ? (j'ai la tête en feu haha)
[EDIT²] : je confirme que le fichier php et le fichier .sh sont dans le meme repertoire ... je comprend pas pourquoi il répond qu'il ne le trouve pas O_O

Avatar du membre
Mammouth du PHP | 1609 Messages

19 févr. 2016, 02:09

Oui car ton script c'est ./script.sh non ? La fatigue ;D
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

19 févr. 2016, 02:12

Oui en effet j'ai du tapé "script.sh" au lieu de "./script.sh"

Mais ça change rien .. il m'affiche "marche pas" u_______u"