2010-09-21 3 views
1

Этот скрипт работал отлично в течение нескольких недель, а затем прекратил работать без причины.ob_get_contents перестали работать по неизвестной причине

1.<?php
2.ob_start();
3.include "weather xml website";
4.$data=ob_get_contents();
5.ob_clean();
6.
7.$xmlFile = 'filelocation\weatherData.xml';
8.
9.
10.$fh = fopen($xmlFile, 'w') or die("can not create or open $xmlFile");
11.
12.fwrite($fh, $data);
13.fclose($fh);
14.?>

Я использовал API-интерфейсы погоды от Google и Msn, и я могу Получать штраф XML-данных с помощью браузера, обработчик файлов можно создавать и редактировать локальную XML. У меня была эта настройка скрипта как запланированная задача, которая запускалась каждые 30 минут.

Есть ли другой способ, которым я должен пользоваться? кэширование? любая помощь была бы принята с благодарностью

+1

Недавно изменилась настройка сервера, в частности настройки 'allow_url_ *' ini (что должно быть 'on')? – salathe

ответ

1

О, этот код так небезопасный. Включение удаленного файла крайне опасно. Ваше соединение может быть перехвачено, и, таким образом, злоумышленник может выполнить практически любой код на вашем сервере (включая удаление всех файлов и прочее).

Итак, проблема заключается в том, что ваш хостер установил либо allow_url_fopen or allow_url_include, либо Off. Эти параметры позволяют или запрещают доступ к удаленным файлам с использованием функций файлов PHP и используют оператор include.

То, что вы хотите сделать, может быть осуществлено с использованием гораздо меньше кода и сделать код более безопасным:

file_put_contents('filelocation\weatherData.xml', file_get_contents('weather xml website')); 

Вы могли, но проверить некоторые ошибки там, но это в основном все, что вам нужно - и это предотвращает выполнение произвольного кода, манипулируя вашим соединением!

Если это все еще не работает, возможно, не только allow_url_include отключен, но и allow_url_fopen. В этом случае у вас нет выбора, чтобы использовать CURL.

+0

Спасибо за быстрые ответы, file_get_contents отлично работает. – Nathan

2

Почему бы не использовать PHP file_get_contents()-function для получения вашего URL? Тогда вам не понадобятся функции ob_*. Также возможно, что ваш php.ini имеет некоторые ограничения, связанные с включением внешних URL-адресов. Я помню что-то читал в комментариях к этому файлу.
Кроме того, вы можете упростить операции с файлом для вызова file_put_contents()-function.

EDIT: Как Salathe отметил, варианты php.ini allow_url_fopen и allow_url_include имеют отношение к вашей проблеме. Вы должны проверить свою конфигурацию для них.

Смежные вопросы