当前位置:Gxlcms > PHP教程 > javascript-ajax结合html5中的file实现文件上传,后台用PHP接收,该如何用PHP接收传过来的formData?

javascript-ajax结合html5中的file实现文件上传,后台用PHP接收,该如何用PHP接收传过来的formData?

时间:2021-07-01 10:21:17 帮助过:15人阅读

如何用PHP接收前端传输过来的文件,formdata这个对象的文件到是什么类型的二进制的数据吗?
前端代码:


php代码:

不知道为什么if(!empty($_FILES['file']))这判断一直false,改用if(!empty($_POST['file']))也是一样;哪位知道后台是如何接收传过来的文件的吗?可不可以给个demo的PHP文件!

回复内容:

如何用PHP接收前端传输过来的文件,formdata这个对象的文件到是什么类型的二进制的数据吗?
前端代码:


php代码:

不知道为什么if(!empty($_FILES['file']))这判断一直false,改用if(!empty($_POST['file']))也是一样;哪位知道后台是如何接收传过来的文件的吗?可不可以给个demo的PHP文件!

我在php中加了3个日志记录:

file_put_contents('/tmp/tmp.log', '$_FILES'.":\n".print_r($_FILES, true)."\n\n", FILE_APPEND);
file_put_contents('/tmp/tmp.log', '$_POST'.":\n".print_r($_POST, true)."\n\n", FILE_APPEND);
file_put_contents('/tmp/tmp.log', '$_SERVER'.":\n".print_r($_SERVER, true)."\n\n", FILE_APPEND);

存储路径改成tmp了,其他没变,得到的结果:

[root@localhost tmp]# cat tmp.log 
$_FILES:
Array
(
    [file] => Array
        (
            [name] => Screenshot_2010-01-01-08-11-30.png
            [type] => image/png
            [tmp_name] => /tmp/phposvIcw
            [error] => 0
            [size] => 30920
        )

)


$_POST:
Array
(
)


$_SERVER:
Array
(
    [USER] => nginx
    [HOME] => /var/lib/nginx
    [FCGI_ROLE] => RESPONDER
    [SCRIPT_FILENAME] => /var/www/test.php
    [SCRIPT_NAME] => /test.php
    [PATH_INFO] => 
    [QUERY_STRING] => 
    [REQUEST_METHOD] => POST
    [CONTENT_TYPE] => multipart/form-data; boundary=----WebKitFormBoundaryiJpJZSxazdqa8hzb
    [CONTENT_LENGTH] => 31127
    [REQUEST_URI] => /test.php
    [DOCUMENT_URI] => /test.php
    [DOCUMENT_ROOT] => /var/www
    [SERVER_PROTOCOL] => HTTP/1.1
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_SOFTWARE] => nginx/1.6.3
    [REMOTE_ADDR] => 192.168.255.1
    [REMOTE_PORT] => 60032
    [SERVER_ADDR] => 192.168.255.128
    [SERVER_PORT] => 80
    [SERVER_NAME] => 
    [REDIRECT_STATUS] => 200
    [HTTP_HOST] => 192.168.255.128
    [HTTP_CONNECTION] => keep-alive
    [HTTP_CONTENT_LENGTH] => 31127
    [HTTP_ORIGIN] => http://192.168.255.128
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
    [HTTP_CONTENT_TYPE] => multipart/form-data; boundary=----WebKitFormBoundaryiJpJZSxazdqa8hzb
    [HTTP_ACCEPT] => */*
    [HTTP_DNT] => 1
    [HTTP_REFERER] => http://192.168.255.128/test.html
    [HTTP_ACCEPT_ENCODING] => gzip, deflate
    [HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.8,ja;q=0.6,en;q=0.4
    [PHP_SELF] => /test.php
    [REQUEST_TIME_FLOAT] => 1470377177.1168
    [REQUEST_TIME] => 1470377177
)

文件成功上传

[root@localhost tmp]# ll
total 36
-rw-r--r-- 1 nginx nginx 30920 Aug  5 14:06 Screenshot_2010-01-01-08-11-30.png
-rw-r--r-- 1 nginx nginx  1705 Aug  5 14:06 tmp.log
[root@localhost tmp]# 

没有出错……

先来个打印看看啊!先别用if判断。直接

echo 'FILES:'.var_dump($_FILES);
echo 'POST:'.var_dump($_POST);
die();

看看是什么东东。然后在一步一步的来

F12看请求啊

楼主用$_REQUES接收试一下吧。

你也可以直接传base64编码

打开chrome的控制台看看请求Request发送了什么,主要看请求头的Content-Type和请求体

人气教程排行