Я пишу веб-приложение и хочу что-то использовать $ _SERVER [‘SCRIPT_FILENAME’]. Я могу использовать более простой, но более ручной метод (нуждается в небольшом жестком кодировании) для этой задачи, если это действительно необходимо. Всегда ли эта переменная присутствует на (почти) всех или на большинстве веб-серверов? Разумно ли на это рассчитывать?
Я спрашиваю об этом, потому что когда-то в прошлом я слышал от некоторых ребят, что некоторые переменные $ _SERVER не могут быть установлены в значительном количестве сред / веб-серверов / ОС / … и я думаю, что читал об этом в некоторых других надежные источники тоже.
я бы предпочел __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"
Таким образом, вы должны будете увидеть, основываясь на вашей ситуации, которая является лучшей. 🙂
для этого я бы предложил __FILE__
если вы используете один из собственных PHP Магические константы Вы можете быть уверены, что он будет работать кроссплатформенно