curl 文件上传 与php版本冲突相关

本文介绍了在PHP5.4及以上版本中,如何使用CURLFile类来替代@符号进行文件上传,以解决远程文件上传的问题。通过实例演示了如何将临时文件转换为CURLFile对象,并使用curl发起POST请求进行上传。
php5.4 以上版本废除@  用  new CURLFile()代替
//支持远程文件上传
if(empty($urlinfo['host'])){
    $tmp_name=dirname($file['tmp_name']).'/'.$file['title'].'.'.$file['extension'];//加上文件后缀
    rename($file['tmp_name'],$tmp_name);
    if(version_compare(phpversion(),'5.5.0') >= 0 && class_exists('CURLFile')){
        $fields['file'] = new CURLFile(realpath($tmp_name));
    }else{
        $fields['file'] = '@'.$tmp_name;//加@符号curl就会把它当成是文件上传处理
    }
}
转自:http://segmentfault.com/a/1190000000725185
相关demo
php_curl.php
<?php
/**
 * Created by PhpStorm.
 * User: kate
 * Date: 2015/10/22
 * Time: 12:59
 */
header('content-type:text/html;charset=utf8');
$ch = curl_init();

$data = array('savePath' => './upload/'.date('ymd').'/', 'img' => '@D:/wamp/www/Public/images/zu.png');//php5.4
//$data = array('savePath' => './upload/'.date('ymd').'/', 'img' => new CURLFile('D:/wamp/www/Public/images/zu.png'));//大于php5.4
//$data = array('savePath' => './Uploads/'.date('ymd').'/', 'img' => '@/home/wwwroot/kjjdefault/Public/Uploads/20150916/thumb_55f9000bbfc6a.jpg');
curl_setopt($ch, CURLOPT_URL, 'http://localhost/myTest/get_img.php');
curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$return = curl_exec($ch);
curl_close($ch);
var_dump($return);
get_img.php
<?php
/**
 * Created by PhpStorm.
 * User: kate
 * Date: 2015/10/22
 * Time: 13:20
 */
//print_r($_POST);
//print_r($_FILES);
if($_FILES){
    $filename = $_FILES['img']['name'];
    $tmpname = $_FILES['img']['tmp_name'];
    $savePath = $_POST['savePath'];
    if(!$savePath){
        $savePath = './upload/'.date('ymd').'/';
    }
    if(!is_dir($savePath)) {
        // 检查目录是否编码后的
        if(is_dir(base64_decode($savePath))) {
            $savePath  =  base64_decode($savePath);
        }else{
            // 尝试创建目录
            if(!mkdir($savePath, 0777, true)){
                $this->error  =  '上传目录'.$savePath.'不存在';
                return false;
            }
        }
    }else {
        if(!is_writeable($savePath)) {
            $this->error  =  '上传目录'.$savePath.'不可写';
            return false;
        }
    }
    if(move_uploaded_file($tmpname,$savePath.$filename)){
        return json_encode(true);
    }else{
        $data = json_encode($_FILES);
        echo $data;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值