PHP curl 模拟POST 上传文件(含php 5.5后CURLFile)

<?php
    /**
     * Email net.webjoy@gmail.com
     * author jackluo
     * 2014.11.21     *
     */

    //*
    function curl_post($url, $data, $header = array()){
            if(function_exists('curl_init')) {
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
                if(is_array($header) && !empty($header)){
                    $set_head = array();
                    foreach ($header as $k=>$v){
                        $set_head[] = "$k:$v";
                    }
                    curl_setopt($ch, CURLOPT_HTTPHEADER, $set_head);
                }
                curl_setopt($ch, CURLOPT_HEADER, 0);
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch, CURLOPT_TIMEOUT, 1);// 1s to timeout.
                $response = curl_exec($ch);
                if(curl_errno($ch)){
                    //error
                    return curl_error($ch);
                }
                $reslut = curl_getinfo($ch);
                print_r($reslut);
                curl_close($ch);
                $info = array();
                if($response){
                    $info = json_decode($response, true);
                }
                return $info;
            } else {
                throw new Exception('Do not support CURL function.');
            }
    }
    //*/
    //
    function api_notice_increment($url, $data)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HEADER,0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
//        $data = http_build_query($data);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        //curl_file_create
    //    $result =  curl_exec($ch);
        $lst['rst'] = curl_exec($ch);
        $lst['info'] = curl_getinfo($ch);
        curl_close($ch); 

        return $lst;
    //    return $result;
    }

     /**
         *  curl文件上传
         *  @var  struing  $r_file  上传文件的路劲和文件名
         *
         */
    /*
    function upload_file($url,$r_file)
     {
        $file = array("fax_file"=>'@'.$r_file,'type'=>'image/jpeg');//文件路径,前面要加@,表明是文件上传.
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL,$url);
        curl_setopt($curl,CURLOPT_POST,1);
        curl_setopt($curl,CURLOPT_POSTFIELDS,$file);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        $result = curl_exec($curl);  //$result 获取页面信息
        curl_close($curl);
        echo $result ; //输出 页面结果
   }*/

   function upload_file($url,$filename,$path,$type){
        $data = array(
            'pic'=>'@'.realpath($path).";type=".$type.";filename=".$filename
        );
        $ch = curl_init();

   //设置帐号和帐号名


   curl_setopt($ch, CURLOPT_USERPWD, 'joe:secret' );

        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);
        // curl_getinfo($ch);
        $return_data = curl_exec($ch);
        curl_close($ch);
        echo $return_data;
   }

  // php 5.5 以后请用以下函数

function upload_file($url,$filename,$path,$type){
  $data = array(
    'pic'=>new CURLFile(realpath($path))
  );
  $ch = curl_init();

   //也可以用以下注释掉的不用改代码,觉得新版的可以省下点代码,看个人

   //curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);

   //设置帐号和帐号名

   curl_setopt($ch, CURLOPT_USERPWD, 'joe:secret' );
  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);
  // curl_getinfo($ch);
  $return_data = curl_exec($ch);
  curl_close($ch);
  echo $return_data;
}

if ($_POST) {
        $url = 'http://platform.com/upload/image';
        //
        $path = $_SERVER['DOCUMENT_ROOT'];
/*
        print_r($_FILES);
        exit;
*/
        //$filename = $path."/232.jpg";
        //upload tmp
        $tmpname = $_FILES['fname']['name'];
        $tmpfile = $_FILES['fname']['tmp_name'];
        $tmpType = $_FILES['fname']['type'];
//        echo $tmpType;
        upload_file($url,$tmpname,$tmpfile,$tmpType);
        /*
        $data = array(
                'path'=>"@$path/232.jpg",
                'name'=>'h'
        );
        */
        //'pic'=>'@/tmp/tmp.jpg', 'filename'=>'tmp'
        //$data = array('pic'=>"@$filename", 'filename'=>'tmp');
/*
        $data = array(
            'uid'    =>    10086,
            'pic'    =>    '@$tmpfile'.';type='.$tmpType
        );
        $info = api_notice_increment($url, $data);
*/
        //$info = curl_post($url, $data);
        //$info = api_notice_increment($url, $data);
        //upload_file($url,$tmpfile);
        //print_r($info);
        exit;
/*
        $file = 'H:\www\test\psuCARGLSPA-pola.jpg'; //要上传的文件
        $src = upload_curl_pic($file);
        echo $src;
*/
    }
?>

<form action="http://localhost/upload.php" enctype="multipart/form-data"  method="post">
  <p>UpLoad: <input type="text" name="fname" /></p>
  <p>UpLoad: <input type="file" name="fname" /></p>

  <input type="submit" value="Submit" />
</form>

 

时间: 2024-09-17 17:06:16

PHP curl 模拟POST 上传文件(含php 5.5后CURLFile)的相关文章

php实现curl模拟ftp上传的方法_php技巧

本文实例讲述了php实现curl模拟ftp上传的方法.分享给大家供大家参考.具体如下: <?php function upload($dir,$src,$dest) { $ch = curl_init(); $fp = fopen($src, 'r'); curl_setopt($ch, CURLOPT_URL, 'ftp://user:pwd@host/interpretation/'.$dir .'/'. $dest); curl_setopt($ch, CURLOPT_UPLOAD, 1)

通过WebClient模拟post上传文件到服务器

写在前面 最近一直在研究sharepoint的文档库,在上传文件到文档库的过程中,需要模拟post请求,也查找了几种模拟方式,webclient算是比较简单的方式. 一个例子 这里写一个简单接受post请求的aspx页面,代码如下: 1 namespace Wolfy.UploadDemo 2 { 3 public partial class Default : System.Web.UI.Page 4 { 5 protected void Page_Load(object sender, Ev

VBS模拟POST上传文件的代码_vbs

复制代码 代码如下: 'XML Upload Class Class XMLUpload Private xmlHttp Private objTemp Private adTypeBinary, adTypeText Private strCharset, strBoundary Private Sub Class_Initialize() adTypeBinary = 1 adTypeText = 2 Set xmlHttp = CreateObject("Msxml2.XMLHTTP&qu

php中curl实现GET和POST请求抓取网页或上传文件

一:curl 函数和参数详解 函数库: 1:curl_init 初始化一个curl会话 2:curl_close 关闭一个curl会话 3:curl_setopt 为一个curl设置会话参数 4:curl_error 返回一个包含当前会话错误信息的字符串 5:curl_exec 执行一个curl会话 6:curl_multi_add_handle 向curl批处理会话中添加单独的curl句柄资源 7:curl_multi_close 关闭一个批处理句柄资源 8:curl_multi_exec 解

ftp-SAE中用php上传文件到FTP服务器

问题描述 SAE中用php上传文件到FTP服务器 现在SAE里边支持php的 @ftp_connect($FTP_HOST,$FTP_PORT) 方法吗?查资料说是不支持,所以用了curl模拟ftp上传,在上传的时候 curl_setopt($ch, CURLOPT_URL, 'ftp://username:password@IP:21/'.$dir.'/'.$dest); 这个URL应该怎么写呢?这个目录是指要传到的FTP服务器的目录吗?运行的时候会报 AE ERROR: INVALID UR

libcurl提交表单上传文件

不多说了,curl的http上传文件代码示例,有需要的可以参考.   int http_post_file(const char *url, const char *user, const char *pwd, const char *filename){    assert(url != NULL);    assert(user != NULL);    assert(pwd != NULL);    assert(filename != NULL);     int ret = -1;  

如何通过FTP上传文件

  现以FlashFXP为例,图解使用FTP工具上传文件. 1: 运行 LeapFTP,点击1处(站点->站点管理器),弹出"站点管理器"窗口;在2处选择"My Servers"项,然后在3处点击"添加站点"按钮,在弹出的窗口4处输入您喜欢的站点名称(如:mysite); 2:点击"确定"后,出现以下界面.在1处输入您的站点地址(如:abc.com),将2处"匿名"前的选钩去掉,在3处输入FTP用户名

Centos下vsftp无法上传文件及其它问题总结

vsftp无法上传文件 用SecureCRT远程登录后,我做了如下检查: ①.打开了vsftp配置文件(/etc/vsftpd/vsftpd.conf)检查write_enable状态,发现正常: [root@VM_72_108_centos /]# cat /etc/vsftpd/vsftpd.conf | grep write_enablewrite_enable=YES#anon_mkdir_write_enable=YES[root@VM_72_108_centos /]# ②.查看ft

php curl 上传文件代码实例

  这篇文章主要介绍了php curl 上传文件代码实例,本文给出了两种实现方法,并分别给出了实现代码,需要的朋友可以参考下 假设server端上传文件处理脚本upload.php: 代码如下: print_r($_POST); print_r($_FILES); 1.使用 CURL 默认的方法 复制代码 代码如下: //如果php文件是utf8编码,系统是GBK编码,那么就需要转下编码,要不然Php在系统中找不到这个文件 $file = realpath(mb_convert_encoding