Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP获取使用curl发送的头文件_Php_Curl - Fatal编程技术网

PHP获取使用curl发送的头文件

PHP获取使用curl发送的头文件,php,curl,Php,Curl,我有两个文件client.php和server.php。我想用curl将头从客户端发送到服务器,然后在服务器中读取这些头,但不幸的是,我无法在服务器文件中获取头。我试图通过使用getallheaders()来实现这一点,但没有显示任何内容。然后我尝试了get\u headers(),当我在上面使用var\u dump时,它会显示null 我的客户代码: ` $result=sendRequest(); 回声“res:.$结果 function sendRequest() { $meth

我有两个文件client.php和server.php。我想用curl将头从客户端发送到服务器,然后在服务器中读取这些头,但不幸的是,我无法在服务器文件中获取头。我试图通过使用
getallheaders()
来实现这一点,但没有显示任何内容。然后我尝试了
get\u headers()
,当我在上面使用
var\u dump
时,它会显示null

我的客户代码: ` $result=sendRequest(); 回声“res:.$结果

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);
}

使用从当前请求获取所有HTTP请求头

apache_request_headers();

如果apache_request_headers()不可用,则通过超级全局
$\u服务器
循环并获取所需的信息,请求头以
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'];

您使用的php版本是什么?Server:Apache/2 X-Powered-By:php/5.3.20我建议在您的服务器上禁用这些错误。您能否在代码中插入更多信息:错误报告(E_ALL);ini设置(“显示错误”,1);致命错误:调用未定义的函数getallheaders(),我希望是这个函数,但它没有改变任何东西,因为我不知道如何修复它。您可以尝试var_dump($_服务器)来查看您的头吗?在PHP5.4.0中调用未定义的函数apache_request_headers()@Rocket此函数在FastCGI下可用。以前,只有当PHP作为Apache模块安装时才支持它/2@Rocket然后,或者直接从$_SERVER@Rocket我已经编辑了我的答案,内容涵盖了
apache\u请求\u头文件
函数的不可用性。在
$\u服务器
中创建一个foreach,将
$\u服务器
中以HTTP开头的所有密钥放入一个新数组。