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


91

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

/programming/ask

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

Comment puis-je faire ceci?


Pouvez-vous s'il vous plaît l'expliquer davantage. Vous souhaitez envoyer une requête Web à une URL donnée et lire la réponse à une variable, je suppose?
Chathuranga Chandrasekara

Oui, même chose que je veux, je veux tout le code source dans une variable renvoyée par cette requête Web.
Prashant

1
Vous pouvez utiliser cet outil pour supprimer facilement du HTML.
Faraz Kelhini

Même avec allow_url_fopen défini sur true, cette fonction ne renvoie pas le HTML de la page? Que dois-je vérifier d'autre?
CodeForGood

Réponses:


138

Si votre serveur PHP autorise les wrappers fopen url, le moyen le plus simple est:

$html = file_get_contents('/programming/ask');

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

$c = curl_init('/programming/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);

Je suis inquiet pour 404. Dans le cas où le lien n'existe pas, alors je ne veux pas de son contenu, à la place je veux afficher un message d'erreur ?? Comment nous trouverons que l'URL donne une erreur 404 ou non (simplement l'URL de menas fonctionne ou non)?
Prashant

1
@Prashant: J'ai édité pour ajouter un appel curl_getinfo qui vous donnera 200 ou 404 ou autre
Greg

Aussi comment PHP peut-il obtenir le code HTML de la page actuelle?
Renaro Santos

Est-ce interdomaine?
I.Am.A.Guy

Ne fonctionnera pas sur PHP7. Vérifié le php.ini et fopen est activé.
Kaspar L. Palgi


11

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 également le screencast de Chris Heilmann pour quelques bonnes idées sur ce que vous pouvez faire de plus: http://developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collating_distributed_information.html


10

Manière simple: utilisez file_get_contents():

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

Veuillez noter que cela allow_url_fopendoit être trueen vous php.inipour pouvoir utiliser des wrappers fopen prenant en charge les URL.

Méthode plus avancée: si vous ne pouvez pas modifier votre configuration PHP, allow_url_fopenc'est falsepar défaut et si ext / curl est installé, utilisez la cURLbibliothèque pour vous connecter à la page souhaitée.


Même avec allow_url_fopen défini sur true, cette fonction ne renvoie pas le HTML de la page? Que dois-je vérifier d'autre?
CodeForGood le

4

vous pouvez utiliser file_get_contents si vous souhaitez stocker la source en tant que 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

Voici deux façons simples et différentes d'obtenir du contenu à partir d'une URL :

1) la première méthode

Activez Allow_url_include depuis votre hébergement (php.ini ou ailleurs)

<?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

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

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

1

$output = file("http://www.example.com");ne fonctionnait pas jusqu'à ce que j'ENABLED: allow_url_fopen, allow_url_include,et file_uploadsdans php.inipour PHP7

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.