Récupérer une pièce jointe en PHP

Ce matin, Gmail, le service de mail de Google m'a fait une blague : une personne m'a envoyé un fichier zip en pièce jointe mais renommé en .txt, Gmail n'acceptant pas le zip.

Cette pièce jointe était bien indiquée dans la liste des messages (via une picto représentant un trombone) mais elle n'était pas présente dans le corps du message ; seul les caractères PK étant affichés en fin de message. Comment faire pour récupérer ma pièce jointe, ô combien importante à mes yeux et à ceux de mon expéditeur ?

Voici la marche à suivre :

  1. Cliquez sur le lien Autres options dans l'entête du message
  2. Cliquez ensuite sur le lien Afficher l'original
  3. Dans la fenêtre qui s'ouvre - le message tel que vous l'avez réellement reçu - rechercher un pavé de texte incompréhensible : il commence par une séquence du type : --------------020701030101070201000002 et le début indique ses propriétés (vous devriez y trouver quelque chose du genre Content-Type: text/plain; name="attachment.txt" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="attachment.txt")
  4. Copiez ce qui suit dans un fichier nommé attachment.txt
  5. Créez le script suivant :
    <?php
    // Fichier source content la pièce jointe codée en base64
    $inputFilename = 'attachment.txt';
    
    // Fichier de destination contenant la pièce jointe décodée
    $ouputFilename = 'attachment.zip';
    
    // Lecture et traitement du contenu source
    $content = join('', file($inputFilename));
    $content = str_replace("\n", '', $content);
    $content = base64_decode($content);
    
    // Ecriture du résultat
    $handle = fopen($ouputFilename, 'a');
    fwrite($handle, $content);
    fclose($handle);
    ?>
  6. Exécutez-le, et voilà, vous avez récupéré votre pièce jointe !

Posté le Tuesday 15 November 2005 dans .

Commentaires

Il n'y a aucun commentaire ; soyez le premier à déposer le vôtre.

Ajouter un commentaire

Il n'est plus possible de réagir à cette entrée directement mais si vous pensez que votre intervention peut être intéressante, envoyez-moi votre commentaire, je l'ajouterai ici en votre nom.