commande exec() & droits utiisateurs

Romeo
Invité n'ayant pas de compte PHPfrance

20 févr. 2006, 14:37

OK, impecable

Tout est rentré dans l'ordre.

Merci pour ta patience Ripat.

Maintenant je m'aperçoit que le temps d'éxécution est un peu long du fait de la taille de la BDD.

As tu une solution pour que l'éxécution du script php se termine tout en laissant l'exec(...) continuer ?

ViPHP
ViPHP | 1380 Messages

20 févr. 2006, 16:05

Code : Tout sélectionner

exec(MA COMMANDE 2>&1 PARAMETRES, $out, $status);
Uniquement si tu souhaites voir ce que le bash te renvoie comme erreur. Normalement, exec() assignera à $out, la sortie standard (stdout). Si, par exemple tu veux lister tes fichiers avec la commande ls, si tu fais:
exec('ls', $out);
Le résultat (stdout) sera stocké dans le tableau $out. Mais si une erreur se produit, il n'y aura aucune stdout mais bien une sortie vers stderr du shell Linux. Or, celui-ci n'est pas renvoyé à PHP pour une raison qui m'échappe.

En ajoutant à la commande à exécuter l'instruction 2>&1 on redirige le stderr vers le stdout ce qui rend le message d'erreur du shell disponible dans PHP (dans le $out de mon exemple). Mais plus la sortie standard! Tu me suis toujours? C'est pourquoi ce n'est à utiliser que pour débuger.
As tu une solution pour que l'éxécution du script php se termine tout en laissant l'exec(...) continuer ?
Oui:
exec("mysqldump -u LOGIN -pMDP maBDD> /sauvegarde/maBDD.sql &");
L'ajout de & devrait exécuter le dump en arrière-plan et rendre la main à l'exec() de PHP.
ripat

Petit nouveau ! | 4 Messages

20 févr. 2006, 16:18

Vraiment formidable.

Tout fonctionne.

J'ai bien suivi et appris plein de chose avec tous tes conseils.

Merci encore

Romeo

ViPHP
ViPHP | 1380 Messages

20 févr. 2006, 16:52

... appris plein de chose avec tous tes conseils.
Moi aussi. Assez étonné d'ailleurs que la commande exec(), system() ou passthru() ne récupère pas le stderr du shell. J'ai peut-être raté quelque-chose!

Je vois que tu t'es inscrit. Bienvenue au club!
ripat