原始代码如下
   <?php
   function upload_file($url,$filename,$path){
        $data = array(
            'access_token' => '2.00qcIAOD0Rvw*************HIB',
            'status' => '0',
            'pic'=>'@'.realpath($path).";filename=".$filename
        );
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true );
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $return_data = curl_exec($ch);
        curl_close($ch);
        $decode = json_decode($return_data);
        echo $decode->original_pic;      
   }    if ($_POST) {
        $url = 'https://upload.api.weibo.com/2/statuses/upload.json';
        $tmpname = $_FILES['fname']['name'];
        $tmpfile = $_FILES['fname']['tmp_name'];
        upload_file($url,$tmpname,$tmpfile);
        exit;
    }
    echo '<form action="" enctype="multipart/form-data"  method="post">
  <input type="file" name="fname" />
<input type="text" name="fname" />
  <input type="submit" value="Submit" />
</form>';
?>
这样可以顺利post得到返回数据,但是删掉<input type="text" name="fname" />就不行,这是为什么呢?

解决方案 »

  1.   

    multipart/form-data只能用于input类型为file的情况,你的text类型的input,需要另外一个表单来传递
      

  2.   

    因为你用的是 if ($_POST) {}  删掉了POST就没有值,就不会执行里面的代码了 建议改成  if ($_SERVER['REQUEST_METHOD'] == 'GET') {}
      

  3.   

     错了 应该是 if ($_SERVER['REQUEST_METHOD'] == 'POST') {}
      

  4.   

    因为你的条件是 if ($_POST) 
    当没有那个文本框时,$_POST是个空数组,if判断为假,所以不会进入if里面。最简单的解决办法是将你的提交按钮加一个name 属性
    <input type="submit" name="Submit" value="Submit" />这样就可以了,当然你也可以改if条件。比如像楼上那样
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {}也可以