2016-02-29 103 views
0

我正在loged在维基媒体服务器的API,并不能维基媒体上传 我得到这个错误: 谢谢,我得到这个错误回来,上传图片用PHP

文件上传PARAM文件不是上传文件;一定要使用的multipart/form-data的为您的文章,包括在内容处理标头

这里是图片上传的代码文件名:

$postdata = "action=upload&format=php&filename=Image.jpg&[email protected]".realpath("Image.jpg")."&token=" . urlencode($_SESSION["csrftoken"]); 

$app["curloptionscostun"] = array(
    CURLOPT_COOKIEFILE =>$CookieFile, 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_USERAGENT => $app["useragent"], 
    CURLOPT_POST => true, 
    CURLOPT_HEADER => true, 
    CURLOPT_HTTPHEADER => "Content-Type:multipart/form-data" 
); 

$ch = curl_init(); 
curl_setopt_array($ch, $app["curloptionscostun"]); 
curl_setopt($ch, CURLOPT_URL, $app["apiURL"]); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); 
$result = unserialize(curl_exec($ch)); 
if(curl_errno($ch)){ 
    echo "Error 004: " . curl_error($ch); 
} 
curl_close($ch); 
+0

你只是简单地认为什么都不会出错。如果curl_exec失败,它将返回boolean false,然后尝试解除序列化。试试'$ res = curl_exec(...); if($ res === false){die(curl_error($ ch));看看会发生什么。 –

+0

感谢我现在可以赶上错误 – webli

+0

不要做那样的文件上传。 curl将接受一组key = value对,并且会检测数组中的'@ filename'类型上传。但它不会拆开预先创建的查询字符串并检查它是否为@ filename-type结构。 –

回答

0

是这更好的?

curl_setopt(
    $ch, 
    CURLOPT_POSTFIELDS, 
    array(
     'action' =>'upload', 
     'format'=>'php', 
     'filename'=>'Image.jpg', 
     'token' => urlencode($_SESSION["csrftoken"]), 
     'file' => '@' . realpath('Image.jpg') 
));