Warum funktioniert file_get_contents
not für mich nicht? Im folgenden Code der Testdatei scheint es, dass für alle Beispiele, nach denen ich gesucht habe, diese Funktion aufgelistet ist, die jedoch nie ausgeführt wird. Ist das ein Problem mit dem Webhosting-Service? Kann jemand diesen Code auf seinem Server testen, nur um zu sehen, ob die Ausgabe des Geokodierungs-Arrays tatsächlich als Zeichenfolge ausgegeben wird? Ich versuche natürlich, die Ausgabe einer Variablen zuzuweisen, aber hier in dieser Testdatei gibt es keine Ausgabe ....
<html>
<head>
<title>Test File</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
</script>
</head>
<body>
<?
$adr = 'Sydney+NSW';
echo $adr;
$url = "http://maps.googleapis.com/maps/api/geocode/json?address=$adr&sensor=false";
echo '<p>'.$url.'</p>';
echo file_get_contents($url);
print '<p>'.file_get_contents($url).'</p>';
$jsonData = file_get_contents($url);
echo $jsonData;
?>
</body>
</html>
Prüfen Sie file_get_contents
PHP Handbuch Rückgabewert. Wenn der Wert FALSE
ist, konnte die Datei nicht gelesen werden. Wenn der Wert NULL
ist, ist die Funktion selbst deaktiviert.
Um mehr darüber zu erfahren, was bei der Operation file_get_contents
schief gelaufen ist, müssen Sie die Fehlerberichterstattung aktivieren und die Fehleranzeige anzeigen, um sie tatsächlich lesen zu können.
# Enable Error Reporting and Display:
error_reporting(~0);
ini_set('display_errors', 1);
Weitere Informationen zu den Gründen für den Anruffehler finden Sie in den INI - Werten auf Ihrem Server. Ein Wert, auf den die Funktion file_get_contents
direkt wirkt, ist allow_url_fopen
. Sie können dies tun, indem Sie den folgenden Code ausführen. Sie sollten beachten, dass, wenn gemeldet wird, dass fopen nicht zulässig ist, Sie Ihren Provider bitten müssen, diese Einstellung auf Ihrem Server zu ändern, damit Code, der diese Funktion erfordert, mit URLs funktioniert.
<html>
<head>
<title>Test File</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
</script>
</head>
<body>
<?php
# Enable Error Reporting and Display:
error_reporting(~0);
ini_set('display_errors', 1);
$adr = 'Sydney+NSW';
echo $adr;
$url = "http://maps.googleapis.com/maps/api/geocode/json?address=$adr&sensor=false";
echo '<p>'.$url.'</p>';
$jsonData = file_get_contents($url);
print '<p>', var_dump($jsonData), '</p>';
# Output information about allow_url_fopen:
if (ini_get('allow_url_fopen') == 1) {
echo '<p style="color: #0A0;">fopen is allowed on this Host.</p>';
} else {
echo '<p style="color: #A00;">fopen is not allowed on this Host.</p>';
}
# Decide what to do based on return value:
if ($jsonData === FALSE) {
echo "Failed to open the URL ", htmlspecialchars($url);
} elseif ($jsonData === NULL) {
echo "Function is disabled.";
} else {
echo $jsonData;
}
?>
</body>
</html>
Wenn all dies fehlschlägt, kann dies auf die Verwendung kurzer offener Tags <?
zurückzuführen sein. Der Beispielcode in dieser Antwort wurde daher so geändert, dass <?php
verwendet wird, um korrekt zu funktionieren, da dies in allen PHP-Versionen garantiert funktioniert, unabhängig von den festgelegten Konfigurationsoptionen. Um dies für Ihr eigenes Skript zu tun, ersetzen Sie einfach <?
oder <?php
.
Wenn die allow_url_fopen
ini-Direktive von PHP auf true gesetzt ist und curl
nicht funktioniert (siehe diese Antwort für ein Beispiel, wie sie anstelle von file_get_contents
verwendet werden kann), könnte das Problem sein, dass Ihr Server über eine Firewall verfügt Verhindern, dass Skripts den Inhalt beliebiger URLs abrufen (wodurch möglicherweise bösartiger Code möglicherweise abgerufen wird).
Ich hatte dieses Problem und stellte fest, dass die Lösung für mich darin bestand, die Firewall-Einstellungen so zu bearbeiten, dass Anforderungen an die betreffende Domäne (oder IP-Adresse) explizit zugelassen werden.
Wenn es sich um eine lokale Datei handelt, müssen Sie sie wie folgt in htmlspecialchars einpacken:
$myfile = htmlspecialchars(file_get_contents($file_name));
Dann klappt es
Wickeln Sie Ihren $adr
in urlencode()
. Ich hatte dieses Problem und dieses Problem wurde für mich gelöst.
//JUST ADD urlencode();
$url = urlencode("http://maps.googleapis.com/maps/api/geocode/json?address=$adr&sensor=false");
<html>
<head>
<title>Test File</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
</script>
</head>
<body>
<?php
$adr = 'Sydney+NSW';
echo $adr;
$url = "http://maps.googleapis.com/maps/api/geocode/json?address=$adr&sensor=false";
echo '<p>'.$url.'</p>';
echo file_get_contents($url);
print '<p>'.file_get_contents($url).'</p>';
$jsonData = file_get_contents($url);
echo $jsonData;
?>
</body>
</html>