Как получить HTML-код веб-страницы на PHP?

91

Я хочу получить HTML-код ссылки (веб-страницы) в PHP. Например, если ссылка

/programming/ask

то мне нужен HTML-код обслуживаемой страницы. Я хочу получить этот HTML-код и сохранить его в переменной PHP.

Как я могу это сделать?

Прашант
источник
Не могли бы вы объяснить это поподробнее. Вы хотите отправить веб-запрос по заданному URL-адресу и прочитать ответ на переменную, я думаю?
Чатуранга Чандрасекара,
Да, то же самое, что и я, мне нужен весь исходный код в переменной, возвращаемой этим веб-запросом.
Прашант
1
Вы можете использовать этот инструмент, чтобы легко удалить HTML.
Фараз Келхини
Даже если для параметра allow_url_fopen установлено значение true, эта функция не возвращает HTML-код страницы? Что еще я должен проверить?
CodeForGood,

Ответы:

140

Если ваш PHP-сервер позволяет использовать обертки url fopen, то самый простой способ:

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

Если вам нужно больше контроля, вам следует взглянуть на функции 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);
Грег
источник
Меня беспокоит ошибка 404. Если ссылка не существует, мне не нужно ее содержимое, вместо этого я хочу отобразить сообщение об ошибке ?? Как мы обнаружим, что URL-адрес выдает ошибку 404 или нет (просто URL-адрес меню работает или нет)?
Prashant
1
@Prashant: Я отредактировал, чтобы добавить вызов curl_getinfo, который даст вам 200 или 404 или что-то еще
Грег
Также как PHP может получить HTML-код текущей страницы?
Ренаро Сантос 08
Это междоменный?
I.Am.A.Guy
Не будет работать на PHP7. Проверено, что php.ini и fopen включен.
Каспар Л. Палги
22

Также, если вы хотите каким-то образом манипулировать полученной страницей, вы можете попробовать какой-нибудь парсер php DOM. Я считаю, что PHP Simple HTML DOM Parser очень прост в использовании.

Дмитрий Писарев
источник
11

Вы можете ознакомиться с библиотеками YQL на Yahoo: http://developer.yahoo.com/yql

Поставленная задача проста как

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

Вы можете попробовать это в консоли по адресу: http://developer.yahoo.com/yql/console (требуется логин)

Также посмотрите скринкаст Криса Хейлмана, чтобы узнать, что еще можно сделать: http://developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collating_distributed_information.html

Икмунд
источник
10

Простой способ: используйте file_get_contents():

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

Пожалуйста , обратите внимание , что allow_url_fopenдолжно быть trueв вас , php.iniчтобы иметь возможность использовать URL-Aware FOPEN оберток.

Более продвинутый способ: если вы не можете изменить конфигурацию PHP, allow_url_fopenиспользуется falseпо умолчанию, а если установлен ext / curl, используйте cURLбиблиотеку для подключения к нужной странице.

Стефан Гериг
источник
Даже если для параметра allow_url_fopen установлено значение true, эта функция не возвращает HTML-код страницы? Что еще я должен проверить?
CodeForGood,
4

вы можете использовать file_get_contents, если хотите сохранить источник как переменную, однако curl - лучший практический вариант.

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

это решение отобразит веб-страницу на вашем сайте. Однако завиток - лучший вариант.

свинка
источник
2

Вот два разных простых способа получить контент с URL :

1) первый способ

Включите Allow_url_include с вашего хостинга (php.ini или где-то еще)

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

или

2) второй способ

Включите php_curl, php_imap и 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

вы также можете использовать метод DomDocument для получения отдельной переменной уровня тега HTML

$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");не работает , пока не включено: allow_url_fopen, allow_url_include,и file_uploadsв php.iniтечение PHP7

Кен
источник
0

Я пробовал этот код, и он у меня работает.

$html = file_get_contents('www.google.com');
$myVar = htmlspecialchars($html, ENT_QUOTES);
echo($myVar);
Абд Абугхазале
источник