2014-05-15 114 views
0

我有2個文件client.php和server.php。我想用curl發送從客戶端到服務器的頭文件,然後在服務器中讀取這些頭文件,但不幸的是我無法在服務器文件中獲取頭文件。我試圖通過使用getallheaders()來做到這一點,但沒有顯示任何內容。然後我試着get_headers()這說空,當我用var_dump就可以了。PHP獲取頭部捲曲發送

我的客戶代碼: ` $ result = sendRequest(); echo「res:」。$ result;

function sendRequest() 
{ 
    $method = 'test'; 
    $params = array(); 
    $params["method"] = $method; 
    $post = http_build_query($params, "", "&"); 
    $headers = array(
     "API-Key: test", 
     "API-Key2: test2", 
     "API-Key3: test3", 
     "API-Key4: test4", 
    ); 


    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_URL, "http://example.com/server.php"); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post); 

    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
    //curl_setopt($curl, CURLOPT_HEADER, 1); 
    $ret = curl_exec($curl); 

    return $ret; 
} 

和server.php:

get(); 

function get() 
{ 
    $head = get_headers(); 
    var_dump($head); 
} 
+0

您正在使用什麼版本的PHP? –

+0

服務器:Apache/2 X-Powered-By:PHP/5.3.20 – Rocket

+0

我建議您的服務器上的錯誤已禁用。您是否可以插入您的代碼以提供更多信息: error_reporting(E_ALL); ini_set('display_errors',1); –

回答

0

獲取從當前請求的所有HTTP請求頭與

apache_request_headers(); 

看看php.net apache-request-headers

如果apache_request_headers()不是可用,循環通過超全球$_SERVER並獲得信息需要,開始HTTP_請求頭,像

$headers = array(); 

foreach ($_SERVER as $key => $value) { 
    if (preg_match('/^HTTP_.+/', $key)) { 
     // sanitize keys removing HTTP_ 
     $headers[str_replace('HTTP_','',$key)] = $value; 
    } 
} 

使用

echo $headers['API-Key']; 
+0

調用未定義函數apache_request_headers() – Rocket

+0

@Rocket在PHP 5.4.0中,此功能在FastCGI下可用。以前,僅當PHP作爲Apache模塊安裝時才受支持。 –

+0

服務器API:CGI/FastCGI PHP版本5.3.20 SERVER_SOFTWARE \t Apache/2 – Rocket