php curl 模拟post上传文件应用实例

php curl 模拟post上传文件应用实例

今天工作中遇到一个问题,客户端上传头像,我得到这个$_FILES头像信息,还需要通过模拟表单的type=file方式传递给公司的静态图片地址服务器,并最终从图片服务器拿到图片的绝对地址。

通过思考,实践,确定通过curl模拟表单来进行上传文件;

测试代码如下:

表单:1.html

<form method="POST" action="http://localhost/up.php" enctype="multipart/form-data">
用户头像:<input type="file" name="image">
<input type="submit" name="dosubmit">
</form>

 

处理程序:up.php

<?php
echo "<pre>";
print_r($_FILES);

$uploaddir = 'D:/';
$uploadfile = $uploaddir . basename($_FILES['image']['name']);

if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}
echo 'Here is some more debugging info:';


$url = "http://localhost/app.php";
$data = array(
"file1"  => "@D:/".$_FILES['image']['name'],    (这里需要注意:不能上传临时地址,而只能是存在的物理绝对路径)
);
print_r(uploadByCURL($data,$url));

function uploadByCURL($post_data,$post_url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $post_url);
curl_setopt($curl, CURLOPT_POST, 1 );
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl,CURLOPT_USERAGENT,"Mozilla/4.0");
$result = curl_exec($curl);
$error = curl_error($curl);
return $error ? $error : $result;
}
?>

 

第二次,file提交的处理程序

app.php

<?php
echo "<pre>";
print_r($_FILES);


$uploaddir = 'e:/';
$uploadfile = $uploaddir . basename($_FILES['file1']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['file1']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

echo 'Here is some more debugging info:';
?>

通过这三个程序,图片就可以经过两次提交,最终得到图片的地址;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值