使用curl和php脚本上传图片和文本

3

我一直使用以下脚本而没有遇到任何问题,但今天出了点问题。我更换了Linux发行版,不知道是否有关。

     $full = realpath($newPath."/".$image);
     $data = array('name' => $name, 'pic' => '@'.$full.";type=image/jpeg");
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_VERBOSE, 1);
     curl_setopt($ch, CURLOPT_POST, 1);
     curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: multipart/form-data"));
     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
     curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
     $contents = curl_exec($ch);

我正在通过php表单发布信息,但由于它被检测为"application/octet-stream"而不是图像,因此我无法提交图像。

如何指定内容类型为图像并同时提交文本?

附言:我查看了之前提出的类似问题,只找到一个与我的目的完全相同的问题,但没有任何回复。我不是在尝试下载任何图像,我正在尝试通过同一表单上传图像和填写几个文本字段。


不,这不是重复的,因为我的目的与那个人不同。我正在尝试上传图像和文本,而那个人正在尝试下载@MaxZoom。 - Kevin Gravell
你使用了哪些版本的PHP?(旧版和新版) - Dekel
哦,我在使用 PHP 7.0.9 (cli) (built: Jul 20 2016 17:12:28) ( NTS ) 版本,版权所有 (c) 1997-2016 The PHP Group,Zend Engine v3.0.0,版权所有 (c) 1998-2016 Zend Technologies。我知道我用 php v5 测试了脚本,可能这就是它无法正常工作的原因…不是吗? @Dekel - Kevin Gravell
我遇到了类似的问题,使用几乎相同的cURL选项,在从PHP 5.4升级到7.0后。在接收端,$_FILES超全局变量为空,没有错误信息。 - TonyTheJet
1个回答

4

好的,我找到了问题所在。你需要使用CurlFile()类来代替'@'. $file_name的例子。

文档:http://php.net/manual/en/class.curlfile.php

改为:

$postfields['file_contents'] = '@' . $filename;

你需要这样做

$postfields['file_contents'] = new CurlFile($filename);

你可以查看构造函数中的说明文档,以指定mime类型和名称在另一端进行操作,这就是基本要点。

祝你好运!


我应该补充说明,这种方法应该用于PHP 5.5+(包括PHP 7)! - TonyTheJet
1
谢谢你的回答!它对我很有帮助! :) - Kevin Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接