1. 如何使用php+curl上传多媒体文件
$post_data = array(
"media"=>"E:\WORKS/yy.jpg"
);
$url="http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=$acctoken&type=image";
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);
ob_start();
curl_exec($ch);
$result = ob_get_contents() ;
ob_end_clean();
echo $result;
2. php curl 上传多文件,怎么弄
下面是一段示例代码:
<?php
//注:PHP5.5.0起,文件上传建议使用CURLFile代替@
//多文件上传
$data=array(
'input_file[0]'=>newCURLFile('d:/1.txt','text/plain','testfile.txt'),
'input_file[1]'=>newCURLFile('d:/2.txt','text/plain'),
'input_file[2]'=>newCURLFile('d:/3.txt','text/plain'),
);
$ch=curl_init('http://demo.zjmainstay.cn/php/curl/curlUploadHandler.php');
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
curl_exec($ch);
如果你的版本比较低,文件部分使用:
'input_file[0]'=>'@d:/1.txt',
这样既可。
我的博客《PHP cURL实现模拟登录与采集使用方法详解》对各类curl问题做了系统而详细的讲解,请参考“十、模拟上传文件”部分查看更多文件上传内容,如直接基于采集的文件内容进行上传等。
3. 请教用Curl 在php 里面模拟表单提交 文本+文件的写法
publicfunctioncurl($url,$postFields=null)
{
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_FAILONERROR,false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
if($this->readTimeout){
curl_setopt($ch,CURLOPT_TIMEOUT,$this->readTimeout);
}
if($this->connectTimeout){
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$this->connectTimeout);
}
//https请求
if(strlen($url)>5&&strtolower(substr($url,0,5))=="https"){
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
}
if(is_array($postFields)&&0<count($postFields))
{
$postBodyString="";
$postMultipart=false;
foreach($postFieldsas$k=>$v)
{
if("@"!=substr($v,0,1))//判断是不是文件上传
{
$postBodyString.="$k=".urlencode($v)."&";
}
else//文件上传用multipart/form-data,否则用www-form-urlencoded
{
$postMultipart=true;
}
}
unset($k,$v);
curl_setopt($ch,CURLOPT_POST,true);
if($postMultipart)
{
foreach($postFieldsas$k=>$v){
if("@"==substr($v,0,1)){
$tempffile=preg_replace('/^@/','',$v);
$advfield[$k]=newCURLFile($tempffile);
}else{
$advfield[$k]=$v;
}
}
curl_setopt($ch,CURLOPT_POSTFIELDS,$advfield);
unset($k,$v,$advfield);
//curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields);//田村改
//curl_setopt($ch,CURLOPT_POSTFIELDS,['file'=>newCURLFile(realpath('image.png'))]);
}
else
{
curl_setopt($ch,CURLOPT_POSTFIELDS,substr($postBodyString,0,-1));
}
}
$reponse=curl_exec($ch);
if(curl_errno($ch))
{
thrownewException(curl_error($ch),0);
}
else
{
$httpStatusCode=curl_getinfo($ch,CURLINFO_HTTP_CODE);
if(200!==$httpStatusCode)
{
thrownewException($reponse,$httpStatusCode);
}
}
curl_close($ch);
return$reponse;
}
表单列表是 $postFields 传入参数
数组,如果有文件 ,就在数组的值 前面加@
已经做好的 集成类 的实现 其他类字段和方法没给出,写不下了。
但是大致的实现过程应该可以看懂了
4. PHP curl 上传大文件非常大慢,导致超时,小文件(10M以下)的还可以,请问如何解决啊!
修改超时限制:
ini_set('max_execution_time','0');