隨著互聯網時代的發展,人們對于網站的要求也越來越高,尤其是對于表單的處理。而在網站開發當中,PHP input 是經常用到的一種輸入方式,但有時候你會發現它完全失效,那么在本文中,我們將就這個問題進行探討。
在我們探討之前,先來了解一下什么是 PHP input。它是一個全局變量,用于獲取 POST 請求內容的原始數據。在 PHP 當中,我們通常使用 $_POST 來獲取表單中的各個參數,而使用 $HTTP_RAW_POST_DATA(在 PHP 5.6 以前有效)和 file_get_contents("php://input") 來獲取傳遞的數據的原始格式。當然,在使用過程中,其實我們也是經常用到 $_FILES,$_REQUEST 和 $_GET 等變量的。
那么 PHP input 失效的原因有哪些呢?其中最常見的就是 PHP.ini 中的設置問題。有的時候,當 PHP 腳本中的 $_POST 數組為空時,而 $HTTP_RAW_POST_DATA 或 file_get_contents("php://input") 卻為假,就說明在 PHP.ini 的配置中我們已經關閉了 POST 請求的緩存。此時就需要在 php.ini 配置文件中打開 REQUEST 以啟用它。我們可以在是否啟用以下 ADP 部分的字段中查看更多選項:
rds / fastcgi_request
在打開的同時,我們還需要確認 PHP.ini 中開啟了 POST 請求緩存,我們可以通過以下代碼塊來進行配置:
post_max_size = 100M
在更復雜的使用 PHP input 的時候,我們需要在后端代碼中添加一些頭部信息和附件。為此,我們可以使用以下代碼:
$fp = fopen('php://input', 'r'); $payload = ''; while (!feof($fp)) { $payload .= fread($fp, 1024); } fclose($fp); $headers = []; foreach ($_SERVER as $key =>$value) { if (substr($key, 0, 5) == 'HTTP_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($key, 5)))))] = $value; } } var_dump($payload, $headers, $_FILES); exit;
除此之外,可能還有一些其他的原因導致了 PHP input 的失效,比如:表單沒有 enctype 屬性被設置的信息,也可能是跨站腳本響應(XSS)的防范措施失效,這就需要開發者在編寫代碼的時候做出針對性的優化和處理。
綜上所述,PHP input 失效的原因并不單一,但我們可以通過調整 PHP.ini 配置中的參數來解決最常見的緩存問題。當然,在開發過程中,我們還需要對表單的手動處理和頭信息的處理等技巧進行更深入的了解。相信通過針對性地解決這些問題,我們能夠更好更準確地使用 PHP input 這個強大的輸入方式,為我們的應用程序帶來更加流暢和完善的用戶體驗!