2010-05-04 154 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「看到」的一部分。它將在服務器上進行評估,並且從未將發送到瀏覽器。