2010-08-28 7 views
14

Wie kann ich den HTML-Quellcode von http://www.example-webpage.com/file.html ohne file_get_contents() bekommen?php: Get html Quellcode mit cURL

Ich muss dies wissen, weil auf einigen Webhosts allow_url_fopen deaktiviert ist, so dass Sie file_get_contents() nicht verwenden können. Ist es möglich, die Quelle der HTML-Datei mit cURL zu erhalten (wenn die cURL-Unterstützung aktiviert ist)? Wenn das so ist, wie? Danke.

Antwort

25

Versuchen Sie Folgendes:

$ch = curl_init("http://www.example-webpage.com/file.html"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
$content = curl_exec($ch); 
curl_close($ch); 

Ich würde nur diese für kleine Dateien empfehlen. Große Dateien werden als Ganzes gelesen und verursachen wahrscheinlich einen Speicherfehler.

edit: nach einigen Diskussionen in den Kommentaren fanden wir heraus, dass das Problem war, dass der Server den Hostnamen nicht auflösen konnte und die Seite zusätzlich eine https-Ressource war. Hier kommt Ihre temporäre Lösung (bis Ihr sereradmin den Namen behebt) .

was ich getan habe, ping nur graph.facebook.com, um die IP-Adresse zu sehen, ersetzen Sie den Hostnamen durch die IP-Adresse und geben Sie stattdessen die Kopfzeile manuell. aber dies macht das SSL-Zertifikat ungültig, so dass wir Peer-Überprüfung zu unterdrücken

//$url = "https://graph.facebook.com/19165649929?fields=name"; 
$url = "https://66.220.146.224/19165649929?fields=name"; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: graph.facebook.com')); 
$output = curl_exec($ch); 
curl_close($ch); 

bedenken haben, dass die IP-Adresse ändern könnte und dies ist eine eror Quelle. Sie sollten auch eine Fehlerbehandlung mit curl_error() durchführen;

+0

danke, aber ich bekomme eine leere Datei. Ich versuche den Fehler zu finden –

+0

John, wenn dies nicht funktioniert, dann überprüfen Sie Ihre URL. Vergessen Sie auch nicht den curl_close ($ ch) am Ende. – Brad

+0

Funktioniert es mit einer Nur-Text-Datei anstelle einer HTML-Datei? Ich habe es mit einer einfachen Textdatei getestet - und ich bekomme eine leere Seite. –

3

http://php.net/manual/en/curl.examples-basic.php :)

<?php 

$ch = curl_init("http://www.example.com/"); 
$fp = fopen("example_homepage.txt", "w"); 

curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

$output = curl_exec($ch); 
curl_close($ch); 
fclose($fp); 
?> 

Versuchen Wie die Dokumentation sagt:

Die Grundidee hinter den Curl-Funktionen ist, dass Sie eine cURL-Session mit der curl_init initialisieren (), dann Sie kann alle Optionen für die Übertragung über die curl_setopt() setzen, dann können Sie die Sitzung mit der curl_exec() ausführen und dann beenden Sie Ihre Sitzung mit der curl_close().