什么是相当于命令行卷曲的PHP卷曲?

时间:2014-06-02 15:21:28

标签: php curl

我已经在命令提示符下使用curl测试了这个命令,它可以工作并完成我想要它做的事情。

curl -T filetoupload.tmp http://example.com -H "Accept: text/html" -H "Content-type: appliction/pdf" > filename.htm

然后我尝试在php中表达这一点(我运行PHP v5.5)并编写了这段代码,但是远程服务器并不喜欢它,所以它显然没有做同样的事情。

$ch = curl_init("http://example.com"); 
$cfile = curl_file_create('filetoupload.tmp', 'application/pdf', 'filename');
$data['file'] = $cfile;
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-type: application/pdf',
  'Accept: text/html'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

我做错了什么?

1 个答案:

答案 0 :(得分:0)

curl -T filetoupload.tmp将文件上传为RAW帖子正文。您的PHP代码正在发送包含标题的文件,就像您使用multipart/form-data发布表单一样。

您需要在PHP代码中设置 raw 帖子正文。此外,curl -T似乎使用PUT而不是POST

$ch = curl_init("http://example.com"); 
$file = fopen('filetoupload.tmp', 'r');
curl_setopt($ch, CURLOPT_INFILE, $file);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize('filetoupload.tmp'));
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-type: application/pdf',
  'Accept: text/html'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
fclose($file);