Demande d'aide sur la fonction system

Eléphant du PHP | 99 Messages

05 janv. 2008, 19:59

Bonsoir,

Je suis actuellement en train de tester quelque chose en php qui permet d'executer un fichier sh.

Voici la syntaxe :
<?php
$action = system('cd /home/serveurs/Unreal3.2.7/');
$action .= system('./rehash');
echo $action;
?>
celà ne fonctionne pas du tout par contre un :
<?php
$action = system('cd /home/serveurs/Unreal3.2.7/ && ls');
echo $action;
?>

Code : Tout sélectionner

CVS Changes Changes.old Config Donation INSTALL.REMOTEINC LICENSE Makefile Makefile.in README Unreal.nfo aliases autoconf badwords.channel.conf badwords.message.conf badwords.quit.conf black-list.conf config.guess config.log config.settings config.status config.sub configure curl-ca-bundle.crt curlinstall dccallow.conf doc extras help.conf include install-sh ircd.log ircd.motd ircd.pid ircd.rules ircd.tune ircdcron keys m_template.c makefile.win32 modulize networks newnet rehash server.cert.pem server.key.pem server.req.pem spamfilter.conf src ssl.rnd tmp unreal unreal.in unrealircd.conf update wircd.def wircd.def
ça affiche pourtant bien le résultat.

J'ai également essayé :
<?php
$action = system('cd /home/serveurs/Unreal3.2.7/ && sh rehash');
echo $action;
?>
Mais rien n'y fait :?

est-ce qu'une personne pourrait-elle me dire d'ou provient le soucis s'il vous plait.

En vous remerciant d'avance.

Cordialement.
Modifié en dernier par crash le 08 janv. 2008, 20:21, modifié 2 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 janv. 2008, 20:39

PHP a-t-il bien les droits d'exécution de ton shell ?

Quoi qu'il en soit, les deux appels à system() sont totalement indépendant. Tu ne peux pas changer de répertoir dans un et poursuivre dans le suivant, il te faut exécuter toutes tes commandes dans un seul appel de la fonction.

Essaye ainsi :
$action = system('sh /home/serveurs/Unreal3.2.7/rehash'); 
Je crois que tu peux passer plusieurs instructions en les séparant d'un retour à la ligne, à vérifier.
$cmd = 'cd /home/serveurs/Unreal3.2.7/';
$cmd.= "\n" . './rehash';
$action = system($cmd); 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 99 Messages

05 janv. 2008, 20:43

Re merci de ta réponse.

Aucun des deux codes fonctionnent, étrange ...

Je ne sais pas vraiment s'il a les droits d'execution, comment dois-je procéder pour faire la vérification et pour corriger ce soucis ?

En te remerciant encore.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 janv. 2008, 20:56

Bah déjà il te faut regarder les droits accordés à ton shell (avec un `ls -al` par exemple)
Il faut que php ait les droits d'exécution (x) sur le script. Tu peux modifier les droits à l'aide de la fonction chmod en définissant les droits pour chaque groupe (propriétaire, groupe, reste du monde) en donnant une valeur correspondant aux droits à associer (1=exécution, 2=ecriture, 4=lecture)
Par exemple :
> chmod 755 rehash.sh
Donne tous les droits (1+2+4) au propriétaire, et les droits en lecture et exécution (1+4) pour le groupe et le reste du monde (et donc php)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 99 Messages

05 janv. 2008, 20:59

les droits sur le fichier j'avais déjà mis en chmod 777 .... :? donc le problème n'a pas l'air de venir de là :/

En outre :

Code : Tout sélectionner

drwxr-xr-x 26 serveurs serveurs 4096 2007-12-31 17:22 . d-wx-wx--x 23 root staff 4096 2008-01-04 14:47 ..
Il y a pourtant les droits nécessaires dans le répertoire ...

Bon j'ai essayé de tester autre chose dans le même répertoire, j'ai mis mon script rehash.php et j'ai créer un fichier rehash.sh ou j'ai mis le chmod 777 dessus voici ce que contient ces deux fichiers :

rehash.php
<?php
$action = system('sh rehash.sh');
echo $action;
?>
rehash.sh

Code : Tout sélectionner

#!/bin/bash cd .. cd Unreal3.2.7 ./unreal rehash
Bon en console quand je fais ./rehash ça marche niquel mais quand j'appel la page ou il y a le rehash.php ça ne fonctionne pas j'y comprend vraiment plus rien dans la logique ça aurait du fonctionner ....

Si quelqu'un pourrait m'aider s'il vous plait ça serait sympa.

merci.

ViPHP
ViPHP | 1380 Messages

06 janv. 2008, 12:08

Redirige les messages d'erreurs éventuels vers la sortie standard pour voir où est le problème:
echo system('/home/serveurs/Unreal3.2.7/rehash 2>&1'); 
ripat

Invité
Invité n'ayant pas de compte PHPfrance

06 janv. 2008, 13:01

Re,

Merci pour ta réponse j'ai fais ce que tu m'as dis et ça me met :

Code : Tout sélectionner

/home/serveurs/Unreal3.2.7/rehash: line 2: cd: /serveurs/Unreal3.2.7: No such file or directory /home/serveurs/Unreal3.2.7/rehash: line 3: ./unreal: No such file or directory
Par contre j'ai l'impression qu'il faut le faire en deux temps, car si je fais en console :

Code : Tout sélectionner

/home/serveurs/Unreal3.2.7/rehash
ça me colle la même erreur mais en faisant comme celà en console :

Code : Tout sélectionner

cd /home/serveurs/Unreal3.2.7 ./rehash
ça fonctionne.

As-tu une autre idée s'il te plait.

merci.

Cordialement.

ViPHP
ViPHP | 1380 Messages

06 janv. 2008, 13:44

Le bash ne trouve pas ton script.

Fais ta commande en une seule ligne avec son chemin complet. Comme si tu l'exécutais depuis n'imorte quel répertoire.

Avec l'affichage des erreurs bash, tu devrais voir ce qui cloche maintenant.
ripat

Eléphant du PHP | 99 Messages

08 janv. 2008, 20:20

Merci à vous, il y avait un soucis de permission dans le /home, pour une raison de sécurité je ne l'ai pas modifier.

en vous remerciant :)