php獲得請求頭,php 請求頭

本文目錄一覽:

php中http請求頭有什麼內容,由什麼組成

PHP中一般採用getallheaders來獲取頭部,但事實上,有些模式下是獲取不到的(以前真沒有注意過在fastcgi下這個函數不能用)

在PHP里,想要得到所有的HTTP請求頭,可以使用getallheaders方法,不過此方法並不是在任何環境下都存在,比如說,你使用fastcgi方式運行PHP的話,就沒有這個方法,所以說我們還需要考慮別的方法,幸運的是$_SERVER里有我們想要的東西,它裏面鍵名以HTTP_開頭的就是HTTP請求頭:

$headers = array();

foreach ($_SERVER as $key = $value) {

if (‘HTTP_’ == substr($key, 0, 5)) {

$headers[str_replace(‘_’, ‘-‘, substr($key, 5))] = $value;

}

}

代碼很簡單,需要說明的是RFC里明確指出了信息頭的名字是不區分大小寫的。

不過並不是所有的HTTP請求頭都是以HTTP_開頭的的鍵的形式存在與$_SERVER里,比如說Authorization,Content-Length,Content-Type就不是這樣,所以說為了取得所有的HTTP請求頭,還需要加上下面這段代碼:

if (isset($_SERVER[‘PHP_AUTH_DIGEST’])) {

$header[‘AUTHORIZATION’] = $_SERVER[‘PHP_AUTH_DIGEST’]);

} elseif (isset($_SERVER[‘PHP_AUTH_USER’]) isset($_SERVER[‘PHP_AUTH_PW’])) {

$header[‘AUTHORIZATION’] = base64_encode($_SERVER[‘PHP_AUTH_USER’] . ‘:’ . $_SERVER[‘PHP_AUTH_PW’]));

}

if (isset($_SERVER[‘CONTENT_LENGTH’])) {

$header[‘CONTENT-LENGTH’] = $_SERVER[‘CONTENT_LENGTH’];

}

if (isset($_SERVER[‘CONTENT_TYPE’])) {

$header[‘CONTENT-TYPE’] = $_SERVER[‘CONTENT_TYPE’];

}

php如何獲取http頭部信息

var_dump(apache_request_headers());

//服務器是apache的話  (我沒試過別的服務器能否用)

http_get_request_headers()//需安裝 pecl_http 擴展

php get請求中的請求頭應該如何設置

獲取請求頭信息,可以在curl_exec函數執行前,添加代碼curl_setopt($ch,CURLINFO_HEADER_OUT,true);在curl_exec函數執行後,通過 curl_getinfo($ch,CURLINFO_HEADER_OUT) 來獲取curl執行請求的請求數據。

獲取響應頭信息,可以在curl_exec函數執行前,添加代碼 curl_setopt($ch, CURLOPT_HEADER, true);curl_setopt($ch, CURLOPT_NOBODY,true); 之後 通過curl_exec函數來獲取響應頭信息。獲取設置 curl_setopt($ch, CURLOPT_NOBODY,false);然後對curl_exec獲取的值通過\r\n\r\n進行分割截取第一部分即為響應頭信息。

如何在php中獲取curl請求的請求頭信息及相應頭信息

oCurl = curl_init();

// 設置請求頭

$header[] = “Content-type: application/x-www-form-urlencoded”;

$user_agent = “Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36”;

curl_setopt($oCurl, CURLOPT_URL, $sUrl);

curl_setopt($oCurl, CURLOPT_HTTPHEADER,$header);

// 返回 response_header, 該選項非常重要,如果不為 true, 只會獲得響應的正文

curl_setopt($oCurl, CURLOPT_HEADER, true);

// 是否不需要響應的正文,為了節省帶寬及時間,在只需要響應頭的情況下可以不要正文

curl_setopt($oCurl, CURLOPT_NOBODY, true);

// 使用上面定義的 ua

curl_setopt($oCurl, CURLOPT_USERAGENT,$user_agent);

curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );

// 不用 POST 方式請求, 意思就是通過 GET 請求

curl_setopt($oCurl, CURLOPT_POST, false);

$sContent = curl_exec($oCurl);

// 獲得響應結果里的:頭大小

$headerSize = curl_getinfo($oCurl, CURLINFO_HEADER_SIZE);

// 根據頭大小去獲取頭信息內容

$header = substr($sContent, 0, $headerSize);

    

curl_close($oCurl);

php使用nginx如何獲取請求頭?

Nginx的http模塊在處理HTTP請求時對環境變量的封裝與Apache有所不同。除了支持一些與HTTP協議相關的通用的變量之外,還支持一系列Nginx自有的變量,如Nginx配置目錄下fastcgi_params.default文件里的$server_protocol、$nginx_version等。正如這個文件中的示例的用途,這些變量可以在配置fastcgi時傳遞給cgi程序,使其可以作為cgi程序的環境變量來使用。然而,即便是Nginx有了這些自有的變量也無法完全滿足所有的需求。

了解Jquery的朋友會發現,Jquery在實現Ajax時會通過setRequestHeader(『X-Requested-With』, 『xmlhttprequest』)方法自動添加一個值為「xmlhttprequest」自定義的請求頭」X-Requested-With」來標識這是一個Ajax請求,以期處理這個請求的後端能夠通過判斷這個標識來識別請求類型。那麼這個時候PHP是如何來獲取這個自定義參數的值的呢?

熟悉Apache和PHP的人一定會第一時間想到$_SERVER[“HTTP_X_REQUESTED_WITH”],不錯,這對黃金搭配早就把這個問題給完美解決了,但Nginx卻不然,這是由Nginx對其自身工作的定位決定的——Nginx只負責HTTP。在Nginx眼裡,PHP只是它的一個後端,形象點來說,它只管分發請求,而不管發給誰。這就意味着,我們無法期待Nginx像Apache一樣給我們自動完成一些自定義參數到PHP的傳遞,只有自力更生。簡單點說就是,想要直接像$_SERVER[“HTTP_X_REQUESTED_WITH”]這樣來調用自定義請求頭參數的值的話,你就必須手工將其添加到fastcgi_params的配置中,明確告知cgi程序接收,否則Nginx會將其遺棄。

配置環境變量的方法可參照fastcgi_params.default這個文件,在前面的博客「Nginx下虛擬主機環境變量的配置方法」中也提到過。針對上述例子,只需在fastcgi_params文件中增加一行即可:

?12 # for Ajax fastcgi_param HTTP_X_REQUESTED_WITH $http_x_requested_with;

這樣,重載Nginx配置後就可以之間在PHP中調用$_SERVER[“HTTP_X_REQUESTED_WITH”]來判斷請求類型了。其中需要注意以下兩點:

一、自定義請求頭部的名稱不應該包括空白、冒號、換行和下劃線。

Nginx在處理客戶端請求header頭時,會將名稱中的中橫線」-」替換為下劃線」_」,並將所有字母小寫再加上」$http_」來作為該名稱對應的變量名。例如上述Jquery的例子中setRequestHeader(『X-Requested-With』, 『xmlhttprequest』),在HTTP請求頭中為一行字符串:」X-Requested-With: xmlhttprequest」,經Nginx處理後將自動生成一個名為$http_x_requested_with的變量,其值為」xmlhttprequest」。尤其注意中橫線」-」替換為下劃線」_」這個規則,這意味着請求參數名稱中如果含有下劃線,Nginx將無法正確識別。

二、$_SERVER[“HTTP_X_REQUESTED_WITH”]中的索引,也即「fastcgi_param HTTP_X_REQUESTED_WITH $http_x_requested_with;」中加紅部分,是可以自由命名的,當前這種命名格式是為了保持和Apache保持一致。

..

php 如何獲取 客戶端http header

?php

$dir=$HTTP_GET_VARS[“dir”]; //…….取得上個頁面傳遞來的路徑

$file=$HTTP_GET_VARS[“file”]; //…….取得傳遞來的文件名

$url=parse_url($HTTP_REFERER); /*……取得前一頁面的URL地址,並將其放入一個數組中*/

if($url[host]!=$HTTP_HOST){echo “要下載本軟件請到a href=;東方小屋/a”;exit;} /*檢查來源網站是不是自己的網站,如果不是,返回「要下載本……」*/

if(empty($dir))$dir=”/”; //……如果路徑名為空,則為指定根目錄

if(empty($file)){echo “未指定要下載的文件!”;exit;} /*如果文件名為空,返回「未指定……」*/

$rootdir=”文件存放的根目錄”;//……你的下載路徑根目錄 

$realurl=$rootdir.$dir; //…….取得你的下載目錄

chdir($realurl); //……將當前目錄轉到下載目錄中

if(!file_exists($file)){echo “對不起,此鏈接已經失效,請在下載頁面上向我們報告,謝謝!”;exit;} //……測試文件是否存在

$filename=$file; 

//發送文件頭信息

header(“Cache-control: private”); // fix for IE 

header(“Content-Type: application/octet-stream”); 

header(“Content-Length: “.filesize($filename)); 

header(“Content-Disposition: attachment; filename=$filename”); 

$fp = fopen($filename, ‘r’); // 以讀取方式打開指定文件

fpassthru($fp); // ** CORRECT ** 以二進制方式讀取文件

fclose($fp); // 關閉文件

?

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/157994.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-19 00:38
下一篇 2024-11-19 00:38

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • PHP版本管理工具phpenv詳解

    在PHP項目開發過程中,我們可能需要用到不同版本的PHP環境來試驗不同的功能或避免不同版本的兼容性問題。或者我們需要在同一台服務器上同時運行多個不同版本的PHP語言。但是每次手動安…

    編程 2025-04-24
  • PHP數組去重詳解

    一、array_unique函數 array_unique是php中常用的數組去重函數,它基於值來判斷元素是否重複,具體使用方法如下: $array = array(‘a’, ‘b…

    編程 2025-04-24
  • PHP導出Excel文件

    一、PHP導出Excel文件列寬調整 當我們使用PHP導出Excel文件時,有時需要調整單元格的列寬。可以使用PHPExcel類庫中的setWidth方法來設置單元格的列寬。下面是…

    編程 2025-04-24
  • php擴展庫初探

    一、什麼是php擴展庫? PHP擴展庫(PHP extension)是一些用C語言編寫的動態鏈接庫,用於擴展PHP的功能。PHP擴展庫使得PHP可以與各種數據庫系統相連、SMTP、…

    編程 2025-04-23

發表回復

登錄後才能評論