【问题标题】:php include statementphp包含语句
【发布时间】:2010-07-29 02:18:58
【问题描述】:

我正在使用 php 开发我的第一个网站。我想出了一个好方法,或者我想,根据我的位置来处理包含 css 表的问题。例如,我有一个使用以下代码提交的表单:

 $root = '../';


 function died($error) 
 {
  include '../includes/header.php';
  echo "We are very sorry, but there were error(s) found with the form your submitted. ";
  echo "These errors appear below.<br /><br />";
  echo $error."<br /><br />";
  echo "Please go back and fix these errors.<br /><br />";
  include '../includes/footer.php';
  die();
 }

我将变量 $root 设置为“../”,然后这里是 header.php 的相关部分:

<link href="<?php echo $root;?>styles/styles.css" rel="stylesheet" type="text/css" />

我认为它会在样式前添加“../”,但它没有添加任何内容。为什么这不起作用?

谢谢!

【问题讨论】:

  • 不要表现得像预期的那样,但我同意@webdestroya:只需一秒钟即可将答案标记为已接受。回顾您的一些旧问题并将最佳答案标记为已接受(复选框标记答案)。我会是你最好的朋友!我给你口香糖!
  • 对不起,我是这个网站的新手!我的很多问题都没有得到解答,但这个问题似乎有很多答案,所以我会一一解答!

标签: php html css


【解决方案1】:

$root 不在该功能的范围内(我假设..) 将global $root; 添加到函数顶部,它应该可以工作。

$root = '../';

function whatever() {
  global $root;

  echo "<link rel=stylesheet type=text/css href=\"" . $root . "something.css . "\">";
}

【讨论】:

  • 如果我将其设为全局,是否对整个站点都是全局的?如果我将其他东西定义为 $root 怎么办?
  • 在该函数中将其声明为全局意味着该函数将使用全局定义的 $root。函数 someFunction(){ 全局 $root; //这里 $root 被定义为它被定义的任何东西 //在全局上下文中 }
  • 它没有在函数内部定义,所以它在'main'范围内。如果你想使用在函数外部定义的变量,你必须像我一样将它作为全局引用说。它不会影响在该内部范围内可能具有同名变量的其他函数。
【解决方案2】:

您可以将 CSS 文件的路径设为绝对路径:

<link href="/styles/styles.css" rel="stylesheet" type="text/css" />

在 URL 前加上正斜杠 (/) 将使 URL 相对于您网站的根目录。上面的示例将引用类似http://example.com/styles/styles.css 的内容。这样,您可以将所有 CSS 放在网站根目录的文件夹中,而完全不必担心路径。

【讨论】:

  • 我不同意,因为这使得将站点移植到另一个子目录变得更加困难。使用变量来定义该站点的根目录可以更轻松地将站点移动到其他位置。 (我在工作中经常处理这个问题。)
  • @Chris:我是一名专业的 Web 开发人员,目前在 Mozilla 工作。如果您将其包含在您的header.php 文件中作为操作执行,那么您只需修改该值一次。此外,网站应该只有一个 css 文件。重点是将所有样式信息集中到一个文件中并减少开销。
  • 我无法让它工作! 在“includes/header.php”中说找不到对象
  • 实际上我必须把它做成 。你猜有没有办法解决这个问题?
  • @JPC:这就是想法:将它指向正确的文件夹,就像你所做的那样。如果 HTML 在您的header.phpinclude.php 文件中,则只需在目录更改时更改href="" 属性即可。
【解决方案3】:

在这种情况下,我的建议是使用 $root = "FULL path";

例如...如果您的 Web 根目录位于“/var/www/html/”中,并且您正在处理一个项目,则可以将其命名为 sampleProject,它位于“/var/www/html/sampleProject”中。

设置 $root="/sampleProject/; 当你使用诸如 样式/styles.css"/> 你最终得到 这就是你想要的。

与其他答案不同,我认为这使您的代码更具可移植性。例如,如果您将站点“sampleProject”移动到 /var/www/html/dir1/dir2/dir3/sampleProject/ 您需要做的就是更改 $root="/dir1/dir2/dir3/sampleProject/" 它会仍然工作。然而,如果您按照某些人的建议使用显式完整路径,则每次移动站点时都必须更改此设置。

【讨论】:

  • 这不适用于 OP 要求的前端 URL。无论如何,这可以通过使用诸如dirname(__FILE__) 之类的魔术常量来更好地完成,它会生成文件路径的动态版本(不需要硬路径)。
  • 我的建议不仅仅是处理 URL。此外,使用 dirname(FILE) 可能并不理想。例如,您可能希望在父目录中使用 css,除非我遗漏了什么,否则使用 dirname(FILE) 将无济于事。
  • 在这种情况下,使用$root 变量仍然不是最佳的。 Web 服务器非常智能,可让您访问根目录:getenv("DOCUMENT_ROOT")。考虑:substr(dirname(__FILE__),strlen(getenv("DOCUMENT_ROOT")))。重新发明轮子是一回事,把轮子重新发明成三角形是另一回事。
  • 谢谢,我以前从未想过这个...感谢知识。 :-)
【解决方案4】:

对于像这样的引用文件,您只需要以正斜杠开始路径,然后该路径相对于您的根目录...

<link href="/styles/styles.css" rel="stylesheet" type="text/css" />

【讨论】:

    猜你喜欢
    • 2013-11-13
    • 2016-03-05
    • 2014-06-14
    • 2011-02-13
    • 2021-10-30
    • 1970-01-01
    • 2012-02-26
    • 2021-12-21
    • 2013-12-27
    相关资源
    最近更新 更多