2016-04-16 6 views
1

Ich hatte dieses Problem bereits zweimal und konnte die Antwort im Internet nicht finden.file_get_contents() ignoriert Hosts

Ich habe eine lokale, Entwicklung Apache Server in vagrant Maschine eingerichtet, die meine Website korrekt dient. Ich habe auch meine Gastgeber richtig eingerichtet in/etc/hosts und ich kann auf die Entwicklungswebseite einfach mit jedem Browser zugreifen. Aber wenn ich versuche, den Inhalt eines verarbeiteten PHP-Skripts zu erhalten (mit file_get_contents()), um diese später in eine PDF-Datei umzuwandeln, ignoriert die Funktion meine Host-Einstellungen und versucht, diese Seite im Internet zu finden. Es existiert nicht, da die Seite noch nicht live ist.

Gibt es eine Möglichkeit, file_get_contents mit meinen Hosteinstellungen zu vereinbaren?

Mein PHP-Skript:

$html = file_get_contents(get_template_directory_uri(). "/pdf-template.php"); 

Meine Gastgeber Einstellungen:

192.168.56.123 site.com 
192.168.56.123 www.site.com 
+0

PHP tut eine DNS-Suche und DNS-Lookups verwenden keine Hosts-Datei. Je. –

+0

Gibt es eine Möglichkeit, dies zu überschreiben? @CharlotteDunois –

+0

Wenn Sie den PHP-Quellcode aktualisieren, um zuerst in die hosts-Datei zu schauen und dann PHP neu zu kompilieren, ist das sicher. Ansonsten nein. –

Antwort

0
function get_contents($url, $ua = 'Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', $referer = 'http://www.google.com/') { 
    $header[0] = "Accept-Language: en-us,en;q=0.5"; 
    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_USERAGENT, $ua); 
    curl_setopt($curl, CURLOPT_REFERER, $referer); 
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl, CURLOPT_TIMEOUT, 10); 
    $content = curl_exec($curl); 
    if(curl_errno($curl)){ 
     http_response_code(500); 
    } 
    curl_close($curl); 
    return $content; 
} 

// setting up dns cache 
$ch = curl_init('http://site.localhost/'); 
curl_setopt($ch, CURLOPT_RESOLVE, ["site.localhost:80:127.0.0.1"]); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_exec($ch); 


// getting content 
get_contents('http://site.localhost/') 

Dieser Code funktioniert für mich anstelle von/etc/hosts.