Вед-дев, Сео, Манимейкинг

PHP include, require_once, file_get_contents

Итак, если ваша PHP установка на сервере достаточно защищена и отключено URL file-access, а вы пытаетесь вызвать файл через функцию include с использованием абсолютного пути или обращаетесь к удаленному файл,у то столкнетесь с данной проблемой. Например код:

<?php
include ("http://www.somedomain.com/file.php");
?>

Приведет к тому, что вы увидите следующие ошибки PHP при просмотре страницы в браузере:

Warning: include() [function.include]: URL file-access is disabled in the server configuration in /home/user/public_html/page.php on line xx
Warning: include(http://www.somedomain.com/file.php) [function.include]: failed to open stream: no suitable wrapper could be found in /home/user/public_html/page.php on line xx
Warning: include() [function.include]: Failed opening ‘http://www.somedomain.com/file.php’ for inclusion (include_path=’.:/usr/lib/php:/usr/local/lib/php’) in /home/user/public_html/page.php on line xx

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

Причина отключения PHP функции include для файлов достаточно простая – это позволит избежать межсайтовых скриптовых (XSS) атак. Это метод, с помощью которого кто-то из недоброжелателей может внедрить свой собственный вредоносный код в ваш, что, как правило, делается для проведения DoS и DDoS атак, а они в свою очередь приводят к падению сервака. Еще есть включения (заражения) в коде страницы, которые содержат и выводят на экран компьютера сообщения мол “такие-то хакеры сломали ваш сайт” вместо стандартного содержимого страницы.

Поэтому если вы собираетесь попросить хостера разрешить эту функцию для удаленных файлов, хорошенько подумайте еще разок.
С другой стороны эта ошибка может быть преодолена с помощью некоторых лучших решений в вашем коде для вызова удаленных файлов. Если вы хотите включить удаленный файл, я бы рекомендовал использовать вам функцию file_get_contents(). Пропишите ее вместе с некоторой переменой в своем коде:

<?php
$a = file_get_contents("http://www.somedomain.com/file.php");
echo ($a);
?>

Если вы хотите включить файл, который уже находится на вашем сайте, используйте относительные пути, а не абсолютные:

<?php
include (file.php);
?>

Есть еще одно альтернативное решение, которое еще проще записать с помощью функции require_once без использования всяких сторонних переменных:

<?php
require_once($_SERVER['DOCUMENT_ROOT'].'file.php');
?>

Именно это решения я использовал для себя, причем удачно – скрипт заработал. В общем, программируйте правильно:) и ошибок не будет. Возможно, у вас есть что добавить ибо заметка достаточно старая, хотя PHP5 все еще актуально, насколько я понимаю.



Комментарии (0)

Подписаться

Подписка на RSS-лента последние записи из Блога

Комменты

  • Olzhas 10 месяцев 1 неделя назад
    Спасибо. С Новым Годом! 
  • Den 11 месяцев 3 дня назад
    В первой функции, при создании переменной $li_previous нужно поменять '←' с NULL, в $li_next сделать тоже самое. 
  • Гость 11 месяцев 3 дня назад
    Если все ровно так как было описано, то нет никаких сомнений что домен увел сам регистратор. Потому что вероятность того 
  • Валерий 12 месяцев 2 дня назад
    да можно делать импорт-экспорт только лишь в оболочке на входя на mysql сервер 
  • admin 12 месяцев 2 дня назад
    Валерий, а зачем вам именно так делать экспорт? Если я не ошибаюсь, то там нет какой-либо команды чтобы сделать экспорт 
  • Валерий 12 месяцев 4 дня назад
    захожу на mysql через ssh по команде  
  • admin 12 месяцев 4 дня назад
    Добрый вечер, какой у вас клиент? 
  • Валерий 1 год 14 часов назад
    Здравстуйте, есть команда чтобы сделать экспорт базы внутри mysql клиента? 
  • Eduard 1 год 1 неделя назад
    Видать, домен хороший был. Заявление пробывали писать на мошенника? 
  • Stas 1 год 1 месяц назад
    Ошибка в ключе квантификатора - replace(/будешь|пить/ig, "хлеб"); Указать -g для прохода по всем совпадениям!