2010-05-04 151 views
1

我试图把我的页面(这是所有的HTML)的顶部放在一个单独的文件中,所以我只需要改变一次就像菜单栏等 所以我GOOGLE了一些,并在这个网站上找到了解决方案,但它不起作用,我不知道为什么。在html中嵌入php将页眉(页面的顶部)包含到页面中

所以我有一个网页一样article.html和顶部我有这样的:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01   
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html lang="en"> 
<head> 

<?php include("/pages/header.php"); ?> 

<!-- rest of the html code --> 

在header.php中我有一个应该是在每个页面顶部的HTML,并将其与开始:

<?php 
/** 
* @author name 
* website header 
*/ 
?> 

<!-- html code --> 

那么这有什么问题。当我打开article.html页面并右击它查看源代码时,我可以看到上面的php调用header.php文件。

谢谢!

FYI:我已经在服务器上启用PHP

编辑:我改变了文件路径为“../pages/header.php”,现在它的工作原理。我不知道为什么它像这样工作..?

+0

您是否检查了错误消息的error_log? – gurun8 2010-05-04 13:18:45

回答

2

您在相对路径的开始处放置了“/”。你应该删除它。这使它成为绝对路径。它应该可能是include("pages/header.php");

+0

它不应该是相对的,因为路径应始终从根文件夹开始。 header.php只存在于根目录/ pages/header.php nd其他.html页面可能不在根目录中 – theDoctor 2010-05-04 13:20:17

+1

您的服务器将搜索该文件,而不是浏览器。您的服务器将假设根目录代表所在计算机的根目录,而不是域的根目录。 – 2010-05-04 13:28:12

+0

@Andy:但是,你仍然会错过'/ root /'部分。如果你在PHP的include中使用绝对路径,它们将被评估*真正*绝对的,也就是从你的操作系统的根目录(chroot放在一边;就像'/ var/www/demo/root/pages/header.php')。 – Boldewyn 2010-05-04 13:32:00

4

您不能在html文件中使用php代码。

将名称article.html更名为article.php

+0

你在我做之前的43秒钟回答:D – Cristian 2010-05-04 13:19:30

+0

难道不可能在html中嵌入php吗? – theDoctor 2010-05-04 13:21:03

+0

@Casidiablo,是的,通常人们会在我做43秒前回答,所以有一点改变是值得的:D – 2010-05-04 13:21:17

2

我觉得这个网页你有这个:<?php include("/pages/header.php"); ?>不是PHP文件...你查询过它的文件扩展名吗?它必须是:文章。 php

+0

它是一个.html文件,不是一个PHP文件。但是将php代码嵌入html应该是可能的。 – theDoctor 2010-05-04 13:29:43

+0

@安迪,如果你的服务器发送的HTML不是通过PHP解析器首先发送的话。 – richsage 2010-05-04 13:30:29

1

听起来好像您的服务器设置为不将.html文件解析为PHP文件。这是正常的设置 - 尝试将article.html重命名为article.php,看看是否能解决问题。如果是这样,你可以重新配置你的服务器来解析.html文件作为PHP(详情请咨询https://serverfault.com/),或者使用mod_rewrite将.html文件重定向到它们的.php文件。等效

+0

是的,我只是尝试将它重命名为.php,它工作。 我正在使用我的家庭服务器,稍后我会尝试在我的托管服务提供商的服务器上查看他们是否将.html解析为PHP。 我知道嵌入php必须可以html! – theDoctor 2010-05-04 13:26:40

+0

@安迪,大多数服务器不会被设置为这样做,因为它在大多数不需要的情况下会导致额外的开销(认为不使用PHP并且只是标准HTML页面的网站)。 – richsage 2010-05-04 13:31:28

2

include,require,include_once和require_once工作与完整的服务器路径最好。尝试使用类似:

<?php include($_SERVER['DOCUMENT_ROOT'] . '/pages/header.php'); ?> 

从PHP文档:

文件是基于给定的文件 路径包括,或者,如果没有给定,指定 包含路径。如果 找不到文件,include() 构造将发出警告;这是与require()不同的 行为,这会使 发出致命错误。

如果定义了路径(完整或相对于 ),那么include_path将全部忽略为 。例如,如果一个 文件名以../开头,则解析器 将在父目录中查找到 查找请求的文件。

欲了解更多有关PHP 如何处理,包括文件和 包括路径,请参阅文档 为include_path

请注意,相对起始点始终来自正在执行的文件。因此,如果包含来自多个目录的文件,并且入口点可以从多个目录执行(该死的,这很难解释:)),那么在include中使用相对路径和绝对路径会导致错误。

另外,正如其他人指出的,您不能在纯HTML文件中使用PHP语句(至少默认情况下)。那些语句将被视为纯文本。将你的html文件重命名为php,或者让.htaccess告诉服务器把这个文件当作一个php文件。

+0

唯一的好答案。虽然我会说没有相对或绝对路径,只要路径是正确的,而/pages/header.php不正确的确实 – 2010-05-04 13:35:28

+0

这很奇怪,但是这根本不起作用,可能某处出现了一些错字? – theDoctor 2010-05-04 13:40:58

+0

当你用你的FTP软件进入你的主机空间时,当你在“pages”目录下显示的FULL路径是什么? – AlexV 2010-05-04 13:42:49

0

我没有完全读你的问题。这听起来好像你没有通过PHP解释器传递你的代码。 PHP文件是必须由服务器上的程序解释的代码。他们倾向于在扩展.php结束您需要查看您的主机是否提供PHP。他们可能会这样。如果是这样,您可以尝试将文件重命名为article.php

+0

这可能是它,将不得不检查我的家庭服务器设置,并会在我的托管服务器上尝试它 – theDoctor 2010-05-04 13:30:38

+1

@Andy你会检查什么设置,你会尝试什么?重命名文件?它不是* * *硬:) – 2010-05-04 13:32:55

+0

设置为解析php为html ... 重命名工作正常,但将不得不重新命名所有页面中的每一个其他链接 – theDoctor 2010-05-04 14:02:15

0

检查你的PHP配置文件(我的服务器上是/etc/apache/mod_php.conf)以下行

# Load the PHP module 
LoadModule php5_module libexec/apache/libphp5.so 

# Tell Apache to feed all *.php files through the PHP module 
AddType application/x-httpd-php .php .phtml 

然后,确保每一个文件或者include“d或要求直接有扩展名.php。

0

我觉得你得到一个很好的把握,包括如何从所有其他答案的作品,但使事情变得复杂了一点,我想提一提,你可以走另一条路轮:包括内.php.html文件文件可以按照您的预期工作(也就是说,当您设置关于服务器的路径而不是文件根目录时)。

这是为什么?您可以从其他答案中了解到,当请求一个PHP文件时,服务器将它放入php程序并将结果输出给用户。因此,您必须将原始文件重命名为.php(以便服务器执行此操作)。

现在,里面 PHP,你有包括声明。正如你所学到的,它会获取另一个文件并将其嵌入到它的位置,就像内容将在字面上一样(也就是说,假设前一个额外的?>和之后的<?php)。

如果你现在包含一个简单的HTML文件,PHP提取文件并将其放置到位,评估其中的所有代码。由于HTML文件也是有效的PHP文件,所发生的一切就是将HTML发送到浏览器。

为了把它概括地说:试着去理解,什么工具做什么:

  • 浏览器(或者更一般地说,客户)发送一个请求
  • 服务器(例如,阿帕奇)试图找到适合请求
  • 服务器文件,也看到了:“哦,一个PHP文件,我应该管它通过PHP rpogram,说我的配置”
  • PHP外观从服务器通过每个<?php ... ?>内的东西,并试图评估,作为PHP代码。其他的东西都是独立存在的,并按原样发送到浏览器。
  • 浏览器得到解析响应,也就是没有在任何<?php ... ?>段,因为他们把他们

你的情况之前得到处理,然后通过PHP删除: include语句位于PHP代码段中,因此它是PHP“看到”的一部分。它将在服务器上进行评估,并且从未将发送到浏览器。