Относительный/абсолютный путь в include_once() Как сделать?

  • Автор темы Автор темы PNS
  • Дата начала Дата начала

PNS

Новичок
Относительный/абсолютный путь в include_once() Как сделать?

Пишу
PHP:
 include_once("/dir/file.php");
(дорожка к "/dir/file.php" начинается от корня сайта.)
Файл не цепляется броузер ругается


Warning: Failed opening '/dir/file.php' for inclusion (include_path='') ... on line ...

Как поступить?
 
Заведи себе переменную, допустим
$g_site_root = $_SERVER['DOCUMENT_ROOT'];
занеси её в конфигурационный файл, который точно будет подключен в скрипте.

И пользуй include_once($g_site_root.'/dir/file.php');
 
ForJest
На такой способ Zend при анализе кода ругается, типа не хорошо в целях секьюрити использовать переменную в инклуде. Лучше обявлять в конфиге define.
PNS
пробуй так - include_once("./dir/file.php");
 
тут я лажанулся :) $_SERVER суперглобальная, о чем анализатор Zend видимо не в курсе :), а дословно он пишет следующее:

Description: Category: Security
include() or analogous function is used with variable argument.
This can be dangerous since variables are in many cases controllable by remote users, and may also altered or owerwrite by mistake. This may lead to undesired behavior, and execution of arbitary code. It is advisable to use constants instead, in such cases.
 
Забей на зенд. слушай ForJest

-~{}~ 23.06.04 13:54:

А чтобы зенд не ругался, объяви константу (что-то типа ROOT)

define('ROOT', $_SERVER['DOCUMENT_ROOT']);

и инклюды делай:

include(ROOT . "/my/path.php");

Проверено занусси. :)
 
Originally posted by ForJest
Заведи себе переменную, допустим
$g_site_root = $_SERVER['DOCUMENT_ROOT'];
занеси её в конфигурационный файл, который точно будет подключен в скрипте.

И пользуй include_once($ge_root.'/dir/file.php');
-------
:) :) Я сделал именно так.
PHP:
g_root = $_SERVER['DOCUMENT_ROOT'];
include_once($g_root.'/dir/file.php');

Но я не очень понял с точки зрения секьюрити все-таки это безопасно или нет?
 
PNS

Если g_root определяется всегда -- безопасно.
Если нет и register_globals on -- нет.
 
lucas, почему это? Константы можно определять при помощи $_GET/$_POST/...? Уж не знаю, где именно он там описался :)
PS: на всякий случай, код был таким:
PHP:
g_root = ...;
include_once($g_root. ...);
 
Сверху