[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Различие путей
kirik
Привет!
Спешу поведать вам о хитрых граблях, на которые наткнулся некоторое время назад.

Проблема заключается в том, что путь в переменной $_SERVER['SCRIPT_FILENAME'] может отличаться от пути, получаемым через __FILE__. Конечно у меня возник вопрос "какова хрена??" ведь файл один и тот же, значит путь до него должен быть одинаковый вне зависимости от способа получения. Оказывается это не совсем так.. Если папка с сайтом (которая прописана как document root в конфиге апача) является симлинком на оригинальную папку, то __FILE__ будет возвращать путь до настоящей папки, а $_SERVER['SCRIPT_FILENAME'] вернет симлинковый путь.

Я вас предупредил wink.gif



Спустя 2 часа, 54 минуты, 53 секунды (3.08.2009 - 06:58) Sylex написал(а):
Цитата
__FILE__ The full path and filename of the file. If used inside an include, the name of the included file is returned. Since PHP 4.0.2, __FILE__ always contains an absolute path with symlinks resolved whereas in older versions it contained relative path under some circumstances.


т.е. для абсолютного пути юзаем всегда __FILE__

вот скрипт:

PHP
<?php
echo '__FILE__ ' __FILE__;
echo 
'<br>$_SERVER[\'SCRIPT_FILENAME\'] ' $_SERVER['SCRIPT_FILENAME'];
Цитата
Note: If a script is executed with the CLI, as a relative path, such as file.php or ../file.php, $_SERVER['SCRIPT_FILENAME'] will contain the relative path specified by the user.


если его выполнить из командной строки, то будет разный результат:

указан относительный путь:
Код
D:\PHP>php ..\www\work1\3.php -f

__FILE__ D:\www\work1\3.php<br>$_SERVER['SCRIPT_FILENAME'] ..\www\work1\3.php

через браузер:
__FILE__ D:\www\work1\3.php
$_SERVER['SCRIPT_FILENAME'] D:/www/work1/3.php
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.