Почему file_get_contents
не работают для меня? В приведенном ниже примере тестового файла кажется, что все примеры, которые я искал для всех, имеют указанную функцию, но никогда не выполняются. Это проблема с услугой веб-хостинга? Может ли кто-нибудь протестировать этот код на своем сервере, чтобы увидеть, действительно ли вывод массива геокодирования распечатывается как строка? Конечно, я пытаюсь назначить вывод переменной, но здесь нет вывода в этом тестовом файле ….
<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>
Проверьте file_get_contents
PHP Manual return value. Если значение FALSE
оно не может прочитать файл. Если значение NULL
то сама функция отключена.
Чтобы узнать больше о том, что может быть неправильным в операции file_get_contents
вы должны включить отчет об ошибках и отображение ошибок для их фактического чтения.
# Enable Error Reporting and Display: error_reporting(~0); ini_set('display_errors', 1);
Вы можете получить более подробную информацию о том, почему вызов терпит неудачу, проверяя значения INI на вашем сервере. Одно значение напрямую влияет на функцию file_get_contents
– allow_url_fopen
. Вы можете сделать это, выполнив следующий код. Следует отметить, что если он сообщает, что fopen не разрешен, вам нужно попросить вашего провайдера изменить этот параметр на вашем сервере, чтобы любой код, который требует, чтобы эта функция работала с URL-адресами.
<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>
Если все это не удается, это может быть связано с использованием коротких открытых тегов, <?
, Поэтому код примера в этом ответе был изменен, чтобы использовать <?php
для правильной работы, так как это гарантировано будет работать во всех версиях PHP, независимо от того, какие параметры конфигурации установлены. Чтобы сделать это для вашего собственного скрипта, просто замените <?
или <?php
.
Если для директивы allow_url_fopen
ini для PHP установлено значение true, и если curl
тоже не работает (см. Этот ответ для примера того, как использовать его вместо file_get_contents
), тогда проблема может заключаться в том, что на вашем сервере есть брандмауэр, предотвращающий получение скриптов содержимое произвольных URL-адресов (которые потенциально могут позволить вредоносному коду извлекать вещи).
У меня была эта проблема, и я обнаружил, что решение для меня состояло в том, чтобы отредактировать настройки брандмауэра, чтобы явно разрешать запросы к домену (или IP-адресу), о котором идет речь.
Оберните свой $ adr в urlencode (). У меня была эта проблема, и это решило это для меня.
Если это локальный файл, вы должны обернуть его в htmlspecialchars следующим образом:
$myfile = htmlspecialchars(file_get_contents($file_name));
Затем он работает
//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>