Création de fichiers MHT

Répondre
bibi
le 30/04/2010 à 09:51
bibi
Hello hello,

Ca fait environ 10 ans que je suis pas venu sur ce site, donc j'espère que tout va bien par ici :)

Dans le cadre de mon stage, on m'a demandé de voir si on pouvait créer des fichiers MHT (http://en.wikipedia.org/wiki/MHTML) en php à partir d'une url.

Donc j'ai un peu farfouillé, et c'est pas forcément le truc le plus courant sur Terre, mais je suis tombé sur une classe qui fait environ ce que je veux à part 1 truc (de taille): Elle ne crée des MHT qu'à partir de fichiers locaux, pas d'une url.

Voici la librairie que j'utilise: http://www.lephpfacile.com/wall/wall-1893.php

Clairement, il semblerait que le problème, en tous cas le premier problème, vienne de la dernière fonction qui permet de récupérer le type mime. J'ai essayé avec un

$finfo = finfo_open(FILEINFO_MIME, $filename);
echo $finfo;
return $finfo;


Sauf que j'ai un léger souci, peut-être dû aux proxy la où je travaille.

Il faudrait donc que je crée une fonction du type GetFromURL($url).

Est-ce que vous connaitriez un moyen de créer des mht grâce à la classe COM (j'ai vu que c'était envisageable) ou à défaut, de m'aiguiller un poil, n'ayant que très peu de temps pour coder.

Merci d'avance,
Benjamin

PS: Voici le code que j'utilise qui fonctionne parfaitement en local mais pas avec une url

<?php

require_once 'mht.lib.php';

$file = new MhtFileMaker;

//$file->AddFile('http://www.google.fr/');

$file->SetBaseDir('');
$file->SetFirstPage('http://www.google.fr');
$file->AutoAddFiles();

$file->MakeFile('test.mht');


?>
commit suicide
bibi
le 30/04/2010 à 10:12
bibi
Un petit complèment.

J'ai trouvé ce code qui fait exactement ce que je veux à part pour 1 truc : il ne sauvegarde pas les css

<?php

$message = new COM("CDO.Message");
$conf = new COM("CDO.Configuration");
$message->Configuration = $conf;
$message->CreateMHTMLBody("http://www.jeuxvideo.com/avis/0003/00035300-0.htm");
//Récupération du contenu du message dans un flux
$stream = $message->GetStream() ;

//Sauvegarde du résultat sur le serveur
$stream->SaveToFile('c:\\test.mht');
$stream->Close();
?>


Il faudrait donc que je réussisse à faire une sorte de code récursif pour les css. Enfin je pense, mais si vous avezu ne meilleure idée .. :)
commit suicide
LupusMic
le 01/05/2010 à 21:17
LupusMic
Pour le composant COM, je ne me prononcerait pas, je ne fais pas dans les microsofteries.

En ce qui concerne la classe dont tu as parlé plus haut, ce serait intéressant que tu nous donnes les messages d'erreur. Parce que de toute façon, si le script PHP ne peut pas sortir, tu ne pourras pas récupérer les pages et créer des archives web.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
bibi
le 05/05/2010 à 10:06
bibi
Hello,

A vrai dire c'est pas trop le composant COM qui m'attirait le plus.

Sinon pour les erreurs, je crois surtout que les soucis viennent:

- Du fait que j'ai pas réussi à trouver comme récupérer le type mime d'un url type google.fr/ sans extension de fichier
- Que la classe attend justement un nom de fichier comme point d'accès du mht (ça, je peux le simuler en l'appelant index pour la création du mht)

Je reviens dès que je peux avec des informations un tantinet plus utiles, mais là c'est un peu le rush :)

Merci en tous cas.
commit suicide
bibi
le 05/05/2010 à 10:19
bibi
EDIT cerveau en démarrage du matin:

cela dit, le type est obligatoirement text/html ..
commit suicide
dark_nemo
le 05/05/2010 à 12:00
dark_nemo
J'suis pas très fan de COM ça fonctionne que sous windows.
Tu peux pas créer une petite classe qui fait du MHT?
C'est ni plus ni moins que tu html avec le type mime dedans donc rien de transcendant ni rien de bien compliqué. Regarde du coté de DomDocument et de fileinfo
bibi
le 05/05/2010 à 12:22
bibi
Bah en fait c'est surtout pour tous les fichiers (principalement des images et les css) qui font chier. Parce que si c'était juste renommer mon html en mht, ca irait :)
commit suicide
dark_nemo
le 05/05/2010 à 12:30
dark_nemo
Tu n'arrives pas à récupérer le type mime de tes images?
T'as quoi comme version de php? la 5.3 ou en dessous?
Et pour le css je comprends pas? C'est quoi qui te dérange?
bibi
le 05/05/2010 à 13:11
bibi
En fait le truc à faire c'est:

- Récupérer le contenu de la page
- Récupérer tous les fichiers (css, images, flash?(j'ai des doutes)) qui sont présents dans le contenu
- Créer le mht.

Au final, la première étape ça va, la 2ème, une fois que j'ai l'url ça devrait aller, et il me manque donc la 3ème, créer le mht avec différents fichiers, ce qui impliquer changer les liens/url de la page principale pour afficher les fichiers avec leurs chemins dans le mht.

Et la, ça me semble un poil plus complexe. Jvais décortiquer la classe que j'ai pour essayer de comprendre comment il fait ça
commit suicide
dark_nemo
le 05/05/2010 à 13:30
dark_nemo
Avec DomDocument tu peux charger ton fichier et le manipuler comme tu veux par la suite.

<?php
$dom = new DOMDocument();
$dom->load("monfichier.html");

$imgs = $dom->getElementsByTagName("img");

?>

C'est une piste mais regarde bien la doc tu vas voir que c'est un puissant outil. De plus il est assez simple à comprendre et une fois maitrisé c'est un plaisir de manipuler des fichiers avec
Répondre
LoadingChargement en cours