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

PHP header() 重導向後代碼仍執行的陷阱與解決方案

     編輯:PHP 綜合知識

核心觀念

header('Location: ...') 只是發送 HTTP 302 標頭,**不會** 自動終止腳本執行。瀏覽器收到標頭會跳轉,但伺服器端 PHP 繼續往下跑。若後續有危險操作(刪除資料、寫入日誌、發送郵件),將造成嚴重安全漏洞。

錯誤示範

<?php
if ($authorized) {
    header('Location: https://example.com/dashboard');
}
// 這行依然會被執行!
file_put_contents('log.txt', '敏感操作已執行');

正確做法:務必加上 exit()

<?php
if ($authorized) {
    header('Location: https://example.com/dashboard');
    exit; // 或 die();
}
file_put_contents('log.txt', '這行不會執行');

最佳實踐:封裝重導向函式

function redirect(string $url, int $status = 302): never
{
    header('Location: ' . $url, true, $status);
    exit;
}

// 使用
redirect('/login.php');

宣告回傳型別 `never`(PHP 8.1+)可讓靜態分析工具識別流程終止。

補充:啟用 SOAP 與 OpenSSL 擴充

若遇到 Class 'SoapClient' not found,請在 php.ini 中啟用:

extension=soap
extension=openssl

Windows 環境下對應 `php_soap.dll`、`php_openssl.dll`。修改後重啟 Apache/Nginx+php-fpm。

常用除錯變數速查

語法說明
var_dump($var)輸出變數型別與值(含結構)
$GLOBALS當前腳本所有全域變數
get_defined_vars()當前作用域所有已定義變數(含超全域)
get_defined_constants()所有已定義常數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved