Auge: PHP URL open

Beitrag lesen

Hallo

Weil der Server den Request vom Browsr akzeptiert und den von PHP nicht. Warum das so ist, kann man nur spekulieren, solange man nicht den Serverbetreiber fragt. (Warum fragst du den nicht, sondern Außenstehende?)

Vielleicht weil wir hier (virtuell) zusammenkommen, um über genau solche Techniken zu diskutieren?

Und deshalb solle die Anmerkung, doch erst einmal den Dienstanbieter um Hilfe zu fragen, nicht statthaft sein? Wir weisen hier ja auch immer wieder einmal auf den Support des konkreten Hosters hin, wenn es z.B. um PHP-Funktionen geht, deren Arbeitsweise stark von den Einstellungen auf dem Webserver des Hosters abhängt. Warum sollte das in genau diesem Fall anders sein, wo doch der Dienstanbieter am besten wissen sollte, welche Zugriffe er erlaubt und wie die zu erfolgen haben?

Zeig doch lieber, wei man sowas macht und/oder wie man es erkennen kann, wenn ein Anbieter derartige Einschränkungen macht.

Mögliche Ursachen und Lösungsansätze beschreibt dedlfix doch im Anschluss?! Was also soll der Seitenhieb?


Für's Archiv, auch wenn die genannten Fehlermeldungen nicht darauf hinweisen:

Die Funktionen fopen und file_get_contents, sowie einige weitere, die dem Zugriff auf Dateien dienen, können in PHP grundsätzlich auch auf URLs zugreifen. Das ist in diesem Fall wohl auch gegeben. Viele Hostinganbieter schränken diese Möglichkeiten aber ein, so dass diese Funktionen ausschließlich im lokalen Dateisystem, nicht aber über URLs funktionieren.

In diesen Fällen kann man für den Zugriff auf externe, per URL zu erreichende Ressourcen z.B. die PHP-Bibliothek für cURL benutzen. Die ist allerdings nicht standardmäßig installiert. Auch diese Bibliothek kann die hier schon angesprochenen HTTP-Header senden.

Mal als Beispiel eine Funktion. Nicht alle Optionen (gesetzt mit curl_setopt) werden überall gebraucht.

/**
 * wrapper to load an external ressource into a variable
 *
 * @param string $url
 * @return bool false
 * @return string $string
 */
function my_load_feed($url) {
# no value in $url? return false!
if ($url === NULL) return false;
# the value of $url is no URL? return false!
if (filter_var($url, FILTER_VALIDATE_URL) === false) return false;

$string = '';

# does the function exists in the PHP installation?
if (function_exists('curl_init')) {
	# read the ressource from the URL with curl
	$c = curl_init();
	curl_setopt($c, CURLOPT_URL, $url);
	curl_setopt($c, CURLOPT_HEADER, false);
	curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);   
	curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 20);
	curl_setopt($c, CURLOPT_USERAGENT, "PHP 5.6");
	curl_setopt($c, CURLOPT_HTTPHEADER, array('X-Identifier: Test-Skript 0.3', 'Content-type: text/xml;charset="utf-8"'));
	$string = curl_exec($c);
	curl_close($c);
	} else {
		return false;
	}
return $string;
}

Tschö, Auge

--
Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
Toller Dampf voraus von Terry Pratchett