web-dev-qa-db-fra.com

Comment obtenir le code HTML d'une page Web en PHP?

Je veux récupérer le code HTML d'un lien (page Web) en PHP. Par exemple, si le lien est 

https://stackoverflow.com/questions/ask

alors je veux le code HTML de la page qui est servie. Je souhaite récupérer ce code HTML et le stocker dans une variable PHP.

Comment puis-je faire ceci?

73
Prashant

Si votre serveur PHP autorise les enveloppes d'URL fopen, alors le moyen le plus simple est:

$html = file_get_contents('http://stackoverflow.com/questions/ask');

Si vous avez besoin de plus de contrôle, vous devriez regarder les fonctions cURL :

$c = curl_init('http://stackoverflow.com/questions/ask');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
//curl_setopt(... other options you want...)

$html = curl_exec($c);

if (curl_error($c))
    die(curl_error($c));

// Get the status code
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);

curl_close($c);
112
Greg

Aussi, si vous voulez manipuler la page récupérée d'une manière ou d'une autre, vous pouvez essayer un analyseur DOM php . Je trouve PHP Simple HTML DOM Parser très facile à utiliser.

18
Dmitri

Vous pouvez consulter les bibliothèques YQL de Yahoo: http://developer.yahoo.com/yql

La tâche à accomplir est aussi simple que

select * from html where url = 'http://stackoverflow.com/questions/ask'

Vous pouvez essayer ceci dans la console à l’adresse: http://developer.yahoo.com/yql/console (nécessite une connexion)

Voir aussi Chris Heilmanns screencast pour quelques idées intéressantes sur ce que vous pouvez faire de plus: http://developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collating_distributed_information.html

12
Ickmund

Moyen simple: Utilisez file_get_contents() :

$page = file_get_contents('http://stackoverflow.com/questions/ask');

Veuillez noter que allow_url_fopen doit être true dans php.ini pour pouvoir utiliser des wrappers fopen sensibles à l'URL.

Méthode plus avancée: Si vous ne pouvez pas modifier votre configuration PHP, allow_url_fopen est false par défaut et si ext/curl est installé, utilisez la bibliothèque cURL pour vous connecter à la page souhaitée.

9
Stefan Gehrig

vous pouvez utiliser file_get_contents si vous voulez stocker la source sous forme de variable, mais curl est une meilleure pratique. 

$url = file_get_contents('http://example.com');
echo $url; 

cette solution affichera la page Web sur votre site. Cependant curl est une meilleure option. 

2
piglot
2
Sergei

Voici deux méthodes différentes, moyens simples d'obtenir du contenu à partir d'une URL

1) la première méthode

Activer Allow_url_include à partir de votre hébergement (php.ini ou quelque part)

<?php
$variableee = readfile("http://example.com/");
echo $variableee;
?> 

ou 

2) la deuxième méthode

Activer php_curl, php_imap et php_openssl

<?php
// you can add anoother curl options too
// see here - http://php.net/manual/en/function.curl-setopt.php
function get_dataa($url) {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

$variableee = get_dataa('http://example.com');
echo $variableee;
?>
1
T.Todua
include_once('simple_html_dom.php');
$url="http://stackoverflow.com/questions/ask";
$html = file_get_html($url);

Vous pouvez obtenir le code HTML complet sous forme de tableau (formulaire analysé) à l'aide de ce code. Téléchargez le fichier 'simple_html_dom.php' ici http://sourceforge.net/projects/simplehtmldom/files/simple_html_dom.php/download

1
sarath

vous pouvez également utiliser la méthode DomDocument pour obtenir une variable individuelle de niveau balise HTML 

$homepage = file_get_contents('https://www.example.com/');
$doc = new DOMDocument;
$doc->loadHTML($homepage);
$titles = $doc->getElementsByTagName('h3');
echo $titles->item(0)->nodeValue;
0