begin process at 2012 05 28 21:02:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Débutant(e)

 > 

fopen et


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

fopen et

samedi 30 octobre 2010 à 13:29:24 | fopen et

JackNUMBER

Bonjour à tous :)

M'étant m'y récemment au PHP j'ai voulu créer une petite automatisation de backup de base données (journalier).

Voici mon code :
Code PHP :
$db_host = "**";
$db_user = "**";
$db_pass = "**";
$db_name = "**";
$backup_name = "backup_".date(l).".sql";

system("mysqldump --host=\"".$db_host."\" --user=\"".$db_user."\" --password=\"".$db_pass."\" ".$db_name." > ".$backup_name);
system("gzip ".$backup_name);
$backup_name = $backup_name.".gz";

$open = fopen($backup_name,'a+');
fwrite($open, $backup_name);
fclose($open);

Le fichier backup_Saturday.sql.gz est bien créé mais lors du samedi suivant un backup_Saturday.sql apparait....
Je pense que ça vient de l'utilisation du mode de fopen. Mais j'en ai essayé plusieurs et a+ est celui qui me convient le plus.

Comment faire en sorte que le fichier backup_Saturday.sql ne soit pas automatiquement créé.
Merci de vos réponses =)



J'ai bien essayé en ajoutant ceci mais je n'ai pas réussi à le faire fonctionner ^^ :
$backup_name = strstr($backup_name, '.gz', true);
unlink($backup_name);
samedi 30 octobre 2010 à 20:04:59 | Re : fopen et

neigedhiver

Réponse acceptée !
Salut,

Tu as fait une erreur de syntaxe à la ligne 3 de ton message :
M'étant mis récemment au PHP

Pour concaténer plus proprement et améliorer la lisibilité, tu peux utiliser sprintf :
Code PHP :
$command = sprintf('mysqldump --host="%s" --user="%s" --password="%s" %s > %s', $db_host, $db_db_user, $db_pass, $db_name, $backup_name);
system($command);


Code PHP :
$backup_name = $backup_name.".gz";

=>
Code PHP :
$backup_name .= ".gz";



Bon concernant ton problème...
Tu ne peux pas empêcher le fichier .sql d'être créé, puisque c'est lui qui contient le backup produit par mysqldump. Par contre, si je comprends bien, lors de la première sauvegarde, le fichier backup_Saturday.sql est gzippé en backup_Saturday.sql.gz et seul ce fichier reste. Lors de la deuxième sauvegarde, le fichier .sql est toujours présent à la fin de l'opération... Est-ce que, lors de la deuxième sauvegarde, le fichier .sql.gz correspond bien à la bonne version de la sauvegarde ? As-tu regardé son contenu pour être sûr que ce n'est pas la première sauvegarde ?

Mais qu'est-ce que tu veux faire avec ce code ???
Code PHP :
$open = fopen($backup_name,'a+');
fwrite($open, $backup_name);
fclose($open);

Concrètement, tu ouvres le fichier de backup créé (le .sql.gz) et tu écris dedans, en fin de fichier le son nom, ce qui a pour conséquence de rendre le fichier archive invalide (mauvais format, ce n'est plus un gzip).
C'est vraiment ça que tu veux faire ?

J'ai un peu de mal à comprendre où tu veux en venir avec ça...

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
dimanche 31 octobre 2010 à 17:49:41 | Re : fopen et

JackNUMBER

salut neigedhiver, merci pour ta réponse.

Pour commencer :
Code PHP :
$command = sprintf('mysqldump --host="%s" --user="%s" --password="%s" %s > %s', $db_host, $db_db_user, $db_pass, $db_name, $backup_name);
system($command);
$backup_name .= ".gz";

C'est bien plus rapide à exécuter mais me donne un fichier .sql vide... (le .gz aussi du coup).

MAIS ça me créé bien un .sql dès la première exécution. Vide, certes.
J'ai vérifié, lors des exécutions suivantes le .gz était bien mis à jour.


J'ai compris mon erreur pour le fopen, fwrite, fclose. Je recommencerai plus promis
Pour la suppression du fichier .sql j'ai mis le nom en .sql dans une variable et un unlink, ça c'est bouclé.



Donc concrètement comment puis-je utiliser ton code mais d'une façon.... que ça marche quoi ^^
Merci.


dimanche 31 octobre 2010 à 21:03:17 | Re : fopen et

cod57

salut


$backup_name = "backup_".date(m_d_Y).".sql";


//w+ force la creation d'un fichier

$open = fopen($backup_name,'w+');
fwrite($open, $backup_name);
fclose($open);



puis tu peux aussi copier ton fichier dans un répertoire
annexe avec la fonction copy() pour plus de securité




dimanche 31 octobre 2010 à 21:07:05 | Re : fopen et

cod57

$backup_name = "backup_".date('m_d_Y').".sql";
je devrais me relire ... excuses
dimanche 31 octobre 2010 à 22:01:43 | Re : fopen et

neigedhiver

@Cod57 : Pffffffffff là, tu continues d'écrire le nom du fichier dans le fichier... Tu n'as pas lu la réponse que j'ai faite précédemment.

@JackNumber : Le code que je t'ai fourni fait strictement la même chose que le tiens, sauf que la chaîne de caractères représentant la commande shell est plus lisible. J'ai juste fait une erreur (d'inattention) sur $db_user que j'ai écrit $db_db_user.

Est-ce que tu as essayé en nommant ton fichier comme l'indique Cod57, c'est à dire avec la date complète au lieu du nom du jour ? L'idée est de créer un fichier portant un nom qui n'est pas déjà utilisé.

J'avoue que j'ai un peu de mal à comprendre le problème...
Est-ce que tu peux poster ton code mis à jour avec ton histoire de fopen() corrigée ?

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
lundi 1 novembre 2010 à 00:50:26 | Re : fopen et

JackNUMBER

Sans la faute de frappe ça fonctionne =)
Mais maintenant le .gz n'est plus créé, avec
backup_name .= ".gz";
comme avec
$backup_name = $backup_name.".gz";...


J'ai enlevé le fopen qui ne servait plus à rien en vérité. Enfin je crois qui ne servait plus à rien....

Code PHP :
$db_host = "***";
$db_user = "***";
$db_pass = "***";
$db_name = "***";
$backup_name = "backup_".date(l).".sql";

$command = sprintf('mysqldump --host="%s" --user="%s" --password="%s" %s > %s', $db_host, $db_user, $db_pass, $db_name, $backup_name);
system($command);
//$sql_a_delete = $backup_name;
$backup_name .= ".gz";

//unlink($sql_a_delete);


Merci de votre aide =D
lundi 1 novembre 2010 à 00:55:08 | Re : fopen et

neigedhiver

Tu n'as pas répondu à la question :

Est-ce que tu as essayé en nommant ton fichier comme l'indique Cod57, c'est à dire avec la date complète au lieu du nom du jour ?



La réponse m'intéresse ^^

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
lundi 1 novembre 2010 à 00:56:34 | Re : fopen et

neigedhiver

Le .gz n'est plus créé, parce que tu as enlevé la ligne qui le créait ;)

Code PHP :
system("gzip ".$backup_name);


--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
lundi 1 novembre 2010 à 12:07:28 | Re : fopen et

JackNUMBER

Réponse acceptée !
Ha oui, mince ! Merci pour la correction.
Donc j'ai bien un .gz qui se créé mais pas de .sql à la première exécution. Aux suivantes oui...

Concernant le nommage indiqué par Code57 et bien j'ai bien un nouveau fichier qui se créé chaque jour.
Mon but est d'avoir un fichier par jour de la semaine et donc la semaine suivante de renouveler ces sauvegardes.
Mais je commence à penser que je vais dans un premier temps supprimer le fichier GZ existant et exécuter le backup.
Ainsi, le SQL ne sera pas créé et je serai sûr que le le GZ soit la nouvelle version.

Code PHP :
$backup_name = "backup_".date(l).".sql";
unlink($backup_name.".gz");
//$backup_name = "backup_".date('m_d_Y').".sql"; 

$command = sprintf('mysqldump --host="%s" --user="%s" --password="%s" %s > %s', $db_host, $db_user, $db_pass, $db_name, $backup_name);
system($command);
system("gzip ".$backup_name);
$backup_name .= ".gz";

Tout est correct à votre avis ?

1 2

Cette discussion est classée dans : sql, db, name, fopen, backup


Répondre à ce message

Sujets en rapport avec ce message

backup de ma base qui est vide [ par ikramta ] bonjour tout le monde .je veut faire un script qui me permet de faire un backup de ma base .mais le problème ici est qu'il me donne le fichier mais av Sauvegarde Mysql en Array [ par mitch73 ] Bonjour à tous et toutes voila j'ai récupéré ce bout de code $db_name = "test"; $link = mysql_con probleme d'identification avec mysql et une page php [ par 1wxcvbn ] Bonjour, je suis entrain de réaliser une identification des utilisateurs et en fait, quand j'essaye de m'identifié, il me dit que le mot de passe est Backup sql en php [ par j3r3m067 ] Bonjour, Je cherche un moyen de faire un backup sql. J'ai ecris quelque truc mais sans succès une petite aide ne serai pas de refus. Le problème c'est aidez moi a corriger cette classe php [ par mannnourou7i ] <?php class membre { public $id ; public $nom ; public $prenom; public $adress; public $email; public erreur de ponctuation sur sql [ par anto25 ] J'ai regardé plusieurs site mais je ne comprend pas ou se trouve l'eereur de ponctuation pouvez vous m'aidez. Voici l'erreurIl semble qu'il y ait une Conversion .db en .sql [ par neoscars ] Bonjour, j'ai une question , j'aimerais créer un script pour convertir du .db en .sql j'ai trouvé une solution en commande MSDOS avec un .exe .Mais bo mettre à jour un enregistrement sql [ par rscazone ] Bonjour, J'aimerais mettre à jour un champ en particulier d'un enregistrement dans une table sql. (Le champ en question : "restaurant" dans la table " urgent svp [ par anistabbabi ] salut tousmon problème ce que je suis en train de faire une suppression multiple avec des checkbox:mais lorsque j'execute mon code il m'affiche le mes php&sql&image [ par ftsitoha ] J'ai insert une image dans ma DB est elle est bien là mais je ne réussis pas a faire apparaître sur le page " alt=" image rien" width="50" height=


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,120 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales