webentwicklung-frage-antwort-db.com.de

Warum funktioniert file_get_contents nicht?

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>
11
PVJAZZ

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.

30
hakre

Wenn die allow_url_fopenini-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.

6
Nick F

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

3

Wickeln Sie Ihren $adr in urlencode(). Ich hatte dieses Problem und dieses Problem wurde für mich gelöst.

3
//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>
1
Rameez SOOMRO