Могу ли я рассчитывать на наличие $ _SERVER [‘SCRIPT_FILENAME’]?

Я пишу веб-приложение и хочу что-то использовать $ _SERVER [‘SCRIPT_FILENAME’]. Я могу использовать более простой, но более ручной метод (нуждается в небольшом жестком кодировании) для этой задачи, если это действительно необходимо. Всегда ли эта переменная присутствует на (почти) всех или на большинстве веб-серверов? Разумно ли на это рассчитывать?

Я спрашиваю об этом, потому что когда-то в прошлом я слышал от некоторых ребят, что некоторые переменные $ _SERVER не могут быть установлены в значительном количестве сред / веб-серверов / ОС / … и я думаю, что читал об этом в некоторых других надежные источники тоже.

0

Решение

я бы предпочел __FILE__на том основании, что его легче набирать и читать.

PHP имеет странное поведение для обоих способов определения имени текущего скрипта. Я основываю это на выводе этого скрипта:

var_dump(__FILE__);
var_dump($_SERVER['SCRIPT_FILENAME']);
var_dump(realpath(__FILE__));
var_dump(realpath($_SERVER['SCRIPT_FILENAME']));

PHP 5.6 командная строка, Windows, Cygwin:

string(40) "/cygdrive/c/file.php"string(8) "file.php"string(40) "/cygdrive/c/file.php"string(40) "/cygdrive/c/file.php"

PHP 5.6 командная строка, Windows, cmd:

string(31) "C:\file.php"string(8) "file.php"string(31) "C:\file.php"string(31) "C:\file.php"

Apache + PHP 5.6, Windows:

string(31) "C:\file.php"string(31) "C:/file.php"string(31) "C:\file.php"string(31) "C:\file.php"

PHP 5.4 командная строка, Linux:

string(35) "/var/www/blah/file.php"string(8) "file.php"string(35) "/var/www/blah/file.php"string(35) "/var/www/blah/file.php"

Nginx + PHP 5.4, Linux:

string(35) "/var/www/blah/file.php"string(35) "/var/www/blah/file.php"string(35) "/var/www/blah/file.php"string(35) "/var/www/blah/file.php"

Таким образом, вы должны будете увидеть, основываясь на вашей ситуации, которая является лучшей. 🙂

1

Другие решения

для этого я бы предложил __FILE__ если вы используете один из собственных PHP Магические константы Вы можете быть уверены, что он будет работать кроссплатформенно

0

По вопросам рекламы [email protected]