PHP exec directement sur bash/ terminal

ddolku Messages postés 6 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 14 septembre 2010 - 13 sept. 2010 à 15:53
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 - 15 sept. 2010 à 08:32
Bonjour,

J'essaye d'executer un script PHP dans le shell.
Cela fonctionne mais la ligne dans le php d'execution exec ne fonctionne pas.

voici ma commande :

/usr/bin/php /var/www/vhosts/xxx.com/httpdocs/ff.php

Réponse du terminal :

sh: /ls: not found

Voici le contenu de mon script PHP :

$test = exec("ls");
mysql_query("UPDATE info SET file='$test'");

J'attend beaucoup de votre réponse, je vous en remercie par avance.

Cordialement

6 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
13 sept. 2010 à 20:40
Salut,

Plusieurs points :
1. Vérifie donc ta variable d'environnement PATH
2. Est-ce que ton ls est véritablement ce que tu veux faire ? vérifie bien la sortie, surtout avec l'utilisation de exec().
3. Pourquoi ne pas utiliser scandir() et ses amies ?
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
14 sept. 2010 à 08:13
oui j'aurais cité le point 1 en premier. A défaut il y a le get_include-path qui peut te renseigner.
S.
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
14 sept. 2010 à 15:00
Salut,

Pour tout dire, il n'est pas rare que le PATH ne soit effectivement pas renseigné lors de l'exécution de scripts : cette variable est définie dans le script profil de l'utilisateur (.profile, .bash_rc, etc) et n'est exécuté QUE lors de la connexion d'un utilisateur (même pas avec un simple su, il faut rajouter le tier pour forcer la restauration de l'environnement de l'utilisateur).

Mais bon, pour ce genre de traitement, je suis convaincu que les fonctions natives de PHP sont LARGEMENT suffisantes... Un script shell qui ne fait rien d'autre que lister des fichiers ne sert pas à grand chose... Pour lister des fichiers avec find, grep et leurs copains, je comprendrais, mais là...

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
ddolku Messages postés 6 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 14 septembre 2010
14 sept. 2010 à 15:20
Merci beaucoup pour toutes ces réponses.
L'erreur était tout simplement dans la configuration du php.ini du cli.
Merci encore pour votre réactivité.

Cordialement.
0

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

Posez votre question
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
15 sept. 2010 à 00:33
Salut,

oui j'aurais cité le point 1 en premier. A défaut il y a le get_include-path qui peut te renseigner.

Heu,... il n'y a pas vraiment de rapport entre le PATH de l'environnement et l'include-path de PHP.

Pour tout dire, il n'est pas rare que le PATH ne soit effectivement pas renseigné lors de l'exécution de scripts : cette variable est définie dans le script profil de l'utilisateur (.profile, .bash_rc, etc) et n'est exécuté QUE lors de la connexion d'un utilisateur (même pas avec un simple su, il faut rajouter le tier pour forcer la restauration de l'environnement de l'utilisateur).

Attention, tu confonds deux choses distinctes :
1. Les informations utilisées lors d'un login afin d'initialiser certaines variables d'environnement et autres choses de ce genre. On trouve généralement ces renseignements dans les fichiers /etc/login.defs (GNU/Linux) ou /etc/login.conf (*BSD). Ce fichier est commun à tous les utilisateurs.
2. Les fichiers de configurations du shell. Des fichiers généraux (exemple : /etc/profile, /etc/bash.bashrc, /etc/csh.cshrc, /etc/csh.login, etc) aux fichiers de préférences de chaque utilisateur (exemples : ~/.bashrc, ~/.bash_profile, ~/.login, ~/.cshrc, ~/.tcshrc), ce sont des fichiers propres à chaque shell qui seront interprétés par ce dernier à son lancement (et en fonctions des manières de lancer le shell, souvent certains fichiers seront pris en compte et d'autres pas).

Bien entendu, les fichiers de configuration du shell ont tendance à écraser la conf par défaut (ainsi sur ma Debian /etc/profile écrase le PATH mis par /etc/login.defs), et ce n'est parce qu'un shell est lancé qu'il y a forcément login d'un utilisateur.

Un peu de lecture de man sur ce sujet :
login 1 (Debian, FreeBSD)
login.defs 5
login.conf 5
bash 1
tcsh 1
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
15 sept. 2010 à 08:32
Heu,... il n'y a pas vraiment de rapport entre le PATH de l'environnement et l'include-path de PHP.

Hélas PHP est tellement permissif que je me dis: Pourquoi pas ? LOL !!
J'aime ce langage, mais quand on le pousse un peu (surtout dans les interactions système).. on a souvent des surprises.
S.
0
Rejoignez-nous