Php 将多部分/表单数据放入数组而不进行处理
基本上,我用cURL传递表单数据,这里它被硬编码到边界中并发送请求Php 将多部分/表单数据放入数组而不进行处理,php,curl,multipartform-data,Php,Curl,Multipartform Data,基本上,我用cURL传递表单数据,这里它被硬编码到边界中并发送请求 $postfields = '--Boundary+0xAbCdEfGbOuNdArY'."\r\n"; $postfields .= 'Content-Disposition: form-data; name="device_timestamp"'."\r\n\r\n"; $postfields .= (time() - (100 * rand(1,6)))."\r\n"; $postfields .= '--Boundary
$postfields = '--Boundary+0xAbCdEfGbOuNdArY'."\r\n";
$postfields .= 'Content-Disposition: form-data; name="device_timestamp"'."\r\n\r\n";
$postfields .= (time() - (100 * rand(1,6)))."\r\n";
$postfields .= '--Boundary+0xAbCdEfGbOuNdArY'."\r\n";
$postfields .= 'Content-Disposition: form-data; name="photo"; filename="photo"'."\r\n";
$postfields .= 'Content-Type: image/jpeg'."\r\n\r\n";
$postfields .= file_get_contents($path)."\r\n";
$postfields .= '--Boundary+0xAbCdEfGbOuNdArY--'."\r\n";
$result = $this->curl_request('api.com/upload/',$postfields,array(
CURLOPT_HTTPHEADER => array(
'Content-type: multipart/form-data; boundary=Boundary+0xAbCdEfGbOuNdArY',
'Content-Length: '.strlen($postfields),
'Expect:'
)
));
我如何将这些数据传递到这样的函数中
private function multipart_build_query($fields){
$retval = '';
foreach($fields as $key => $value){
$retval .= "--".$this->boundary."\r\nContent-Disposition: form-data; name=\"$key\"\r\n\r\n$value\r\n";
}
$retval .= "--".$this->boundary."--";
return $retval;
}
我猜我不得不修改我的multipart\u build\u query
,因为下面这行:内容类型:image/jpeg
我试着做了以下几件事
$data_array = array(
"device_timestamp" => (time() - (100 * rand(1,6))),
"photo" => "@".$path,
);
$body = $curl->multipart_build_query($data_array);
但是没有用我建议您制作如下数组:
$time = (string) (time() - (100 * rand(1,6)));
$photo = file_get_contents($path);
$fields = array(
array(
'headers' => array(
'Content-Disposition' => 'form-data; name="device_timestamp"',
'Content-Length' => strlen($time)
),
'body' => $time
),
array(
'headers' => array(
'Content-Disposition' => 'form-data; name="photo"; filename="photo"',
'Content-Type' => 'image/jpeg',
'Content-Length' => strlen($photo)
),
'body' => $photo
)
);
private function multipart_build_query($fields)
{
$data = '';
foreach ($fields as $field) {
// add boundary
$data .= '--' . $this->boundary . "\r\n";
// add headers
foreach ($field['headers'] as $header => $value) {
$data .= $header . ': ' . $value . "\r\n";
}
// add blank line
$data .= "\r\n";
// add body
$data .= $field['body'] . "\r\n";
}
// add closing boundary if there where fields
if ($data) {
$data .= $data .= '--' . $this->boundary . "--\r\n";
}
return $data;
}
然后,该方法可以如下所示:
$time = (string) (time() - (100 * rand(1,6)));
$photo = file_get_contents($path);
$fields = array(
array(
'headers' => array(
'Content-Disposition' => 'form-data; name="device_timestamp"',
'Content-Length' => strlen($time)
),
'body' => $time
),
array(
'headers' => array(
'Content-Disposition' => 'form-data; name="photo"; filename="photo"',
'Content-Type' => 'image/jpeg',
'Content-Length' => strlen($photo)
),
'body' => $photo
)
);
private function multipart_build_query($fields)
{
$data = '';
foreach ($fields as $field) {
// add boundary
$data .= '--' . $this->boundary . "\r\n";
// add headers
foreach ($field['headers'] as $header => $value) {
$data .= $header . ': ' . $value . "\r\n";
}
// add blank line
$data .= "\r\n";
// add body
$data .= $field['body'] . "\r\n";
}
// add closing boundary if there where fields
if ($data) {
$data .= $data .= '--' . $this->boundary . "--\r\n";
}
return $data;
}
现在有了一个非常通用的方法,它支持任何类型的字段