PHP-curl上传文件到服务总是提示错误,而在本地测试就可以成功上传?

服务器管理 服务器管理 主题:1035 回复:2217

PHP-curl上传文件到服务总是提示错误,而在本地测试就可以成功上传?

虐人心 发布于 2017-04-30 字数 588 浏览 996 回复 2

错误提示页面

<?php
//关键部分如下

$data['userfile']="@$path".'/'.$picarr[array_rand($picarr)];

//$data=http_build_query($data);

$c=curl_init('http://localhost/teoor/index.php/Center/Product/upload');

curl_setopt_array($c,array(CURLOPT_POST=>1,CURLOPT_POSTFIELDS=>$data,CURLOPT_RETURNTRANSFER=>1,CURLOPT_COOKIEFILE=>"$sn".'/ck.txt'));

$str=curl_exec($c);
var_dump($str);
curl_close($c);
?>

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(2

想挽留 2017-09-17 2 楼

请确保在服务器有相应的写权限

灵芸 2017-08-17 1 楼

可能是Expect头导致的问题。
Expect头是HTTP 1.1新增加的功能,但是有一些服务器虽然标明自己接受HTTP 1.1,却实际上没有处理Expect。大多数浏览器也不会使用Expect,为了提高兼容性。

可以手工将Expect头设置为空:
curl_setopt($cl,CURLOPT_HTTPHEADER,array("Expect:"))

Expect的作用是,如果你有一个很长很长的表单要提交,却不小心把它提交错了位置,那你可能需要几分钟把数据传完之后才接收到服务器端的HTTP 404, HTTP 502错误。Expect的作用就是告诉服务器要提交数据,数据有多大,但是暂时不提交;等待服务器返回100 Continue之后才接着提交数据。中间也可以继续用Expect等待服务器响应。这样可以将一个大块的POST分块提交上去。

问题在于某些服务器不认这个HTTP头,就会认为你的Request设置了Content-Length却没有把内容提交上来。就会出错。