ob_get_contents перестал работать по неизвестной причине - PullRequest
1 голос
/ 22 сентября 2010

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

1.<?php2.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 минут.

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

Ответы [ 2 ]

2 голосов
/ 22 сентября 2010

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

РЕДАКТИРОВАТЬ: Как уже отмечалось, опции php.ini allow_url_fopen и allow_url_include относятся к вашей проблеме. Вы должны проверить свою конфигурацию для них.

1 голос
/ 22 сентября 2010

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

Итак, проблема в том, что ваш хостер установил для allow_url_fopen или 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 .

...