0

我意识到我在我的 PHP 文件中一遍又一遍地使用了一个特定的函数,所以我从所有这些文件中取出了这个函数,并将它放在一个单独的 PHP 文件中,并将它包含在我需要的地方。

现在,当我对函数进行更新时,所有使用它的文件都会更新。伟大的。

现在只有一个问题,函数本身使用相对 URL,当您包含 PHP 时,文件是相对于调用 PHP 的,而不是包含的 PHP 目录。我知道快速而肮脏的答案是使用绝对链接,但是我怎样才能让包含的 PHP 将事物引用到 ITSELF 而不是调用它的 PHP。

例子:

index.php 包含一个名为 create_table.php 的文件..... create_table.php 将 CSS 和 javascript 与 index.php 相呼应。CSS 和 javascript 与 create_table.php 位于同一目录中,但是当使用 src="javascript.js" 时,它希望找到 index.php 所在的 javascript.js,而不是 create_table.php 所在的位置。

编辑:结构如何工作

/includes/create_table.php
/includes/style.css
/includes/javascript.js
/test/dir/1/2/3/index.php

因此,当我尝试使用 src="javascript.js" 而不是查找/includes/javascript.js时,它会尝试查找/test/dir/1/2/3/javascript.js

4

4 回答 4

2

使用绝对链接不是“快速而肮脏”,而是绝对必要的事情。
而且您的问题与 PHP 几乎没有共同之处。这是HTML问题。从HTML代码读取链接后,调用您的 CSS 文件的不是 PHP,而是浏览器。

绝对路径的唯一目的是解决您的问题 - 从任何位置查找特定文件。
当然它应该只是路径,而不是 URI。所有 HTML 链接都可以(并且应该)缩短为路径部分。

而不是寻找/includes/javascript.js

答对了!
因此,只要告诉它寻找这个地址,一个绝对的地址——/includes/javascript.js

于 2010-07-25T19:20:03.027 回答
0

我认为您最终将不得不使用绝对路径。问题是如何在不硬编码的情况下获得这些绝对路径......

您可以使用魔术常量__FILE__来获取当前脚本的绝对路径(即 create_table.php),然后执行以下操作:

$filename = realpath(dirname(__FILE__).'/../../css/mystyles.css');

要获取您知道的相对于当前脚本的文件的绝对路径。(即向上两个目录并向下进入 css/)

或者您可以从其他方式开始并使用$_SERVER['DOCUMENT_ROOT']. 假设您知道与您的 webroot 相关的所有路径。这将是我的首选方式。


编辑:我认为您几乎可以忽略上述内容!我假设(在您编辑之前)您实际上是在服务器端读取您的 CSS 和 JavaScript 文件并将其内容添加到 index.php - 我猜不是!

重新回答...由于这个问题,我永远不会对客户端 CSS 和 JavaScript使用相对路径URL。有些人总是使用绝对 URL,我个人更喜欢根相对 URL。如果您是在服务器端生成此 URL,则无关紧要。

根相对 URL:/includes/style.css

您认为这有什么问题?我会说这是首选。

于 2010-07-25T19:21:47.207 回答
0

可能有更好的方法来处理您尝试做的任何事情,而不是动态地从 PHP 函数中请求文件。

至少,绝对路径是关键,通常从根目录开始是绝对路径,例如:require_once("/lib/fileOne.php");

不是:require_once("lib/fileOne.php");

于 2010-07-25T19:33:00.427 回答
-1

所以你说有一个总是需要的文件。在此文件中,有一个__FILE__SCRIPT_FILENAME. 因此,例如,您知道includes/create_table.php根目录的路径是../,所以它有一个文件夹差异1,如果路径是includes/foo/create_table.php,根目录的路径将是../../差异2,等等......

$dif_to_root=1;

for
(
$i=0,$path='';
$i<($dif_to_root-(count(explode('/',__FILE__))-count(explode('/',getenv('SCRIPT_FILENAME')))));
$i++
)$path.='../';

现在只需在您的代码中src="$path.includes/style.css"

于 2010-07-25T19:43:15.047 回答