如何使用PHP和CURL上传多维POSTFIELDS的文件(multipart / form-data)?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了如何使用PHP和CURL上传多维POSTFIELDS的文件(multipart / form-data)?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我在使用 PHP和CURL发布带文件上传的多维数组时遇到问题.

多维数组例如:

$post['question'] = 'Are you human?';
$post['answers'] = array('yes','no','maybe');
$post['file'] = '@/path/to/file';

// Output:

Array(
    'question' => Are you human?,'answers' => Array(
        '0' => yes,'1' => no,'2' => maybe
        ),'file' => @/path/to/file
)

如果您只是尝试使用CURL中的CURLOPT_POSTFIELDS发布此内容,那么为什么这不起作用有以下几种

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,'http://example.COM');
curl_setopt($ch,CURLOPT_RETURNtransfer,true);
curl_setopt($ch,CURLOPT_POST,CURLOPT_POSTFIELDS,$post);

$response = curl_exec($ch);

首先,CURLOPT_POSTFIELDS的官方PHP description说:

听起来你可以将任何类型的数组传递给POSTFIELDS吗?错误. POSTFIELDS只接受非标量值,并且在传递多维数组时会阻塞Array to string转换错误.因此,您拥有的唯一其他选项是http_build_query()您的数组能够传递不会阻塞的多维数组.

但是..正如您可以在PHP页面上的注释中看到的那样:

如果将urlencoded字符串传递给POSTFIELDS,则该帖子将不会进行多部分/表单数据编码,从而导致文件上载失败.

因此,将两者与CURL结合起来似乎几乎是不可能的,如果您使用常规HTML表单则不会有问题.

我的问题是:是否有可能绕过这个奇怪的CURL怪癖来发布多维数组和文件上传

multipart / form-data不支持嵌套值.而且我不相信CURL也能做到.

我怀疑你的请求的接收端也是一个PHP脚本.如果,那么你可以提交一个嵌套数组作为其中一个值,如果你自己准备它:

$post['answers[0]'] = "yes";
 $post['answers[1]'] = "no";
 $post['answers[2]'] = "maybe";

从理论上讲,你只需要没有索引的’answers []’,但这会覆盖前面的值 – 因此只适用于http_build_query.

我不确定PHP中是否有任何HTTP库可以自动执行此操作.

脚本宝典总结

以上是脚本宝典为你收集整理的如何使用PHP和CURL上传多维POSTFIELDS的文件(multipart / form-data)?全部内容,希望文章能够帮你解决如何使用PHP和CURL上传多维POSTFIELDS的文件(multipart / form-data)?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。