首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

PHP包含並顯示另一個PHP文件:include vs file_get_contents 選擇指南

     編輯:程式設計綜合問答

PHP中「讀取一個PHP文件並在前台顯示」有兩種截然不同的需求與對應方法,混淆會導致安全漏洞或邏輯錯誤。

場景一:執行目標文件並輸出結果(模板複用、邏輯復用)

使用 `include` / `require`


// a.php
$title = "歡迎頁面";
include 'header.php'; // 執行header.php,輸出直接合并到當前響應
echo "內容區域";
include 'footer.php';
  • 目標文件中的PHP代碼**會被解析執行**,變量作用域**共享**(`$title`在header.php可用)。
  • 適用於:模板塊、配置文件、函數庫、類定義。
  • ⚠️ **安全**:被包含文件**必須以.php結尾**,防止源碼洩露;絕不包含用戶可控路徑。

場景二:獲取目標文件執行後的**純文本/HTML輸出**(異步填充、緩存、跨系統調用)

使用 `file_get_contents('https://domain.com/target.php')`


// 通過HTTP請求獲取執行結果
$html = file_get_contents('https://example.com/widget.php?user=123');
echo $html; // 直接輸出獲取到的HTML片段
  • 目標文件在**獨立HTTP請求中執行**,變量**不共享**,獲得的是**最終輸出字符串**。
  • 需確保`allow_url_fopen=On`(php.ini),目標URL可訪問。
  • 適用於:邊緣側包含(ESI)、微服務聚合、緩存片段獲取。

場景三:讀取文件**原始源碼**(極少用)

`file_get_contents('target.php')` — 獲取未解析的PHP源碼字符串,**不執行**。

核心區別總結

方法執行上下文變量共享輸出處理典型用途
`include/require`同一進程、同一請求是直接輸出到當前響應模板、配置、庫文件
`file_get_contents(https://...)`獨立HTTP請求否返回字符串,由調用者決定輸出片段聚合、跨系統、緩存
`file_get_contents(本地路徑)`不執行否返回源碼字符串讀取靜態資源、配置文件

安全警示

  • 🚫 **絕不** `include $_GET['file']` — 導致本地文件包含(LFI)漏洞。
  • 🚫 **絕不** `file_get_contents($_GET['url'])` — 導致服務端請求偽造(SSRF)漏洞。
  • ✅ 使用白名單、固定路徑、路徑規範化(`realpath`)。
選對方法,事半功倍;混淆概念,禍患無窮。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved