2009-07-29 5 views
5

Je suis aller chercher des informations via PHP à partir d'une page Web en utilisant simple_php_dom et curl. Le problème est que la page n'est pas construite correctement, donc l'objet DOM contient des informations erronées.Comment puis-je obtenir une page HTML en tant que chaîne via PHP?

Comment puis-je obtenir le fichier HTML sous forme de chaîne dans une variable PHP afin que je puisse y exécuter une expression régulière?

Curl ne fonctionne pas car il ignore la partie défectueuse.
simple_html_dom.php a le même problème.
wget ne fonctionne pas car je n'ai pas d'autorisations sur le serveur.

Répondre

12

file_get_contents - Lit le fichier dans une chaîne

string file_get_contents ( 
    string $filename [, int $flags= 0 [, resource $context [, int $offset= -1 [, int $maxlen= -1 ]]]] 
) 

du manuel:

Cette fonction est similaire au fichier(), sauf que file_get_contents() retourne le fichier dans une chaîne, en commençant à l'offset spécifié jusqu'à maxlen octets. En cas d'erreur, file_get_contents() retournera FALSE. File_get_contents() est le moyen préféré de lire le contenu d'un fichier dans une chaîne.

Il utilisera des techniques de mappage de la mémoire s'il est pris en charge par votre système d'exploitation pour améliorer les performances.

Et cela fonctionne à la fois avec les pages Web et les fichiers. Vous pouvez récupérer le code HTML, juste en utilisant "http://whatever.com/page.html" comme $ filename.

+0

C'est ce que je suggérerais. – Christian

+2

Ne fonctionne que si allow_url_fopen est activé. Il n'y a vraiment aucune raison pour que cela fonctionne aussi avec Curl. –

+1

Il ignore également une partie du fichier: S Le seul qui jusqu'à présent obtient vraiment le fichier correctement est wget, que je ne peux pas utiliser: S – fmsf

4

BOUCLÉ ​​vous voulez vous assurer que vous configurez le paramètre CURLOPT_RETURNTRANSFER pour faire en sorte que la page est récupérée sous forme de chaîne, par exemple:

//return the transfer as a string 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

Voir http://www.php.net/manual/en/function.curl-setopt.php

0

je cURL pour récupère le fichier dans une chaîne (simple_html_dom :: load_file enveloppe simplement file_get_contents) puis utilise la méthode load simple (simple) de la chaîne pour l'analyser. Cela fonctionne pour certaines URL, mais il échoue dans ce cas lorsque l'URL a une chaîne de paramètre. Il récupère l'URL comme s'il n'avait pas de chaîne de paramètre. J'ai mis un agent avec curl pour usurper l'identité d'un navigateur mais pas de dés.

Désolé, ce n'est pas une réponse vraiment, mais peut-être utiliser curl fonctionnera pour certaines personnes pour qui le paramètre fopen est un problème.

Questions connexes