3 votes

mysqldump (utilisant PHP exec) ne vidant pas le fichier mais pas d'erreur

Je ne savais pas si c'était une question sur le SO ou le SF, mais j'ai pensé que c'était le meilleur endroit. Je m'excuse si ce n'est pas le cas !

J'utilise mysqldump via PHP exec mais cela ne semble pas fonctionner. Le code que j'utilise est le suivant

<?php
exec('mysqldump -u DB_USER -pDB_PASS DB_NAME > /tmp/test.sql');
?>

Lorsque j'exécute ce script, je ne reçois aucune erreur dans error_log, mais je n'obtiens pas de dump dans /tmp. Je ne suis pas sûr de la cause de ce problème. Je ne sais pas s'il essaie de faire un dumping dans /tmp relatif à l'endroit où le fichier PHP est exécuté, ce qui est le résultat que je recherche, ou s'il fait un dumping dans un /tmp ailleurs ? Ou est-ce que je fais une autre erreur ?

13voto

JazZ Points 221

La solution que j'ai trouvée est d'exécuter la commande dans un sous-shellShell et d'afficher ensuite le fichier stderr a stdout . De cette manière, le $output est bien peuplée.

c'est-à-dire :

exec("(mysqldump -u$username -p$password $database $tables > $dump_name) 2>&1", $output, $result);

var_dump($result);
echo "<br />";
var_dump($output);
echo "<br />";

Le résultat :

int(6)

array(1) { [0]=> string(46) "mysqldump : Couldn't find table : "nom_de_table"" }

J'espère que cela vous aidera !

1voto

OliviervdAkker Points 55

Le chemin que vous avez déclaré ( /tmp/test.sql ) est un chemin absolu, de sorte que le script se comporte correctement. En ce qui concerne le système de fichiers linux / définit le répertoire racine et il existe toujours un /tmp répertoire. Peut-être devriez-vous prendre un peu de temps pour comprendre Aperçu général du système de fichiers Linux .

L'arborescence du système de fichiers commence au niveau du tronc ou de la barre oblique, indiqué par la lettre une barre oblique (/). Ce répertoire, qui contient tous les répertoires et fichiers sous-jacents, est également appelé répertoire racine ou "la racine" du système de fichiers.

En ce qui concerne le transfert du fichier dans un répertoire relatif, vous pouvez essayer d'utiliser l'option ./tmp/test.sql o tmp/test.sql si le tmp se trouve dans le répertoire actuel à partir duquel le script est exécuté.

Vous pouvez également jeter un coup d'œil à ce document : https://stackoverflow.com/questions/17407664/php-include-relative-path

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X