2008-11-02 23 views

Répondre

5

Chaque système de base de données est livré avec un programme permettant de vider son contenu.

Vous pouvez simplement appeler ce programme à partir de PHP en utilisant system() ou shell_exec().

Par exemple, si vous utilisez PostgreSQL avec permis Ident authentication et que vous voulez vider la base de données test directement sous forme de texte SQL au navigateur, il est aussi simple que:

 
<?php 
header('Content-type: text/plain'); 
system('pg_dump test'); 
?> 

Lorsque vous utilisez MySQL avec l'utilisateur de base de données et le mot de passe stockés dans ~/.my.cnf, il est également très simple:

 
<?php 
header('Content-type: text/plain'); 
system('mysqldump test'); 
?> 

Cependant, ne le faites pas:

 
<?php 
header('Content-type: text/plain'); 
system('mysqldump -utestuser -ptestpassword test'); 
?> 
parce que la transmission d'un mot de passe en ligne de commande l'argument est very insecure.

+0

Ai-je raison de penser que vous pourriez aussi l'exécuter via une requête SQL? Certains fournisseurs d'hébergement partagé n'autorisent pas les appels système. – Ross

+0

Si vous avez un fournisseur d'hébergement qui n'autorise pas system() ou shell_exec(), vous devriez passer à un fournisseur sérieux. Une telle restriction n'ajoute pas vraiment de sécurité. C'est juste ennuyant les clients. – vog

0

C'est un processus assez compliqué. Je vous recommande d'utiliser phpmyadmin ou similaire.

0

Si la sauvegarde d'une base de données "conforme à ANSI SQL" est possible et admirable, vous rencontrerez toujours des problèmes de portabilité. Le plus évident est que si le format de sauvegarde/restauration de MySQL est assez rapide, il le fait principalement en utilisant une extension non-standard vers SQL. Vous ne pouvez donc pas passer la sauvegarde à PostGresql: cela ne fonctionnera pas. En fait, PostGresql est également assez lent à gérer une énorme quantité d'instructions INSERT. Son format de vidage natif utilise sa propre instruction SQL personnalisée optimisée pour l'insertion d'une grande quantité de données à la fois.

Questions connexes