2

全部。

我的问题是关于我在尝试为我的 DOCTYPE 部分添加通用 php 模板时遇到的问题。我的 DOCTYPE 包含(恰当地命名为 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 变量来保存文档根目录,然后连接适当的目录路径来访问文件。

有什么建议么?当我将目录结构上传到我的在线服务器而不是我当前的本地主机时,这将如何变化?

4

4 回答 4

5

您可能想尝试 $_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>
于 2012-04-03T23:11:13.840 回答
2

当您应该使用 URL(例如:http://localhost/some/path/to/ )时,您使用文件路径(例如:C:\some\path\to\file)指向本地计算机上的文件文件)。HTML 由客户端的浏览器解析,因此当它尝试访问不是 URL 的路径时,它不能。

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

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

其中“/path”文件夹是您的基本 Web 目录,或者您可以根据包含 doctype.php 文件的文件所在的当前目录使用相对 URL。我建议不要做后者,因为跟踪它是一件很痛苦的事情。

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

于 2012-04-03T23:11:33.680 回答
1

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

例如:

<script type="text/javascript" src="http://localhost/myproject/media/ja/file.js"></script>
于 2012-04-03T23:10:06.287 回答
0

您在页面中包含文件的方式错误,您应该改用 HTTP URL:

<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>
于 2012-04-03T23:13:39.003 回答