|
Работа с удаленными файлами в PHP
Есть несколько основных способов получения удалённого файла посредством PHP.
Наиболее простым и часто применяемым способом является использование функций include(), require(), fopen(). Например, include("http://www.yahoo.com/index.html"); или $fp=fopen("http://www.yahoo.com/index.html","r"); while ($tmp = fread($fp, 1024)) { $buffer .= $tmp; } Однако, из-за ошибок это не всегда является наилучшим из возможных вариантов, вот почему: $content = $_GET['content']; [...] $filename = $base . $content .".php"; include($filename); В подобной конструкции отсутствует проверка содержимого $_GET['content'], очень просто использовать это во вред хозяину виртуального сервера. В любом случае, Вы должны обязательно проводить проверку "валидности" данных передаваемых через глобальные переменные в Ваш скрипт. Обратите внимание, что ф-ия fread() в предыдущем примере справедливо вызывалась внутри цикла, это необходимо для того, чтобы получить полный объем данных. Вызов fread() не в цикле -- ещё одна часто встречающаяся ошибка. Альтернативой использованию этих функции является получение удалённых файлов посредством "сокетов", рассмотрите этот вариант, возможно, он подойдёт Вам больше. Если Вы всё же решили использовать одну из приведённых функций, проверили, что не допустили ошибок, то следующим шагом для Вас станет включение allow_url_fopen. Из соображений безопасности на наших хостинговых серверах по умолчанию allow_url_fopen = 0. Вот пример характерных этому ошибки в лог-файлах: PHP Warning: fopen(): URL file-access is disabled in the server configuration in .... PHP Warning: fopen(....): failed to open stream: no suitable wrapper could be found in.... Для включения allow_url_fopen выполните следующие действия: fairy!w_user:~$ pwd /home/clients/w_user server!w_user:~$ mkdir ~/.php server!w_user:~$ echo "allow_url_fopen = 1" >> ~/.php/php.ini server!w_user:~$ cat ~/.php/php.ini allow_url_fopen = 1 server!w_user:~$ Если Ваши скрипты рассчитывают на allow_url_fopen = 1, это должно быть явным образом определено в пользовательском конфигурационном файле php.ini Если же у Вас нет необходимости включать allow_url_fopen, рекомендуем Вам явным образом выключить allow_url_fopen. Вы можете дополнять файл ~/.php/php.ini любыми другими необходимыми Вам директивами. |
|