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

PNS

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

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


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

Как поступить?
 

ForJest

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

И пользуй include_once($g_site_root.'/dir/file.php');
 

chulim

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

chulim

Новичок
тут я лажанулся :) $_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.
 

crocodile2u

http://vbolshov.org.ru
Забей на зенд. слушай ForJest

-~{}~ 23.06.04 13:54:

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

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

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

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

Проверено занусси. :)
 

PNS

Новичок
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');
Но я не очень понял с точки зрения секьюрити все-таки это безопасно или нет?
 

lucas

Guest
PNS

Если g_root определяется всегда -- безопасно.
Если нет и register_globals on -- нет.
 

SiMM

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