问题描述:
从一个站点要把一个未生成文件的简历,以附件的形式传到另一个站点,另一个站点给了一个使用demo,这个demo是一个form表单,其中还带有name/city等属性,我们的应用场景是用户点击一个导入按钮就会将一个未生成文件的简历附件连同其它参数传递到其它站点
解决方法:
1.获取简历内容
2.将简历生成doc文件
3.利用curl模拟form表单进行提交
实现代码:
$filename = "http://xxx....xxxResumeID=" . $resumeID;
$content = SlRequest::getHtml($filename);//是利用curl请求获取简历内容,该方法不再赘述
$tmpFilePath = Config::$resumePath . $id . '.doc';//指定生成doc文件的名称
if(file_put_contents($tmpFilePath, $content) <= 0) {
throw new Exception("生成简历失败!");
}
if(!is_file($tmpFilePath)) {
throw new Exception("没有生成文件!");
}
$postData = array(//拼装其它参数
'id' => $id,
...
...
'resume' => '@'.$tmpFilePath,
);
$result = Utility::curlRequest($url, true, $postData);//模拟from请求
....
....
@unlink($tmpFilePath);//发送成功后删除临时文件
public static function curlRequest($url, $isPost = false, $param = array(),$header = null,$encoding="GBK") {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if(is_array($header) && !empty($header)) { //设置header
$set_head = array();
foreach ($header as $k=>$v){
$set_head[] = "$k:$v";
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $set_head);
} else {
curl_setopt($ch, CURLOPT_HEADER, 0);
}
if($isPost === true) {
curl_setopt($ch, CURLOPT_POST, $isPost);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($ch);
if (curl_errno($ch)) {
$ret = '';
}
curl_close($ch);
return @iconv($encoding, SlEncoding::DefaultEncoding, $ret);
}