7

我目前在我的应用程序的配置文件中有以下内容:

define('DOCROOT', dirname(__FILE__).DIRECTORY_SEPARATOR);
define('WEBROOT', 'http://localhost/samples/');

第一行完美运行。我可以在任何地方包含配置文件,然后DOCROOT按预期使用常量。

第二行也可以,但它是硬编码的,这意味着当我将此文件上传到我的网络服务器时,它会出错。它应该在那里http://samples.example.com。有什么好的方法可以防止这种硬编码吗?我有点认为我必须在某个地方硬编码一些东西,在那种情况下,我能逃脱什么,能逃脱多少?

4

5 回答 5

3

我使用以下代码查找基本 URL:

function getBaseURL() {
    return 'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://'
         . $_SERVER['HTTP_HOST']
         . rtrim(dirname($_SERVER['SCRIPT_NAME']), '/\\')
         . '/'
    ;
}
于 2011-07-04T17:20:52.690 回答
2
define('WEBROOT', 'http://'.$_SERVER['HTTP_HOST'].'/');
于 2011-07-04T17:03:17.270 回答
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);
于 2011-07-04T17:26:19.377 回答
0
'http://'.$_SERVER['HTTP_HOST']. str_replace(str_replace("\\","/",str_replace(realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR, "", realpath($_SERVER['SCRIPT_FILENAME']))), "", $_SERVER['PHP_SELF']);

我在本地主机上测试了它。把它放在你的配置文件中。

于 2011-07-04T17:29:43.227 回答
0

“破解”此问题的一种方法是检查外部请求 IP。如果 ip127.0.0.1定义为 WEBROOT http://localhost/samples,否则定义为http://samples.example.com

于 2011-07-04T17:07:24.590 回答