PHP'de bir web sayfasının HTML kodunu nasıl alırım?


91

PHP'deki bir bağlantının (web sayfasının) HTML kodunu almak istiyorum. Örneğin, bağlantı

/programming/ask

daha sonra sunulan sayfanın HTML kodunu istiyorum. Bu HTML kodunu almak ve bir PHP değişkeninde saklamak istiyorum.

Bunu nasıl yapabilirim?


Lütfen biraz daha açıklar mısınız? Belirli bir URL'ye bir web isteği göndermek ve sanırım bir Değişkene verilen yanıtı okumak mı istiyorsunuz?
Chathuranga Chandrasekara

Evet, istediğim aynı şey, tüm kaynak kodunun o web isteği tarafından döndürülen bir değişkende olmasını istiyorum.
Prashant

1
Bu aracı html'yi kolayca hurdaya çıkarmak için kullanabilirsiniz .
Faraz Kelhini

Allow_url_fopen öğesi true olarak ayarlanmış olsa bile, bu işlev sayfanın HTML'sini döndürmüyor mu? Başka neyi kontrol etmeliyim?
CodeForGood

Yanıtlar:


140

PHP sunucunuz url fopen sarmalayıcılara izin veriyorsa, en basit yol şudur:

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

Daha fazla kontrole ihtiyacınız varsa cURL işlevlerine bakmalısınız :

$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 konusunda endişeliyim. Bağlantının olmaması durumunda, içeriğini istemiyorum, onun yerine bir hata mesajı mı görüntülemek istiyorum? URL'nin 404 hatası verip vermediğini nasıl bulacağız (sadece menas URL'si çalışıyor ya da çalışmıyor)?
Prashant

1
@Prashant: Size 200 veya 404 veya her neyse verecek bir curl_getinfo çağrısı eklemek için düzenleme yaptım
Greg

Ayrıca PHP'nin geçerli sayfanın HTML'sini alması nasıl mümkün olabilir?
Renaro Santos

Bu alanlar arası mı?
I.Am.A.Guy

PHP7 üzerinde çalışmayacak. Php.ini ve fopen'in Açık olduğu kontrol edildi.
Kaspar L. Palgi


11

Yahoo'daki YQL kitaplıklarına göz atmak isteyebilirsiniz: http://developer.yahoo.com/yql

Eldeki görev kadar basit

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

Bunu şu adresteki konsolda deneyebilirsiniz: http://developer.yahoo.com/yql/console (oturum açma gerektirir)

Daha fazlasını yapabileceğiniz bazı güzel fikirler için Chris Heilmann'ın ekran video kaydına da bakın: http://developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collating_distributed_information.html


10

Basit yol: Kullanım file_get_contents():

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

Lütfen URL uyumlu fopen sarmalayıcıları kullanabilmeniz için sizin içinde olmanız allow_url_fopengerektiğini unutmayın .truephp.ini

Daha gelişmiş yol: Eğer PHP yapılandırmasını değiştiremiyorsanız, allow_url_fopenolduğu falsevarsayılan olarak ve ext / bukle yüklüyse, kullanmak cURLkütüphane istenen sayfaya bağlanmak için.


Allow_url_fopen öğesi true olarak ayarlanmış olsa bile, bu işlev sayfanın HTML'sini döndürmüyor mu? Başka neyi kontrol etmeliyim?
CodeForGood

4

kaynağı bir değişken olarak saklamak istiyorsanız file_get_contents kullanabilirsiniz, ancak curl daha pratiktir.

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

bu çözüm, web sayfasını sitenizde gösterecektir. Ancak kıvrılma daha iyi bir seçenektir.




2

URL'den içerik almanın iki farklı, basit yolu :

1) ilk yöntem

Allow_url_include'u barındırmanızdan etkinleştirin (php.ini veya başka bir yer)

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

veya

2) ikinci yöntem

Php_curl, php_imap ve php_openssl'yi etkinleştirin

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

tek bir HTML etiketi düzeyi değişkeni almak için DomDocument yöntemini de kullanabilirsiniz

$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");: Ben etkin kadar işe yaramadı allow_url_fopen, allow_url_include,ve file_uploadsde php.iniPHP7 için


0

Bu kodu denedim ve benim için çalışıyor.

$html = file_get_contents('www.google.com');
$myVar = htmlspecialchars($html, ENT_QUOTES);
echo($myVar);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.