我不是一个PHP人,但是尝试将一个cli CURL调用移植到PHP ...原来我有:
curl -i -H "Content-Type: text/csv" -X POST --data-binary @$filepath $destination
我试图把它变成:
<?php
$data['Filedata'] = "@".$filepath;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $destination.'/_');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/csv"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
?>
问题是这导致额外的标头被添加到目的地,包含------------------------------6614b0cf8aae
Content-Disposition: form-data; name=Filedata; filename=$filepath Content-Type: application/octet-stream.
我认为这是因为我使用$data['Filedata']
的方式,所以我尝试用下面的CURLOPT_POSTFIELDS
行替换,但这只是最后发布路径字符串而不是文件本身。< / p>
curl_setopt($ch, CURLOPT_POSTFIELDS, "@".$filepath);
任何人都在指出我缺少的东西?就像我说的,不是一个PHP人!
答案 0 :(得分:2)
直接加载文件内容即可。目前,您正在执行与原始curl命令行不同的键/值削减POST数据。
curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents($filepath));