Home >Backend Development >PHP Tutorial >php 文件上传,这段报文哪里错了呢

php 文件上传,这段报文哪里错了呢

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-06 20:44:241133browse

看了很多例子 没解决问题,大家帮我看看呢

返回的结果如下:

<code>HTTP/1.1 400 Bad Request 
Date: Fri, 18 Jul 2014 18:15:46 GMT 
Server: nginx/1.4.4 
Content-Type: application/json 
Content-Length: 36 
Access-Control-Allow-Headers: X-File-Name, X-File-Type, X-File-Size 
Access-Control-Allow-Methods: OPTIONS, HEAD, POST 
Access-Control-Allow-Origin: * 
Cache-Control: no-store, no-cache, must-revalidate 
Pragma: no-cache 
X-Content-Type-Options: nosniff 
X-Log: UP/400 
X-Reqid: QkEAAC2bX1liE4IT 
X-Via: 1.1 js41:3 (Cdn Cache Server V2.0) 
Connection: close 
</code>

代码:

<code class="lang-php"><?php //test100.jpg就在当前目录下
function sock_post($url){
        $boundary = "---------".substr(md5(rand(0,32000)),0,10);
        $content_file=file_get_contents('test100.jpg');
        $token="XXXXXXX";
        $key="chrisliu";
        $file_name="test100.jpg";
    $info=parse_url($url);
    $fp=fsockopen($info["host"],80,$errno,$errstr,3);
    $head="POST / HTTP/1.1\r\n";
    $head.="Host: ".$info['host']."\r\n";
    $head.="Content-type: multipart/form-data; boundary=".$boundary."\r\n";
    
    $data="--".$boundary."\r\n";
    $data.='Content-Disposition: form-data; name=\"token\"\r\n';
    $data.=$token."\r\n";
    
    
    $data.="--".$boundary."\r\n";
    $data.='Content-Disposition: form-data; name="key"\r\n';
    $data.=$key."\r\n";
    
    
    $data.="--".$boundary."\r\n";
    $data.='Content-Disposition: form-data; name="x:username"\r\n';
    $data.="\r\n";

    $data.="--".$boundary."\r\n";
    $data.='Content-Disposition: form-data; name=\"file\"; filename=\"'.$file_name.'\"\r\n';
    $data.="Content-Type: application/octet-stream\r\n";
    $data.="Content-Transfer-Encoding: binary\r\n";
    $data.=$content_file."\r\n";
    $data.="--".$boundary."--\r\n";
    
    $head.="Content-Length:".strlen($data)."\r\n\r\n";
    $write=fputs($fp,$head.$data);//发出请求
    while(!feof($fp)){
        $line=fgets($fp);
        echo $line."<br>";
    }
    fclose($fp);
}

$purl="http://upload.qiniu.com";
echo "以下是POST方式的响应内容:<br>"; 
sock_post($purl);
?>
</code>

在这里生成的token
http://jsfiddle.net/gh/get/extjs/4.2/icattlecoder/jsfiddle/tree/master/uptoken
在这里测试上传成功
http://jsfiddle.net/gh/get/library/pure/icattlecoder/jsfiddle/tree/master/formupload

回复内容:

看了很多例子 没解决问题,大家帮我看看呢

返回的结果如下:

<code>HTTP/1.1 400 Bad Request 
Date: Fri, 18 Jul 2014 18:15:46 GMT 
Server: nginx/1.4.4 
Content-Type: application/json 
Content-Length: 36 
Access-Control-Allow-Headers: X-File-Name, X-File-Type, X-File-Size 
Access-Control-Allow-Methods: OPTIONS, HEAD, POST 
Access-Control-Allow-Origin: * 
Cache-Control: no-store, no-cache, must-revalidate 
Pragma: no-cache 
X-Content-Type-Options: nosniff 
X-Log: UP/400 
X-Reqid: QkEAAC2bX1liE4IT 
X-Via: 1.1 js41:3 (Cdn Cache Server V2.0) 
Connection: close 
</code>

代码:

<code class="lang-php"><?php //test100.jpg就在当前目录下
function sock_post($url){
        $boundary = "---------".substr(md5(rand(0,32000)),0,10);
        $content_file=file_get_contents('test100.jpg');
        $token="XXXXXXX";
        $key="chrisliu";
        $file_name="test100.jpg";
    $info=parse_url($url);
    $fp=fsockopen($info["host"],80,$errno,$errstr,3);
    $head="POST / HTTP/1.1\r\n";
    $head.="Host: ".$info['host']."\r\n";
    $head.="Content-type: multipart/form-data; boundary=".$boundary."\r\n";
    
    $data="--".$boundary."\r\n";
    $data.='Content-Disposition: form-data; name=\"token\"\r\n';
    $data.=$token."\r\n";
    
    
    $data.="--".$boundary."\r\n";
    $data.='Content-Disposition: form-data; name="key"\r\n';
    $data.=$key."\r\n";
    
    
    $data.="--".$boundary."\r\n";
    $data.='Content-Disposition: form-data; name="x:username"\r\n';
    $data.="\r\n";

    $data.="--".$boundary."\r\n";
    $data.='Content-Disposition: form-data; name=\"file\"; filename=\"'.$file_name.'\"\r\n';
    $data.="Content-Type: application/octet-stream\r\n";
    $data.="Content-Transfer-Encoding: binary\r\n";
    $data.=$content_file."\r\n";
    $data.="--".$boundary."--\r\n";
    
    $head.="Content-Length:".strlen($data)."\r\n\r\n";
    $write=fputs($fp,$head.$data);//发出请求
    while(!feof($fp)){
        $line=fgets($fp);
        echo $line."<br>";
    }
    fclose($fp);
}

$purl="http://upload.qiniu.com";
echo "以下是POST方式的响应内容:<br>"; 
sock_post($purl);
?>
</code>

在这里生成的token
http://jsfiddle.net/gh/get/extjs/4.2/icattlecoder/jsfiddle/tree/master/uptoken
在这里测试上传成功
http://jsfiddle.net/gh/get/library/pure/icattlecoder/jsfiddle/tree/master/formupload

<code>$head.="Content-Length: ".strlen($data)."\r\n\r\n";
</code>

注意 Content-Length: 后面需要有一个空格。

大神,你用这么多header干啥呢??完全看不懂代码、、

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn