用PHP获取Ajax头信息

时间:2016-07-25 20:59:57

标签: php jquery ajax

我正在制作一个用于上传文件(视频或图片)的ajax功能:

<link id="pagestyle" rel="stylesheet" type="text/css" href='css/styles-white.css'>

在我的hisoka_drop.php中:

function upload_file(file)
     {
        //create xhr object
        xhr = new XMLHttpRequest();

        //initiate request
        xhr.open('post','hisoka_drop.php',true);//true for asynchronous

        //set headers
        xhr.setRequestHeader('Content-Type',"multipart/form-data");
        xhr.setRequestHeader('X-File-Name',file.fileName);
        xhr.setRequestHeader('X-File-Size',file.fileSize);
        xhr.setRequestHeader('X-File-Type',file.fileType);

        //send the file
        xhr.send(file);

     }

我的问题很简单,如何获取我之前设置的ajax标头,以获取我要上传到服务器的文件的真实文件名... 在此先感谢... :)

注意: 我试图列出$ _SERVER中的所有标题,如下所示:

<?php
    $str =file_get_contents('php://input');
    $filename = ; //How to get ajax header about file.fileName;
    $path = 'upload/'.$filename;
    file_put_contents($path,$str);
    echo $path;
    ?>

从这个列表中,我找不到我发送的任何标题,比如FILE_NAME,FILE_SIZE和FILE_TYPE,那么这里的问题是什么? 再次感谢...

2 个答案:

答案 0 :(得分:4)

由于您的自定义HTTP标头被调用X-File-Name,只需将其大写,将破折号转换为下划线,然后在HTTP_前面添加一个密钥,用于在$_SERVER中找到它超全局。例如:

$filename = $_SERVER['HTTP_X_FILE_NAME'];

有关详细信息,请参阅this answer

答案 1 :(得分:3)

此外,从5.4.0开始,您可以使用apache_request_headers()。它将当前请求中的所有HTTP请求标头作为数组返回。

在早期版本中,此功能仅在PHP安装为apache模块时才有效。

用法如下:

$headers = apache_request_headers();
echo $headers['X-File-Name'];