我可以依靠$ _SERVER [' SCRIPT_FILENAME']的可用性吗?

时间:2015-03-10 21:52:44

标签: php environment-variables superglobals

我正在编写一个网络应用程序,并希望使用$ _SERVER ['SCRIPT_FILENAME']。如果真的有必要,我可以使用更简单但更手动(需要一些小硬编码)的方法来执行该任务。 (几乎)所有或大多数Web服务器中的变量是否始终可用?依靠它是明智的吗?

我问这个是因为过去的某个时候我从某些人那里听说过一些$ _SERVER变量可能没有在相当多的环境/ web服务器/操作系统中设置......我想我已经读过这个了在一些更可靠的消息来源中也是如此。

2 个答案:

答案 0 :(得分:1)

我更喜欢__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 :(得分:0)

因为我建议__FILE__如果你使用php自己的Magic constants,你可以确定它可以跨平台工作