我目前在我的应用程序的配置文件中有以下内容:
define('DOCROOT', dirname(__FILE__).DIRECTORY_SEPARATOR);
define('WEBROOT', 'http://localhost/samples/');
第一行完美无缺。我可以在任何地方包含配置文件,然后按预期使用DOCROOT
常量。
第二行也适用,但它是硬编码的,这意味着当我将此文件上传到我的网络服务器时,它将是错误的。它应该是http://samples.example.com
。是否有一种好方法可以防止这种硬编码?我觉得我必须在某个地方硬编码,在那种情况下,我可以逃脱的是什么和多少?
答案 0 :(得分:3)
我使用以下代码查找基本网址:
function getBaseURL() {
return 'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://'
. $_SERVER['HTTP_HOST']
. rtrim(dirname($_SERVER['SCRIPT_NAME']), '/\\')
. '/'
;
}
答案 1 :(得分:2)
define('WEBROOT', 'http://'.$_SERVER['HTTP_HOST'].'/');
答案 2 :(得分:1)
您可以更进一步,并确保用户是否通过HTTPS访问,您为他们提供HTTPS ....
if (isset($_SERVER["HTTPS"]) && $_SERVER['HTTPS'] == 'on') {
$target_url = "https://" . $_SERVER["SERVER_NAME"];
} else {
$target_url = "http://" . $_SERVER["SERVER_NAME"];
}
define('WEBROOT', $target_url);
答案 3 :(得分:0)
“破解”这种方法的一种方法是检查外部请求IP。如果ip为127.0.0.1
,则将WEBROOT定义为http://localhost/samples
,否则将其定义为http://samples.example.com
答案 4 :(得分:0)
'http://'.$_SERVER['HTTP_HOST']. str_replace(str_replace("\\","/",str_replace(realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR, "", realpath($_SERVER['SCRIPT_FILENAME']))), "", $_SERVER['PHP_SELF']);
我在localhost上测试过它。 把它放在配置文件中。