我正在尝试使用php cURL上传图片。但是它有些不对劲。
这是发布数据
-----------------------------192153227918513
Content-Disposition: form-data; name="resimbaslik"
CCClient
-----------------------------192153227918513
Content-Disposition: form-data; name="imgfile"; filename="clinteastwoodo.jpg"
Content-Type: image/jpeg
我正在尝试使用此php代码上传我的图片
$postfields = array();
$postfields ["resimbaslik"] = "CCClient";
$postfields ["imgfile"] = "filename=\"clinteastwoodo.jpg\"";
$referer = "http://www.example.com/ex1.php";
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/example.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_REFERER, $referer);
$result = curl_exec ($ch);
它给了我417 - Expectation Failed
错误。
该图片与我的.php文件位于同一目录中。
有人可以帮我解决吗?
谢谢。
答案 0 :(得分:1)
您尝试将服务器发布到Lighttpd? Lighty在处理 Expect 标题时存在一个已知错误,这会产生这种情况。可以在此处找到更多信息:http://redmine.lighttpd.net/issues/1017。
在上面链接的评论中,指出了PHP和cURL的简单修复:
<?php
$ch = curl_init();
curl_setopt($ch,CURLOPT_HTTPHEADER,array("Expect:"));
//Other setopt, execute etc...
?>
您需要为Expect标头设置一个空值。在上面的代码中,您只需添加 curl_setopt 行。像这样:
$postfields = array();
$postfields ["resimbaslik"] = "CCClient";
$postfields ["imgfile"] = "filename=\"clinteastwoodo.jpg\"";
$referer = "http://www.example.com/ex1.php";
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/example.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch,CURLOPT_HTTPHEADER,array("Expect:")); // << add this line.
$result = curl_exec ($ch);