2011-01-20 82 views
0

我试图将文件发送到HTTPS URL使用此代码:发送文件到HTTPS URL使用卷曲和PHP

$file_to_upload = array('file_contents'=>'@'.$target_path); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $target_url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_RETURNTRANSER, FALSE); 
curl_setopt($ch, CURLOPT_UPLOAD, TRUE); 
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'file='.$file_to_upload); 
$result = curl_exec($ch); 
$error = curl_error($ch); 
curl_close ($ch); 
echo " Server response: ".$result; 
echo " Curl Error: ".$error; 

但由于某种原因,我得到这样的响应:

Curl Error: Failed to open/read local data from file/application 

任何意见将有助于感谢!

更新:当我拿出CURLOPT_UPLOAD,我从目标服务器的响应,但它说,有一个在有效载荷

+0

您确定`$ target_path`是一个有效且可读的文件? – 2011-01-20 18:38:11

+0

我有,它的八进制是775,所有者apache – 2011-01-20 19:02:56

回答

5

你传递一个比较奇怪的参数CURLOPT_POSTFIELDS没有文件。尝试更多的东西一样:

<? 
$postfields = array('file' => '@' . $target_path); 
// ... 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); 
?> 

此外,你可能想CURLOPT_RETURNTRANSFERtrue,否则$结果不会得到输出,它会改为直接发送到缓冲器/浏览器。

This example从php.net可能是有用的,以及:

<?php 

$ch = curl_init(); 

$data = array('name' => 'Foo', 'file' => '@/home/user/test.png'); 

curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

curl_exec($ch); 
?> 
+0

我终于得到了这个工作,谢谢coreyward – 2011-01-20 22:21:49

1

在coreward的回答之上:

how to upload file using curl with php,从PHP 5.5开始,你需要使用curl_file_create($path),而不是"@$path"

测试:它确实有效。

随着@方式没有文件上传。