Bagaimana cara mendapatkan kode HTML halaman web di PHP?

91

Saya ingin mengambil kode HTML dari sebuah link (halaman web) di PHP. Misalnya, jika tautannya adalah

/programming/ask

lalu saya ingin kode HTML halaman yang ditayangkan. Saya ingin mengambil kode HTML ini dan menyimpannya dalam variabel PHP.

Bagaimana saya bisa melakukan ini?

Prashant
sumber
Bisakah Anda menjelaskannya lebih lanjut. Anda ingin mengirim permintaan web ke URL tertentu dan membaca tanggapan untuk Variabel, saya kira?
Chathuranga Chandrasekara
Ya, hal yang sama saya inginkan, saya ingin seluruh kode sumber dalam variabel dikembalikan oleh permintaan web itu.
Prashant
1
Anda dapat menggunakan alat ini untuk menghapus html dengan mudah.
Faraz Kelhini
Bahkan dengan allow_url_fopen disetel ke true, fungsi ini tidak mengembalikan HTML halaman? Apa lagi yang harus saya periksa?
CodeForGood

Jawaban:

140

Jika server PHP Anda mengizinkan pembungkus url fopen maka cara paling sederhana adalah:

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

Jika Anda membutuhkan lebih banyak kontrol maka Anda harus melihat fungsi 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);
Greg
sumber
Saya khawatir tentang 404. Jika tautan tidak ada, maka saya tidak ingin isinya, sebaliknya saya ingin menampilkan pesan kesalahan ?? Bagaimana kita akan menemukan bahwa url memberikan kesalahan 404 atau tidak (cukup menas URL berfungsi atau tidak)?
Prashant
1
@Prashant: Saya telah mengedit untuk menambahkan panggilan curl_getinfo yang akan memberi Anda 200 atau 404 atau apa pun
Greg
Juga bagaimana mungkin PHP mendapatkan HTML halaman saat ini?
Renaro Santos
Apakah ini lintas-domain?
I.Am.A.Guy
Tidak akan berfungsi pada PHP7. Memeriksa php.ini dan fopen aktif.
Kaspar L. Palgi
22

Juga jika Anda ingin memanipulasi halaman yang diambil, Anda mungkin ingin mencoba beberapa pengurai DOM php. Saya menemukan PHP Simple HTML DOM Parser sangat mudah digunakan.

Dmitri Pisarev
sumber
11

Anda mungkin ingin melihat perpustakaan YQL dari Yahoo: http://developer.yahoo.com/yql

Tugas yang ada adalah sesederhana

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

Anda dapat mencobanya di konsol di: http://developer.yahoo.com/yql/console (memerlukan login)

Juga lihat screencast Chris Heilmanns untuk beberapa ide bagus apa lagi yang dapat Anda lakukan: http://developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collating_distributed_information.html

Ickmund
sumber
10

Cara sederhana: Gunakan file_get_contents():

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

Harap dicatat bahwa allow_url_fopenharus truedi Anda php.inidapat menggunakan URL-sadar pembungkus fopen.

Cara yang lebih maju: Jika Anda tidak dapat mengubah konfigurasi PHP Anda, allow_url_fopensecara falsedefault dan jika ext / curl diinstal, gunakan cURLperpustakaan untuk terhubung ke halaman yang diinginkan.

Stefan Gehrig
sumber
Bahkan dengan allow_url_fopen disetel ke true, fungsi ini tidak mengembalikan HTML halaman? Apa lagi yang harus saya periksa?
CodeForGood
4

Anda dapat menggunakan file_get_contents jika Anda ingin menyimpan sumber sebagai variabel namun curl adalah cara yang lebih baik.

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

solusi ini akan menampilkan halaman web di situs Anda. Namun ikal adalah pilihan yang lebih baik.

kandang babi
sumber
2

Berikut dua cara berbeda dan sederhana untuk mendapatkan konten dari URL :

1) metode pertama

Aktifkan Allow_url_include dari hosting Anda (php.ini atau di mana saja)

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

atau

2) metode kedua

Aktifkan php_curl, php_imap dan 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;
?>
T.Todua
sumber
1

Anda juga dapat menggunakan metode DomDocument untuk mendapatkan variabel level tag HTML

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

$output = file("http://www.example.com");tidak bekerja sampai aku diaktifkan: allow_url_fopen, allow_url_include,dan file_uploadsdi php.iniuntuk PHP7

Ken
sumber
0

Saya mencoba kode ini dan berhasil untuk saya.

$html = file_get_contents('www.google.com');
$myVar = htmlspecialchars($html, ENT_QUOTES);
echo($myVar);
Abd Abughazaleh
sumber