Forum de FilmDeCulte
https://forum.plan-sequence.com/

Question aux programmeurs du forum
https://forum.plan-sequence.com/question-aux-programmeurs-forum-t789.html
Page 1 sur 1

Auteur:  Delirium Tremens [ 13 Sep 2005, 12:32 ]
Sujet du message:  Question aux programmeurs du forum

Ca fait 6 mois que je me prends la tête là-dessus, alors comme y'a des têtes ici, j'vais peut-être trouvé ma soluce. Je veux envoyer un mail avec une pièce jointe tous les jours à 2h du mat'. Donc j'ai fait un script en PHP :

Code:
<?php
$boundary = "-----=".md5(uniqid(rand()));
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$header .= "\r\n";
$msg = "Ceci est un message au format MIME 1.0 multipart/mixed.\r\n";
$msg .= "--$boundary\r\n";
$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$msg .= "Content-Transfer-Encoding:8bit\r\n";
$msg .= "\r\n";
$date = date("d/m/Y");
$msg .= "Sauvegarde du $date \r\n";
$msg .= "\r\n";
$file = "fichier.gz";
$fp = fopen($file, "rb");
$attachment = fread($fp, filesize($file));
fclose($fp);
$attachment = chunk_split(base64_encode($attachment));
$msg .= "--$boundary\r\n";
$msg .= "Content-Type: application/x-gzip; name=\"$file\"\r\n";
$msg .= "Content-Transfer-Encoding: base64\r\n";
$msg .= "Content-Disposition: inline; filename=\"$file\"\r\n";
$msg .= "\r\n";
$msg .= $attachment . "\r\n";
$msg .= "\r\n\r\n";
$msg .= "--$boundary--\r\n";
$destinataire = "destinataire@gmail.com";
$expediteur   = "expediteur@gmail.com";
$reponse      = $expediteur;
mail($destinataire, "Sauvegarde de la base de données du $date", $msg,
     "Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header);
?>


Jusque là rien de compliquer et tout fonctionne, le script envoie bien le mail avec la pièce jointe et le fichier n'est pas corrompu... Maintenant le même script lancé par une tâche Cron envoie bien le mail mais par contre la pièce jointe est vide (0 octets). Alors je me suis dit que ça venait du temps max d'exécution d'apache, donc j'ai décidé de lancer le script en shell pour outrepasser cette limite, donc j'ai rajouté au début du fichier :

Code:
#!/usr/local/bin/php -q


Mais ça ne fait rien j'ai toujours le problème. Alors je me suis dit on va carrément pas passer par PHP j'ai donc fait plusieurs tests :

Code:
mail -s "sauvegarde" destinataire@gmail.com < fichier.gz 
cat fichier.gz | mail -s "sauvegarde" destinataire@gmail.com 
uuencode fichier.gz | mail -s "sauvegarde" destinataire@gmail.com 


Le premier lit le fichier et l'inclut à l'intérieur du mail donc pas en pièce jointe, le deuxième le fichier n'est pas encodé donc pas joignable et le troisième le serveur n'a pas la fonction uuencode et je ne veux pas l'installer car un peu dépassée (et que ça m'énerve de passer par une solution tierce alors que je suis sûr qu'on peut faire autrement). Je ne veux pas non plus utiliser Mutt ou autre... Donc si quelqu'un a une soluce à me proposer ou peut m'expliquer où j'ai merdé, je veux bien, à mon avis d'ailleurs c'est une connerie car logiquement le premier script doit fonctionner.

Auteur:  vimes [ 14 Sep 2005, 00:10 ]
Sujet du message: 

t'as essayé de faire ton fclose($fp) en toute fin de script ? C'est pas totalement impossible que $attachement soit lié dynamiquement au fichier et que, une foiscelui ci sorti de la mémoire, il contienne des trucs à la con...
Sinon ptet que cest les messages que tu rajoute après ton attachement qui ne correspondent pas à la norme UNICODE du style '\' est un parametre d'échappement donc bon...
Mais bon, je fais juste une analyse globale de programmeux parce que je connais pas le langage que t'utilises.

Auteur:  Delirium Tremens [ 14 Sep 2005, 09:06 ]
Sujet du message: 

vimes a écrit:
t'as essayé de faire ton fclose($fp) en toute fin de script ? C'est pas totalement impossible que $attachement soit lié dynamiquement au fichier et que, une foiscelui ci sorti de la mémoire, il contienne des trucs à la con...
Sinon ptet que cest les messages que tu rajoute après ton attachement qui ne correspondent pas à la norme UNICODE du style '\' est un parametre d'échappement donc bon...
Mais bon, je fais juste une analyse globale de programmeux parce que je connais pas le langage que t'utilises.


En fait le code en php que je donne fonctionne parfaitement, mais si il est lancé par une tâche cron la pièce jointe est vide. Je vais quand même essayer le fclose à la fin, mais j'y crois moyen... Merci qd même...

Auteur:  Delirium Tremens [ 14 Sep 2005, 10:31 ]
Sujet du message: 

Et la solution était... mettre le chemin complet du fichier car quand c'est une tâche cron php part de la racine du disque, alors que quand c'est lancé directement par apache il part du répertoire où est situé le script. Merci moi-même puisque j'ai trouvé tout seul comme un grand (et si j'avais été intelligent j'aurai trouvé en 5 minutes)...

Auteur:  vimes [ 14 Sep 2005, 14:51 ]
Sujet du message: 

ah ben *clap-clap* alors.

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/