Bonjour
Grâce à la communauté j'ai réussi à mettre en place sous le www de mon site un script PHP qui sauvegarde ma base de données (dump chez OBH) et me l'envoie par mail au format gz (gzwrite($this->gz_fichier, $sql);).
J'ai essayé de respecter les différents charsets possibles, mais si les accents sont bons suite à l'import de ma base en local par phpmydamin avec charset "iso-8859-1", il manque toutes les apostrophes. Je mets ci-dessous en abrégé le code que j'ai utilisé pour l'export et l'envoi par mail, si quelqu'un pouvait me dire ce que j'ai fait de faux, ce serait vraiment sympa :
$boundary = md5(uniqid(time()));
$entete = "From: $from_mail \n";
$entete .= "X-Priority: 1 \n";
$entete .= "MIME-Version: 1.0 \n";
$entete .= "Content-Type: multipart/mixed; boundary="$boundary" \n";
$entete .= " \n";
$message = "–$boundary \n";
$message .= "Content-Type: text/html; charset="iso-8859-1" \n";
$message .= "Content-Transfer-Encoding:8bit \n";
$message .= "\n";
$message .= "–$boundary \n";
$message .= "Content-Type: $typepiecejointe; name="$nom_file" \n";
$message .= "Content-Transfer-Encoding: base64 \n";
$message .= "Content-Disposition: attachment; filename="$nom_file" \n";
$message .= "\n";
mail($mail_to, $subject, $message, $entete);
Merci d'avance
Peut-être un soucis avec gzwrite(), essaie avec l'argument $length
As-tu décompressé ton sql pour vérifier ?
Bonjour
Je n'ai pas réussi à décompresser la pièce jointe, j'ai une erreur 7zip. Peut-être que je n'utilise pas le bon soft pour ça ? J'ai aussi essayé de chercher quelle valeur mettre à l'argument $length pour suivre ton conseil, mais je n'ai pas trouvé de réponse qui marche. Ma ligne de commande est : gzwrite($this->gz_fichier, $sql);
Dois-je mettre un chiffre constant ou une variable ?
Merci pour cette piste,
Hum, mauvais signe car 7zip sait très bien décompresser les gz.
$lenth est un entier égal au nombre d'octets du fichier.
Plus d'informations sur le site http://php.net/manual/fr/function.gzwrite.php
Regarde aussi du côté de magic_quotes si tu utilises une vieille version de php (version 7 recommandée).
Je me doute que c'est mauvais signe. En local j'utilise PHP 5.5.12. Chez OVH je ne sais pas. Je vais upgrader demain et te tiens au courant. Pour le nombre d'octets, je le trouve comment vu qu'il varie d'une sauvegarde à une autre ? Ouh la la pas facile pour une débutante en PHP. Mais j'apprécie beaucoup tes réponses.
Pour le nombre d'octets, je le trouve comment vu qu'il varie d'une sauvegarde à une autre ?
Tu as la fonction filesize()
Bonjour Daniel60
j'ai intégré cette fonction à mon gzwrite et ça fonctionne :
gzwrite($this->gz_fichier, $sql, $length(filesize($this->gz_fichier)));
Par contre ça ne résoud pas mon problème d'apostrophe.
Mais j'ai réussi à décompresser ma base reçue par email, et je vois qu'à chaque fois qu'il y avait une apostrophe dans un contenu d'article, il en met deux (résultat il en affiche aucun dans le site en local), mais pas dans les titres de mes articles joomla qui sont affichés comme il faut.
Est-ce une piste ?
Bonne journée
gzwrite($this->gz_fichier, $sql, $length(filesize($this->gz_fichier)));
Plutôt gzwrite($this->gz_fichier, $sql, filesize($this->gz_fichier));
Maintenant il serait bon de vérifier comment sort le dump d'origine...
Il n'aime pas du tout la modification sans $length ![]()
Warning: filesize() expects parameter 1 to be a valid path, resource given in www/sauvauto.php
Le fichier sql.gz n'est pas le dump d'origne ?
Oups, je voulais dire gzwrite($this->gz_fichier, $sql, filesize($sql));
Non je parle du fichier sql non compressé (je ne sais pas comment tu as fais ton dump, mais n'essaie pas de compresser un fichier déjà compressé !)
J’ai peut-être une piste.<br />J’ignore comment Joomla traite les apostrophes mais je sais que certains CMS et traitement de texte font de la correction typographique automatique, et remplacent l’apostrophe droite du clavier (`'`) par l’apostrophe courbe qu’on trouve dans les livres (`’`). Il se trouve que c’est un symbole unicode (http://www.fileformat.info/info/unicode/char/2019/index.htm) qui n’a pas de représentation dans le charset `iso-8859-1`. Certains systèmes le remplacent par une apostrophe droite, d’autres le font simplement disparaître.<br /><br />Bon d’accord, ça explique la cause du problème mais ça ne fournit pas de solution.<br /><br />Le charset du mail ne devrait pas poser de problème étant donné que la pièce jointe est transférée en base 64. Dans le doute, tu peux vérifier le code source du message dans ton client mail ou webmail, en trouvant dans les menus une commande qui devrait ressembler à « afficher la source » ou « afficher l’original » (ça dépend des clients). Une chaîne en base 64 contient des chiffres, des lettres majuscules et minuscules, les symboles `+` et `/` ainsi qu’éventuellement un ou deux signes `=` à la fin. Si tu vois autre chose c’est que la conversion en base 64 ne s’est pas faite correctement.<br /><br />En l’état actuel, on ne sait pas à quel moment se produit la corruption du zip. Tu peux vérifier si le fichier est valide avant l’envoi du mail, avec une fonction comme http://php.net/manual/fr/function.mime-content-type.php `mime_content_type`. Ce n’est peut-être pas la fonction la plus adaptée, mais je ne connais pas bien la zlib et je n’ai pas trouvé de fonction permettant de contrôler une archive.<br /><br />Pour éviter tout problème de charset lors de l’exportation de ta base, tu peux demander à ce que les chaînes soient représentées en hexadécimal, ça rend le dump plus lourd mais ça évite bien des tracas.<br /><br />Je ne vais pas te conseiller de convertir le charset de ta base car c’est un parcours semé d’embûches, mais pour tes futurs projets, choisis `utf-8`, c’est l’encodage universel ;)
J’ignore comment Joomla traite les apostrophes mais je sais que certains CMS et traitement de texte font de la correction typographique automatique, et remplacent l’apostrophe droite du clavier (') par l’apostrophe courbe qu’on trouve dans les livres (’)
Très intéressant.
Bonjour à Daniel60 et Watilin
En fait, l'idée du dump à importer directement sans passer par le script d'envoi de fichier gz par mail, m'a permis de réaliser qu'il y avait bien une erreur dans le script php puisque tout s'affichait normalement. Je suis donc repartie de zéro en commençant par la fonction dump toute seule et en étoffant le fichier php petit à petit.
Maintenant tout fonctionne. Après ré-exament du 1er script que j'avais trouvé, il y avait effectivement un paragraphe de traitement des apostrophes que je n'avais pas compris donc pas pris le temps de détailler vu que je ne connais pas le php.
Pour d'autres chez OVH, je peux confirmer que le charset utf8 marche pour l'export et le réimport par phpmyadmin.
Merci beaucoup à vous deux pour vous être penchés sur mon problème. Bonne continuation
Super ! Pour quelqu'un qui ne connait pas le php tu t'en es bien sorti
Bonne continuation ![]()
Ah c'est gentil parce que quelle galère ! je dois mettre 3 jours à faire ce qui devrait prendre quelques heures mais bon, j'avance quand même..