commande exec() & droits utiisateurs

Romeo
Invité n'ayant pas de compte PHPfrance

20 févr. 2006, 11:05

Un de mes scripts doit faire un dump de ma BDD avec la commande ci dessous.

Code : Tout sélectionner

exec("mysqldump -u login -pmdp mabdd > sauegarde.sql");
Or, il semblerait que je n'ai pas les droits necessaires.

C'est un fichier php que j'apelle à partir de mon navigateur
http://mondomaine/fichier.php

Comment puis je autoriser la commande "exec" sur ce fichier ??
Je suis sur un serveur dédié.

Merci
Romeo

ViPHP
ViPHP | 1380 Messages

20 févr. 2006, 11:29

Est-ce un problème de droits ou bien de disponibilité de exec()?

Quel message d'erreur as-tu?
ripat

Romeo
Invité n'ayant pas de compte PHPfrance

20 févr. 2006, 11:48

Humm... bonne question!!


En plus je n'ais meme pas de message d'erreur qui s'affiche car le serveur est en production.

Cette commande fonctionne tres bien en ssh en tant que root.

Et la j'essaie en httpd avec un user qui n'a visiblement pas les droits.

Romeo

ViPHP
ViPHP | 1380 Messages

20 févr. 2006, 11:57

Tu dois forcément avoir un message d'erreur de PHP. Essaye avec un error_reporting(E_ALL); avant ta commande.

Ca ne va pas solutionner ton problème mais confirmera ton diagnostic de problème de droits.

Puisque tu as un accès ssh, crée un fichier sauvegarde.sql et chmod le à 777.
ripat

Romeo
Invité n'ayant pas de compte PHPfrance

20 févr. 2006, 12:05

Voici mon code

Code : Tout sélectionner

<? error_reporting(E_ALL); exec("mysqldump -u LOGIN -pMDP maBDD> /sauvegarde/maBDD.sql"); ?>
Aucune erreur en retour, et la sauvegarde n'a pas été éfféctuée.

Romeo
Invité n'ayant pas de compte PHPfrance

20 févr. 2006, 12:08

Par contre je viens de voir ça :

Code : Tout sélectionner

display_errors = Off
Comment puis modifier cette clause pour le fichier concerné ??

Romeo
Invité n'ayant pas de compte PHPfrance

20 févr. 2006, 12:22

On dirait qu'il ignore totalement cette ligne commande "exec(....)"

<?php

ini_set(display_errors, 1);
error_reporting(E_ALL);
exec("mysqldump -u LOGIN -pMDP maBDD> /sauvegarde/maBDD.sql");

echo "OK";
?>

Le message OK s'affiche, mais toujours pas de dump :cry:

ViPHP
ViPHP | 1380 Messages

20 févr. 2006, 12:25

Que te donne :
exec("mysqldump -u LOGIN -pMDP maBDD> /sauvegarde/maBDD.sql", $out, $statut);
echo $statut;
ripat

Romeo
Invité n'ayant pas de compte PHPfrance

20 févr. 2006, 12:40

Ca renvoie 1

Invité
Invité n'ayant pas de compte PHPfrance

20 févr. 2006, 12:46

Tres etrange, en fait il renvoi rien.

Tout depend ou je place la ligne de code.

Désolé des réponses un peu rapide.

Donc pour résumer,
exec("mysqldump -u LOGIN -pMDP maBDD> /sauvegarde/maBDD.sql", $out, $statut); 
echo $statut;
=>> ne renvoi RIEN

ViPHP
ViPHP | 1380 Messages

20 févr. 2006, 13:26

Apparemment, la fonction exec() ne renvoie pas les erreurs éventuelles de l'exécution d'une commande. Il va falloir finasser avec linux et rediriger stderr vers stdout. Pas très beau mais nécessité fait loi!
exec("mysqldump  2>&1 -u LOGIN -pMDP maBDD> /sauvegarde/maBDD.sql", $out, $statut); 
echo '<pre>';
print_r($out);
echo '</pre>';
ripat

Invité
Invité n'ayant pas de compte PHPfrance

20 févr. 2006, 14:01

Ah ca répond.
Voila ce que ca renvoi.

Code : Tout sélectionner

Array ( [0] => sh: /sauvegarde/mabase.sql: No such file or directory )

Romeo
Invité n'ayant pas de compte PHPfrance

20 févr. 2006, 14:08

Je pensais qu'il créérait éventuellement le fichier de sortie. Apparament non.

si je crée le fichier mabase.sql avec les permissions en écriture c'est bon
=> /sauvegarde/mabase.sql

ViPHP
ViPHP | 1380 Messages

20 févr. 2006, 14:18

Je pensais qu'il créerait éventuellement le fichier de sortie. Apparament non.

si je crée le fichier mabase.sql avec les permissions en écriture c'est bon
=> /sauvegarde/mabase.sql
Il créera bien le fichier de sortie mais pas le répertoire si celui-ci n'existe pas.

Encore une illustration de l'importance de ne pas travailler à l'aveugle et de bien lire les messages d'erreur.

J'ai appris quelque-chose: exec() de php ne renvoie pas, de manière standard, le stderr de linux. Dommage.
ripat

Romeo
Invité n'ayant pas de compte PHPfrance

20 févr. 2006, 14:28

Le dossier "sauvegarde" est bien créé.

C'est le fichier de sortie dans ce dernier cas qu'il ne veut pas créer.
Ce qui me pose quand même un nouveau probleme car le non du fichier de sortie reprendra la date du jour ex : sauvegarde_20-02-2006.sql

Ok bon ça avance.

Si j'ai bien compris, je dois utiliser cette syntaxe pour l'instruction exec()

Code : Tout sélectionner

exec(MA COMMANDE 2>&1 PARAMETRES, $out, $status);