【问题标题】:PHP Include calling other filesPHP Include 调用其他文件
【发布时间】:2010-07-25 19:13:55
【问题描述】:

我意识到我在我的 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

【问题讨论】:

  • 看起来你的文件在同一个目录下,哈哈。也给我们文件夹路径。
  • 我会看看你的目录结构。例如,CSS 文件的目录; JavaScript 文件的目录;一个常见的目录;等等。它使此类问题更容易处理。
  • 特定的目录结构无关紧要

标签: php html relative-path absolute-path


【解决方案1】:

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

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

而不是寻找 /includes/javascript.js

宾果游戏!
因此,只需告诉它寻找这个地址,绝对地址 - /includes/javascript.js

【讨论】:

  • +1 是的,宾果游戏! :) 如果有的话,情况正好相反——相对 URL 是“又快又脏”的 IMO。尽管如下面的 cmets 所述,严格来说,绝对 URL 包含完整的域。这是一个相对于根的 URL。
【解决方案2】:

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

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

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

【讨论】:

  • 这似乎是客户端 URL 问题,而不是服务器端路径问题。
【解决方案3】:

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

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

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

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

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


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

重新回答...由于这个问题,我会从不对客户端 CSS 和 JavaScript 使用相对 pathsURL。有些人总是使用绝对 URL,我个人更喜欢根相对 URL。如果你是在服务器端生成这个 URL,那也没关系。

根相对 URL:/includes/style.css

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

【讨论】:

  • 你确定这段代码会有帮助吗? ;-) 这个 $filename 变量有什么用?
  • 啊,自从我第一次回答以来,问题已经被修改了! “将 CSS 和 javascript 与 index.php 相呼应。” - 暗示 CSS 和 JavaScript 已被读取并从字面上插入到 index.php 中!看来他们毕竟是有联系的! ($filename 是 mystyles.css 文件的绝对文件名,您知道当前脚本的相对路径。)
  • “根相对”路径通常称为“绝对”。不要将 pathURL 混淆。
  • 抱歉,我已将上面的“相对路径”更正为“相对 URL”。但“根相对”和“绝对”网址相同。绝对 URL:http://www.example.com/includes/style.css 而根相对 URL 是:/includes/style.css(例如受 BASE 元素影响)
【解决方案4】:

所以你是说有一个文件总是需要的。在这个文件中,有一个比较 __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"

【讨论】:

    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    相关资源
    最近更新 更多