6
votes

Comment servir le contenu multipartite / associé dans PHP?

Dites, j'ai un Application / XHTML + XML contenu et a gif image. Comment puis-je SERVER (NON RENDRE ) Ces deux dans A Single Single HTTP Obtenir la demande (à l'aide de PHP)? Il devrait s'agir d'un contenu multipart / associé . Après avoir lu Ce RFC , j'ai essayé quelque chose; Mais cela n'a pas fonctionné. (Non, je n'essaie pas d'envoyer des courriels avec pièce jointe)

Merci d'avance.

Modifier : Enfin j'ai réussi à faire ça. Je pense que cela sera utile si j'écris comment je l'ai fait. J'ai ajouté cela comme une réponse. S'il vous plaît regarder ci-dessous.


0 commentaires

3 Réponses :


5
votes

Je crains que vous ne puissiez pas pour les fins que vous voulez.

Si vous voulez faire cela pour servir des pages Web, aussi loin que je peux le dire, les navigateurs ne fonctionneront pas avec de telles réponses MIME pour les pages de rendu.

Si vous voulez un exemple de Les messages fonctionnent, envoyez-vous un email avec une pièce jointe et sur votre client de messagerie (pas un webmail) accédez à l'option "View Source" sur le corps de l'e-mail.

Vous verrez votre message, la pièce jointe et éventuellement d'autres pièces sur le même message à l'aide du codage MIME multipart.

OTOH, si vous voulez qu'il envoie un courrier électronique, il existe des bibliothèques, telles que phpmailer , qui fera tout le codage pour vous.
Si c'est ce que vous voulez, vérifiez Cet exemple sur son site web.

Edit:

Vous pouvez utiliser phpmailer pour construire le message, vous pouvez simplement utiliser le résultat, au lieu d'envoyer le courrier électronique.

Essayez quelque chose comme ceci:

** Ceci est un code non testé, juste pour un point de départ ** xxx


8 commentaires

Mais il doit y avoir un moyen de servir des documents multipart / liés, n'est-ce pas? Sinon, comment cela ( rfc-archive.org/getrfc.php?rfc=2387 < / a>) peut être mis en œuvre?


Vous pouvez "servir", comme émettre un message MIME multipart, mais comme je l'ai dit, je pense qu'aucun navigateur ne le rendra la façon dont vous vous attendez.


En d'autres termes, si ce que vous voulez, c'est servir une page Web, non, cela ne fonctionnera pas. Si ce que vous voulez, c'est de produire un document multipart à utiliser / rendu par autre chose (comme un client de messagerie ou autre chose), oui, vous pouvez.


J'ai essayé de faire écho, mais cela n'a pas fonctionné. Quel devrait être le «type de contenu» de l'appel d'en-tête PHP ()? Devrait-il "multipart / associé" seulement? Devrais-je appeler l'en-tête () 3 fois, avec différents types de contenu? Ou, juste un en-tête () appelez et écho aux autres?


Je vais ajouter un exemple, juste un min


Pardon. Mais je ne le veux pas. "Ce que je veux produire un document multipart à utiliser / rendu par autre chose". Pas un client de messagerie. Peux-tu me montrer? Merci pour votre temps.


Ce que j'ai suggéré, utilisez le phpmailer pour construire le message, puis vous l'écho, comme je l'ai fait dans l'exemple. Vous pouvez tout aussi bien construire le message manuellement, mais c'est beaucoup de difficulté à penser que vous avez déjà des bibliothèques qui le font déjà. Vous pouvez également modifier les fichiers PHPMailer vous-même et adaptez-le à vos besoins.


Avis dans l'exemple que j'ai écrit, je n'envoie pas l'email, je reçois le corps (message codé MIME) à l'aide de $ mime_message = $ mail-> createbody (); echo $ mime_message;



0
votes

J'essaie d'obtenir la même chose.

Il semble que MSIE soit le seul navigateur à prendre en charge actuellement MultiPart / associé de manière native (Opera peut avoir un certain soutien - mais je n'ai pas joué avec elle) Toutefois, lorsque vous chargez de tels fichiers, il semble ignorer totalement les en-têtes HTTP concernant Type MIME et autres choses (telles que l'information de mise en cache, la disposition, etc.). En effet, Msie ouvrira uniquement le fichier si l'URL dispose d'une extension de fichier .MHT (c'est-à-dire sa rupture de la plupart des règles sur HTTP).

En outre, MSIE chargera de manière heureuse tout ce que contient un fichier multipartite / associé intégré (à condition qu'il soit codé en tant que texte brut) sans rendu les données que la pièce jointe est contenue. On dirait que la fonctionnalité de gestion de ces fichiers est un piratage rapide pour permettre la visualisation des fichiers

Si vous reconfigurez votre serveur Web pour analyser .mht URL à l'aide de PHP (ou utilisez mod_rewrite pour remapper l'URL), vous constaterez probablement que cela pourrait fonctionner (bien que je ne tiendrais pas beaucoup d'espoir de travailler avec une chaîne de requête ajoutée). Mais attendez-vous à des problèmes si vous générez du contenu dynamique (il n'expirera pas du cache / rafraîchissement lorsque vous attendez).

Pour couper une longue histoire, cela ne va pas fonctionner.


2 commentaires

J'ai travaillé pour les navigateurs mobiles, pas pour les navigateurs de bureau normaux. Cela fonctionnait parfaitement.


Il y a un code sur phpclasses qui est censé décomposer un fichier MHTML - mais cela n'a pas fonctionné pour moi :(



3
votes

voici cela [a fonctionné pour moi] (Non, je n'ai pas utilisé phpmailer; Peut-être que c'est utile, mais je ne pouvais pas le faire fonctionner): XXX

Vous pouvez charger le XML du fichier aussi. Mais notez que si votre XML fait référence à l'image (comme je l'ai fait ici), vous devez renvoyer cela avec son identifiant de contenu. Notez également les caractères '<' '' '>' dans le champ Content-ID de l'image (après la limite) et la notation "CID:" à l'endroit où il se réfère. Cela a fonctionné pour moi. Merci à Carlos Lima pour passer du temps pour moi.


0 commentaires