PHP - Alternative für file get contents() bei deaktivierten allow url fopen
Bei vielen Hostern ist allow_url_fopen
zwecks Security deaktiviert; entsprechend kann somit über file_get_contents() kein externer Content geladen werden. Eine Abhilfe kann hier die Verwendung von cURL sein.
Vorraussetzung hierfür ist, dass PHP mit der entsprechenden cURL Unterstützung zurecht kommt - dies ist in der Ausgabe von phpinfo() ersichtlich oder in der CLI:
# php -i|grep -i curl
Additional .ini files parsed => /etc/php5/cli/conf.d/curl.ini,
curl
cURL support => enabled
cURL Information => 7.21.0
Um via cURL den externen Content zu laden, kann eine einfache Hilfsfunktion implementiert werden:
function getContent($url) {
if (ini_get('allow_url_fopen')) {
$opts = array(
'http'=> array(
'method'=> "GET",
'header'=> "Accept-language: en\r\n" .
// "User-Agent: " . microtime() . "\r\n" .
// "Referer: " . microtime() . "\r\n"
)
);
return file_get_contents($url, false, stream_context_create($opts));
} elseif (function_exists('curl_init')) {
$curlObj = curl_init();
curl_setopt_array($curlObj, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HEADER => 0,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0,
// CURLOPT_USERAGENT => microtime(),
// CURLOPT_REFERER => microtime()
));
$content = curl_exec($curlObj);
curl_close($curlObj);
return $content;
} else {
die('fetch error');
}
}
echo getContent('http://wiki.laub-home.de');
* Sofern der externe Server die Anfragen anhand der Referer/ UserAgents einschränkt, muss hier eine Anpassung erfolgen. Zum Beispiel hilft die oben gezeigte microtime() Zuweisung um Überprüfungen der Form "zuviele Anfragen vom gleichen Client; identifiziert anhand Referer & UserAgent" zu überwinden. Durch weitere Anpassungen können natürlich noch diverse Header in die Anfragen eingebaut werden.