includes中的绝对路径带有localhost


Absolute paths within includes with localhost

all。

我的问题是关于我在尝试为DOCTYPE部分添加通用php模板时遇到的一个问题。我的DOCTYPE include(恰当地命名为DOCTYPE.php)位于/template目录中,还包括指向我希望所有页面都能访问的CSS和JS文件的调用。

因此,当我试图编写这些文件(CSS和JS文件)的绝对路径时,就会遇到这个问题。目前,我正在尝试:

<script type="text/javascript" src="<?php echo $_SERVER['DOCUMENT_ROOT'] . '/file/extension/to/javascript/file.js'; ?>"></script>

<link rel="stylesheet" type="text/css" href="<?php echo $_SERVER['DOCUMENT_ROOT'] . 'file/extension/to/css/file.css'; ?>"

我正在本地主机上通过WAMP运行应用程序。看看源代码,似乎链接指向了相应的文件(c:''wamp/www/examplesite/path/to/file/file.ext),一切都应该很好。但它不是。。。

JavaScript不可访问,样式表也不起作用。我不知所措。

我还尝试过:-在不使用PHP的情况下编写绝对路径-创建PHP变量来保存文档根,然后连接适当的目录路径来访问文件。

有什么建议吗?当我将目录结构上传到我的在线服务器时,与我当前的本地主机相比,这将如何改变?

您可能需要尝试$_SERVER['HTTP_REFERER']。它为你提供了你正在寻找的道路。

在使用WAMP的本地机器上,我使用<?php print_r($_SERVER); ?>来查看它给出的值。

此外,片段中可能存在一些拼写错误。例如,在你给出的第一个例子中,你不需要前导/。

例如:

<script type="text/javascript" src="<?php echo $_SERVER['HTTP_REFERER'] . 'file/extension/to/javascript/file.js'; ?>"></script>
<link rel="stylesheet" type="text/css" href="<?php echo $_SERVER['HTTP_REFERER'] . 'file/extension/to/css/file.css'; ?>"></link>

或者,由于HTTP_REFERER在某些情况下是不可信的,您可能需要创建一个函数来构建绝对路径的基本部分。

<?php
function getAddress() {
    $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http';
    $filenamepattern = '/'.basename(__FILE__).'/';
    return $protocol.'://'.$_SERVER['HTTP_HOST'].preg_replace($filenamepattern,"",$_SERVER['REQUEST_URI']);
 } 
?>

然后这样称呼它:

<script type="text/javascript" src="<?php echo getAddress() . 'file/extension/to/javascript/file.js'; ?>"></script>
<link rel="stylesheet" type="text/css" href="<?php echo getAddress() . 'file/extension/to/css/file.css'; ?>"></link>

当您应该使用URL(例如:http://localhost/some/path/to/file)。HTML由客户端的浏览器解析,因此当它试图访问非URL的路径时,它无法访问。

您可以使用绝对URL,如,而不是使用$_SERVER['DOCUMENT_ROOT']

<script type="text/javascript" src="/path/to/my/file.js"></script>

其中"/path"文件夹是您的基本web目录,或者您可以使用基于文件所在的当前目录的相对URL,其中包括doctype.php文件。我建议不要做后者,因为这是一件很痛苦的事。

如果您使用相对URL,那么在将代码移动到新主机时应该没有问题,前提是目录结构保持不变。

当然,任何类型的资源(JS、CSS、Images等)都必须通过http请求访问,因此不可能使用绝对路径直接访问它们。想想这种方法对安全的影响。因此,您必须始终使用相对于web根目录的web路径。

例如:

<script type="text/javascript" src="http://localhost/myproject/media/ja/file.js"></script>

如果在页面中包含文件的方式不对,应该使用HTTP URLS:

<script type="text/javascript" src="/file/extension/to/javascript/file.js"></script>

或者,如果您喜欢使用主机名为的变量

<script type="text/javascript" src="http://<?php echo $_SERVER['HTTP_HOST']; ?>/file/extension/to/javascript/file.js"></script>