PHP如何模拟POST上传图片?请高手们指教,最好能给个代码

解决方案 »

  1.   


    <?php 
    class http {
    var $method;
    var $cookie;
    var $post;
    var $header;
    var $ContentType;
    var $errno;
    var $errstr;    function __construct() {
    $this->method = 'GET';
    $this->cookie = '';
    $this->post = '';
    $this->header = '';
    $this->errno = 0;
    $this->errstr = '';
        } function post($url, $data = array(), $referer = '', $limit = 0, $timeout = 30, $block = TRUE) {
    $this->method = 'POST';
    $this->ContentType = "Content-Type: application/x-www-form-urlencoded\r\n";
    if($data) {
    $post = '';
    foreach($data as $k=>$v) {
    $post .= $k.'='.rawurlencode($v).'&';
    }
    $this->post .= substr($post, 0, -1);
    }
    return $this->request($url, $referer, $limit, $timeout, $block);
    } function get($url, $referer = '', $limit = 0, $timeout = 30, $block = TRUE) {
    $this->method = 'GET';
    return $this->request($url, $referer, $limit, $timeout, $block);
    }
      

  2.   

    function upload($url, $data = array(), $files = array(), $referer = '', $limit = 0, $timeout = 30, $block = TRUE) {
    $this->method = 'POST';
    $boundary = "AaB03x";
    $this->ContentType = "Content-Type: multipart/form-data; boundary=$boundary\r\n";
    if($data) {
    foreach($data as $k => $v) { 
    $this->post .= "--$boundary\r\n"; 
    $this->post .= "Content-Disposition: form-data; name=\"".$k."\"\r\n"; 
    $this->post .= "\r\n".$v."\r\n"; 
    $this->post .= "--$boundary\r\n";

    }
    foreach($files as $k=>$v) {
                $this->post .= "--$boundary\r\n"; 
    $this->post .= "Content-Disposition: file; name=\"$k\"; filename=\"".basename($v)."\"\r\n"; 
    $this->post .= "Content-Type: ".$this->get_mime($v)."\r\n"; 
    $this->post .= "\r\n".file_get_contents($v)."\r\n"; 
    $this->post .= "--$boundary\r\n"; 
    }
            $this->post .= "--$boundary--\r\n";
    return $this->request($url, $referer, $limit, $timeout, $block);
    }
        
    function request($url, $referer = '', $limit = 0, $timeout = 30, $block = TRUE) {
    $matches = parse_url($url);
    $host = $matches['host'];
    $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
    $port = $matches['port'] ? $matches['port'] : 80;
    if($referer == '') $referer = URL;
    $out = "$this->method $path HTTP/1.1\r\n";
    $out .= "Accept: */*\r\n";
    $out .= "Referer: $referer\r\n";
    $out .= "Accept-Language: zh-cn\r\n";
    $out .= "User-Agent: ".$_SERVER['HTTP_USER_AGENT']."\r\n";
    $out .= "Host: $host\r\n";
    if($this->cookie) $out .= "Cookie: $this->cookie\r\n";
    if($this->method == 'POST') {
    $out .= $this->ContentType;
    $out .= "Content-Length: ".strlen($this->post)."\r\n";
    $out .= "Cache-Control: no-cache\r\n";
    $out .= "Connection: Close\r\n\r\n";
    $out .= $this->post;
    } else {
    $out .= "Connection: Close\r\n\r\n";
    }
    if($timeout > ini_get('max_execution_time')) @set_time_limit($timeout);
    $fp = @fsockopen($host, $port, $errno, $errstr, $timeout);
    if(!$fp) {
    $this->errno = $errno;
    $this->errstr = $errstr;
    return false;
    } else {
    stream_set_blocking($fp, $block);
    stream_set_timeout($fp, $timeout);
    fwrite($fp, $out);
    $this->data = '';
    $status = stream_get_meta_data($fp);
    if(!$status['timed_out']) {
    $maxsize = min($limit, 1024000);
    if($maxsize == 0) $maxsize = 1024000;
    $start = false;
    while(!feof($fp)) {
    if($start) {
    $line = fread($fp, $maxsize);
    if(strlen($this->data) > $maxsize) break;
    $this->data .= $line;
    } else {
    $line = fgets($fp);
    $this->header .= $line;
    if($line == "\r\n" || $line == "\n") $start = true;
    }
    }
    }
    fclose($fp);
    return $this->is_ok();
    }
    }    function save($file) {
    dir_create(dirname($file));
    return file_put_contents($file, $this->data);
        } function set_cookie($name, $value) {
    $this->cookie .= "$name=$value;";
    } function get_cookie() {
    $cookies = array();
    if(preg_match_all("|Set-Cookie: ([^;]*);|", $this->header, $m)) {
    foreach($m[1] as $c) {
    list($k, $v) = explode('=', $c);
    $cookies[$k] = $v;
    }
    }
            return $cookies;
    }
      

  3.   


    function get_data() {
    if (strpos($this->header,'chunk')) {
    $data = explode(chr(13), $this->data);
    return $data[1];
    } else {
    return $this->data;
    }
    } function get_header() {
    return $this->header;
    } function get_status() {
    preg_match("|^HTTP/1.1 ([0-9]{3}) (.*)|", $this->header, $m);
    return array($m[1], $m[2]);
    } function get_mime($file) {
    $ext = strtolower(trim(substr(strrchr($file, '.'), 1, 10)));
    if($ext == '') return '';
    $mime_types = array (
      'acx' => 'application/internet-property-stream',
      'ai' => 'application/postscript',
      'aif' => 'audio/x-aiff',
      'aifc' => 'audio/x-aiff',
      'aiff' => 'audio/x-aiff',
      'asp' => 'text/plain',
      'aspx' => 'text/plain',
      'asf' => 'video/x-ms-asf',
      'asr' => 'video/x-ms-asf',
      'asx' => 'video/x-ms-asf',
      'au' => 'audio/basic',
      'avi' => 'video/x-msvideo',
      'axs' => 'application/olescript',
      'bas' => 'text/plain',
      'bcpio' => 'application/x-bcpio',
      'bin' => 'application/octet-stream',
      'bmp' => 'image/bmp',
      'c' => 'text/plain',
      'cat' => 'application/vnd.ms-pkiseccat',
      'cdf' => 'application/x-cdf',
      'cer' => 'application/x-x509-ca-cert',
      'class' => 'application/octet-stream',
      'clp' => 'application/x-msclip',
      'cmx' => 'image/x-cmx',
      'cod' => 'image/cis-cod',
      'cpio' => 'application/x-cpio',
      'crd' => 'application/x-mscardfile',
      'crl' => 'application/pkix-crl',
      'crt' => 'application/x-x509-ca-cert',
      'csh' => 'application/x-csh',
      'css' => 'text/css',
      'dcr' => 'application/x-director',
      'der' => 'application/x-x509-ca-cert',
      'dir' => 'application/x-director',
      'dll' => 'application/x-msdownload',
      'dms' => 'application/octet-stream',
      'doc' => 'application/msword',
      'dot' => 'application/msword',
      'dvi' => 'application/x-dvi',
      'dxr' => 'application/x-director',
      'eps' => 'application/postscript',
      'etx' => 'text/x-setext',
      'evy' => 'application/envoy',
      'exe' => 'application/octet-stream',
      'fif' => 'application/fractals',
      'flr' => 'x-world/x-vrml',
      'flv' => 'video/x-flv',
      'gif' => 'image/gif',
      'gtar' => 'application/x-gtar',
      'gz' => 'application/x-gzip',
      'h' => 'text/plain',
      'hdf' => 'application/x-hdf',
      'hlp' => 'application/winhlp',
      'hqx' => 'application/mac-binhex40',
      'hta' => 'application/hta',
      'htc' => 'text/x-component',
      'htm' => 'text/html',
      'html' => 'text/html',
      'htt' => 'text/webviewhtml',
      'ico' => 'image/x-icon',
      'ief' => 'image/ief',
      'iii' => 'application/x-iphone',
      'ins' => 'application/x-internet-signup',
      'isp' => 'application/x-internet-signup',
      'jfif' => 'image/pipeg',
      'jpe' => 'image/jpeg',
      'jpeg' => 'image/jpeg',
      'jpg' => 'image/jpeg',
      'js' => 'application/x-javascript',
      'latex' => 'application/x-latex',
      'lha' => 'application/octet-stream',
      'lsf' => 'video/x-la-asf',
      'lsx' => 'video/x-la-asf',
      'lzh' => 'application/octet-stream',
      'm13' => 'application/x-msmediaview',
      'm14' => 'application/x-msmediaview',
      'm3u' => 'audio/x-mpegurl',
      'man' => 'application/x-troff-man',
      'mdb' => 'application/x-msaccess',
      'me' => 'application/x-troff-me',
      'mht' => 'message/rfc822',
      'mhtml' => 'message/rfc822',
      'mid' => 'audio/mid',
      'mny' => 'application/x-msmoney',
      'mov' => 'video/quicktime',
      'movie' => 'video/x-sgi-movie',
      'mp2' => 'video/mpeg',
      'mp3' => 'audio/mpeg',
      'mpa' => 'video/mpeg',
      'mpe' => 'video/mpeg',
      'mpeg' => 'video/mpeg',
      'mpg' => 'video/mpeg',
      'mpp' => 'application/vnd.ms-project',
      'mpv2' => 'video/mpeg',
      'ms' => 'application/x-troff-ms',
      'mvb' => 'application/x-msmediaview',
      'nws' => 'message/rfc822',
      'oda' => 'application/oda',
      'p10' => 'application/pkcs10',
      'p12' => 'application/x-pkcs12',
      'p7b' => 'application/x-pkcs7-certificates',
      'p7c' => 'application/x-pkcs7-mime',
      'p7m' => 'application/x-pkcs7-mime',
      'p7r' => 'application/x-pkcs7-certreqresp',
      'p7s' => 'application/x-pkcs7-signature',
      'pbm' => 'image/x-portable-bitmap',
      'pdf' => 'application/pdf',
      'pfx' => 'application/x-pkcs12',
      'pgm' => 'image/x-portable-graymap',
      'php' => 'text/plain',
      'pko' => 'application/ynd.ms-pkipko',
      'pma' => 'application/x-perfmon',
      'pmc' => 'application/x-perfmon',
      'pml' => 'application/x-perfmon',
      'pmr' => 'application/x-perfmon',
      'pmw' => 'application/x-perfmon',
      'png' => 'image/png',
      'pnm' => 'image/x-portable-anymap',
      'pot,' => 'application/vnd.ms-powerpoint',
      'ppm' => 'image/x-portable-pixmap',
      'pps' => 'application/vnd.ms-powerpoint',
      'ppt' => 'application/vnd.ms-powerpoint',
      'prf' => 'application/pics-rules',
      'ps' => 'application/postscript',
      'pub' => 'application/x-mspublisher',
      'qt' => 'video/quicktime',
      'ra' => 'audio/x-pn-realaudio',
      'ram' => 'audio/x-pn-realaudio',
      'ras' => 'image/x-cmu-raster',
      'rgb' => 'image/x-rgb',
      'rmi' => 'audio/mid',
      'roff' => 'application/x-troff',
      'rtf' => 'application/rtf',
      'rtx' => 'text/richtext',
      'scd' => 'application/x-msschedule',
      'sct' => 'text/scriptlet',
      'setpay' => 'application/set-payment-initiation',
      'setreg' => 'application/set-registration-initiation',
      'sh' => 'application/x-sh',
      'shar' => 'application/x-shar',
      'sit' => 'application/x-stuffit',
      'snd' => 'audio/basic',
      'spc' => 'application/x-pkcs7-certificates',
      'spl' => 'application/futuresplash',
      'src' => 'application/x-wais-source',
      'sst' => 'application/vnd.ms-pkicertstore',
      'stl' => 'application/vnd.ms-pkistl',
      'stm' => 'text/html',
      'svg' => 'image/svg+xml',
      'sv4cpio' => 'application/x-sv4cpio',
      'sv4crc' => 'application/x-sv4crc',
      'swf' => 'application/x-shockwave-flash',
      't' => 'application/x-troff',
      'tar' => 'application/x-tar',
      'tcl' => 'application/x-tcl',
      'tex' => 'application/x-tex',
      'texi' => 'application/x-texinfo',
      'texinfo' => 'application/x-texinfo',
      'tgz' => 'application/x-compressed',
      'tif' => 'image/tiff',
      'tiff' => 'image/tiff',
      'tr' => 'application/x-troff',
      'trm' => 'application/x-msterminal',
      'tsv' => 'text/tab-separated-values',
      'txt' => 'text/plain',
      'uls' => 'text/iuls',
      'ustar' => 'application/x-ustar',
      'vcf' => 'text/x-vcard',
      'vrml' => 'x-world/x-vrml',
      'wav' => 'audio/x-wav',
      'wcm' => 'application/vnd.ms-works',
      'wdb' => 'application/vnd.ms-works',
      'wks' => 'application/vnd.ms-works',
      'wmf' => 'application/x-msmetafile',
      'wmv' => 'video/x-ms-wmv',
      'wps' => 'application/vnd.ms-works',
      'wri' => 'application/x-mswrite',
      'wrl' => 'x-world/x-vrml',
      'wrz' => 'x-world/x-vrml',
      'xaf' => 'x-world/x-vrml',
      'xbm' => 'image/x-xbitmap',
      'xla' => 'application/vnd.ms-excel',
      'xlc' => 'application/vnd.ms-excel',
      'xlm' => 'application/vnd.ms-excel',
      'xls' => 'application/vnd.ms-excel',
      'xlt' => 'application/vnd.ms-excel',
      'xlw' => 'application/vnd.ms-excel',
      'xof' => 'x-world/x-vrml',
      'xpm' => 'image/x-xpixmap',
      'xwd' => 'image/x-xwindowdump',
      'z' => 'application/x-compress',
      'zip' => 'application/zip',
    );
    return isset($mime_types[$ext]) ? $mime_types[$ext] : '';
    } function is_ok() {
    $status = $this->get_status();
    if(intval($status[0]) != 200) {
    $this->errno = $status[0];
    $this->errstr = $status[1];
    return false;
    }
    return true;
    } function errno() {
    return $this->errno;
    } function errmsg() {
    return $this->errstr;
    }
    }
    ?>
      

  4.   

    其实就是把图片读进来,跟普通POST一样发送。
    注意构建正确的数据。
      

  5.   

    <?php
    $argva =array('username' => 'Jerry', 'password' => '123456');$boundary = "AaB03x";
    $encoded = "";
    foreach ($argva as $key => $val) { 
    $encoded .= "--$boundary\r\n";
    $encoded .= "Content-Disposition: form-data; name=\"".$key."\"\r\n";
    $encoded .= "\r\n".$val."\r\n";
    $encoded .= "--$boundary\r\n";
    }$encoded .= "--$boundary2--\r\n";
    $host='192.168.0.1';
    $file='/goods/b.php';$header = "POST $file HTTP/1.1\r\n";
    $header .= "Host:$host\r\n";
    $header .= "Content-Type: multipart/form-data; boundary=$boundary\r\n";
    $header .= "Content-Length: ".strlen($$encoded)."\r\n";
    $header .= "Cache-Control: no-cache\r\n"; 
    $header .= "Connection: Close\r\n\r\n"; 
    $header .= $encoded;
    $fp = fsockopen($host,'80',$errno,$errstr,30);
    if(!$fp)
    {
        echo "$errstr($errno)\n";
    }
    else
    {
    $fpa=fputs($fp,$header);

    while(!feof($fp))
    {
    echo fgets($fp);
    }
    }
    ?>b.php文件<?php
    echo($_POST['username']."<br>");
    ?>获取不到POST值,请问那里的问题,请指点,谢谢
      

  6.   

    $uploaded_file = "test.gif";//请求页面$address=array('street'=>$_POST['street'],'city'=>$_POST['city'],'upfile'=>"@$uploaded_file"; );$ch = curl_init("http://211.151.109.51/work/test1.php");curl_setopt($ch, CURLOPT_VERBOSE, 1);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $address);$ret = curl_exec($ch);curl_close($ch);
      

  7.   

    <?php
    $img_file = 'D:\a.jpg';
    $argva =array('username' => 'Jerry', 'password' => '123456');
    echo postdata("http://192.168.0.1/goods/b.php",$argva,$img_file);function postdata($posturl,$data=array(),$file=''){
    $url = parse_url($posturl);
    $boundary = "---------------------------".substr(md5(rand(0,32000)),0,10);
    $boundary_2 = "--$boundary";
    $content = $encoded = "";
    if($data){
    while (list($k,$v) = each($data)){
    $encoded .= $boundary_2."\r\nContent-Disposition: form-data; name=\"".rawurlencode($k)."\"\r\n\r\n";
    $encoded .= rawurlencode($v)."\r\n";
    }
    }if($file){
    $ext=strrchr($file,".");
    $type = "image/jpeg";
    switch($ext){
    case '.gif': $type = "image/gif";
    break;
    case '.jpg': $type = "image/jpeg";
    break;
    case '.png': $type = "image/png";
    break;
    }
    $encoded .= $boundary_2."\r\nContent-Disposition: form-data; name=\"imageaaa\"; filename=\"$file\"\r\nContent-Type: $type\r\n\r\n";
    $content = join("", file($file));
    $encoded.=$content."\r\n";
    }$encoded .= "\r\n".$boundary_2."--\r\n\r\n";
    $length = strlen($encoded);$fp = fsockopen($url['host'],80);
    if(!$fp) return "Failed to open socket to $url[host]";fputs($fp, "POST $url[path] HTTP/1.0\r\n");
    fputs($fp, "Host: $url[host]\r\n");
    fputs($fp, "Content-type: multipart/form-data; boundary=$boundary\r\n");
    fputs($fp, "Content-length: ".$length."\r\n");
    fputs($fp, "Connection: close\r\n\r\n"); 
    fputs($fp, $encoded);$line = fgets($fp,1024);
    if (!eregi("^HTTP/1\.. 200", $line)) return null;$results = "";
    $inheader = 1;
    while(!feof($fp)){
    $line = fgets($fp,1024);
    if($inheader && ($line == "\r\n" || $line == "\r\r\n")){
    $inheader = 0;
    }elseif(!$inheader){
    $results .= $line;
    }
    }
    fclose($fp);
    return $results;
    }
    ?>
    b.php文件:
    <?php
    echo($_POST['username']."<br>");$content=$_POST["imageaaa"];
    $file_name="byte.jpg";
    $fp=fopen($file_name,"w+");
    fwrite($fp,$content);
    fclose($fp);
    ?>接收文字值正常,但图片不正常,是什么原因