2011-01-20 91 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"

測試:它確實有效。

隨着@方式沒有文件上傳。