php 模拟post上传文件
脚本:a.php
1 $stream = file_get_contents('1.jpg'); 2 3 $len = strlen($stream);
第一种方法用sock方法连接模拟POST提交,b.php虽然获取了post传送过来的二进制数据,但是与原文件的md5值,并且文件也打不开。
//$fp = fsockopen("127.0.0.1",80); $d = ''; /*if ($fp) { fputs($fp, "POST /test/b1.php HTTP/1.1\r\n"); fputs($fp, "Host: localhost\r\n"); fputs($fp, "Content-Type: text/html\r\n"); fputs($fp, "Content-Length: {$len}\r\n"); fputs($fp, "Connection: close\r\n\r\n"); fputs($fp, "n=".$stream. "\r\n\r\n"); while (!feof($fp)) { $d .= fgets($fp, 4096); } fclose($fp); echo $d; }*/
第二种方法用cur模拟post提交数据,这种方法可以得到传送过来的post数据,并与原文件的md5值相同.
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1/test/b1.php"); curl_setopt($ch, CURLOPT_POST, 1);//启用POST提交 curl_setopt($ch, CURLOPT_PORT, 80); //设置端口 curl_setopt($ch,CURLOPT_POSTFIELDS,$stream); curl_exec($ch); curl_close($ch);
第三种方法,用curl模拟表单上传文件
$data = array( "file2" => "@".realpath("1.jpg") ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1/test/b1.php"); curl_setopt($ch, CURLOPT_POST, 1);//启用POST提交 curl_setopt($ch, CURLOPT_PORT, 80); //设置端口 curl_setopt($ch,CURLOPT_POSTFIELDS,$data); $aa = curl_exec($ch); curl_close($ch);
脚本:b.php
$str = file_get_contents("php://input"); file_put_contents("2.jpg",$str);
posted on 2012-05-17 15:16 kudosharry 阅读(1484) 评论(0) 编辑 收藏 举报