为什么JavaScript中的链接路径不需要precedding /但是PHP中的路径包括do?

时间:2012-05-20 18:41:11

标签: php javascript

听起来很挑剔,但这让我挂了大约一个小时左右。

我在JavaScript中设置了这样的路径

const JAVASCRIPT =              'host/source/ArcJB.js';

在我的文档中呈现如下:

<script type="text/javascript" src="host/source/ArcJ.js"></script>

如果我放入前面的/,则会断开链接。

在PHP中,对于服务器端路径,我使用:

<?php
    include_once getcwd() . "/host/source/class.ControlEntry.php";

如果我没有加入/它就会破坏它。

我从概念上猜测我怎么想知道这一点所以我不需要经过反复试验来解决问题?

还注意到:

我的.js文件中的路径使用路径前面的//

这些用于图像查找或ajax调用。

3 个答案:

答案 0 :(得分:6)

您应该知道传递给include_once的路径在服务器本身上解析,而Javascript中的路径由浏览器解析。两者基本上遵循相同的规则:

  • 绝对可以解决以/开头的路径。在服务器上,这是根目录(即最顶层的目录)。在浏览器中,这基本上是连接主机和您指定的路径。
  • 不以/开头的路径相对解析,即针对服务器上的当前目录和浏览器中的路径。

意识到getcwd()返回类似/var/www的目录。如果您只是将host/source/class.ControlEntry.php与其联合,则会产生/var/wwwhost/source/class.ControlEntry.php。在大多数(如果不是全部)PHP SAPI上,您可以在包含文件时省略getcwd()事物,因为在包含文件时已经搜索了当前目录。在这种情况下,您也不需要/

最后,服务器文件路径不必与网址匹配http://example.com/script.php位于/var/www/script.js。如果您在HTML文件中引用/script.php,则会正确解析。另一方面,您不应该尝试include "/script.php",这将在您的文件系统的根目录中搜索文件script.php,这通常不是您要查找的内容。

答案 1 :(得分:3)

前面的斜杠用于表示路径应该被视为绝对路径,这意味着,

  1. 对于您的Js路径,它位于HTML文件中,该文件由浏览器解析以呈现其内容,它应该附加您写入域的内容以获取文件。如果您的Js文件位于您的代码段所在的当前页面的相对位置,则该链接可能会中断。
  2. 对于您的php文件,它位于一个路径中,可以通过以下系统root访问host/source/class.ControlEntry.php

答案 2 :(得分:2)

您知道文件的位置。使用它们的相对或绝对路径,它将在PHP和JavaScript中都有效。

在您的示例中,前面的/将使路径指向其他位置,从而破坏应用程序。在PHP示例中,您特别连接路径字符串 - 它将取决于getcwd()的评估。