隨著互聯(lián)網(wǎng)時代的發(fā)展,人們對于網(wǎng)站的要求也越來越高,尤其是對于表單的處理。而在網(wǎng)站開發(fā)當(dāng)中,PHP input 是經(jīng)常用到的一種輸入方式,但有時候你會發(fā)現(xiàn)它完全失效,那么在本文中,我們將就這個問題進(jìn)行探討。
在我們探討之前,先來了解一下什么是 PHP input。它是一個全局變量,用于獲取 POST 請求內(nèi)容的原始數(shù)據(jù)。在 PHP 當(dāng)中,我們通常使用 $_POST 來獲取表單中的各個參數(shù),而使用 $HTTP_RAW_POST_DATA(在 PHP 5.6 以前有效)和 file_get_contents("php://input") 來獲取傳遞的數(shù)據(jù)的原始格式。當(dāng)然,在使用過程中,其實我們也是經(jīng)常用到 $_FILES,$_REQUEST 和 $_GET 等變量的。
那么 PHP input 失效的原因有哪些呢?其中最常見的就是 PHP.ini 中的設(shè)置問題。有的時候,當(dāng) PHP 腳本中的 $_POST 數(shù)組為空時,而 $HTTP_RAW_POST_DATA 或 file_get_contents("php://input") 卻為假,就說明在 PHP.ini 的配置中我們已經(jīng)關(guān)閉了 POST 請求的緩存。此時就需要在 php.ini 配置文件中打開 REQUEST 以啟用它。我們可以在是否啟用以下 ADP 部分的字段中查看更多選項:
rds / fastcgi_request
在打開的同時,我們還需要確認(rèn) PHP.ini 中開啟了 POST 請求緩存,我們可以通過以下代碼塊來進(jìn)行配置:
post_max_size = 100M
在更復(fù)雜的使用 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;
除此之外,可能還有一些其他的原因?qū)е铝?PHP input 的失效,比如:表單沒有 enctype 屬性被設(shè)置的信息,也可能是跨站腳本響應(yīng)(XSS)的防范措施失效,這就需要開發(fā)者在編寫代碼的時候做出針對性的優(yōu)化和處理。
綜上所述,PHP input 失效的原因并不單一,但我們可以通過調(diào)整 PHP.ini 配置中的參數(shù)來解決最常見的緩存問題。當(dāng)然,在開發(fā)過程中,我們還需要對表單的手動處理和頭信息的處理等技巧進(jìn)行更深入的了解。相信通過針對性地解決這些問題,我們能夠更好更準(zhǔn)確地使用 PHP input 這個強(qiáng)大的輸入方式,為我們的應(yīng)用程序帶來更加流暢和完善的用戶體驗!