想通过模拟POST的方法传输图片,这是服务端
<?php$URL = 'http://localhost/phppost/test2.php'; $img_file = 'D:\xampp\htdocs\byte.jpg';
$fp1 = fopen($img_file, 'rb');
$content = fread($fp1, filesize($img_file)); //二进制数据
$post_data['tu']=$content;$referrer="";
$URL_Info=parse_url($URL);
if($referrer=="")
{
$referrer=$_SERVER["SCRIPT_URI"];
}
foreach ($post_data as $key=>$value)
{
 $values[]="$key=".urlencode($value);
}
$data_string=implode($values);if (!isset($URL_Info["port"])) {
$URL_Info["port"]=80;
$request.="POST ".$URL_Info["path"]." HTTP/1.1\n";
$request.="Host: ".$URL_Info["host"]."\n";
$request.="Referer: $referrer\n";
$request.="Content-type: application/x-www-form-urlencoded\n";$request.="Content-length: ".strlen($data_string)."\n";
$request.="Connection: close\n";
$request.="\n";
$request.=$data_string."\n";
}$fp = fsockopen($URL_Info["host"], $URL_Info["port"]);
fputs($fp, $request);
while(!feof($fp)) {$result .= fgets($fp, 10240);
}fclose($fp);?>这是客户端
<?php//接收POST信息页面if(isset($_POST)){
$content=$_POST["tu"];
  $file_name="byte.jpg";  $fp=fopen($file_name,"w+");  fwrite($fp,$content);  fclose($fp);
}?>
这样会将图片读成二进制,在放入数组,再转换成字符串,这样可以传输,但客户端会接收到很多其他符号,导致图片无法还原。应该怎么做产能通过这种方法使图片传输过去。

解决方案 »

  1.   

    问题出在这里$request.="Content-type: application/x-www-form-urlencoded\n"; 你提交的是二进制数据,却用默认的编码格式,过去肯定错误的.可以考虑
    发送端
    ============================
    $post_data['tu']=base64_encode($content); 接收端
    ==================================
    $content=base64_decode($_POST["tu"]);
      

  2.   

    base64_encode一下,收到的时候decode
    或者模拟文件上传,多半也是需要encode的