2012-03-27 139 views
1

我與使用curl從PHP的Java服務器和PHP服務器有工作關係。

使用curl我發送了一個數組與圖像數據和一些字符串值。

在PHP中,圖像是從HTTP POST表單直接獲取(tmp storage)併成功放入數組中。但是現在我需要move_uploaded_file先到指定的目錄,然後用fopen讀回另一個使用curl的PHP文檔。

唯一的區別是我用$ _FILES [「photo」] [「tmp_name」],現在我用fopen。代碼:

// $image = $_FILES["photo"]["tmp_name"]; Had success with this one from FORM POST 
// $filename = basename($_FILES['photo']['name']); 

$filename = $_POST["filename"]; // file name from ajax post 

$image = fopen('C:\\xampp\\htdocs\\app\\uploads\\'.$filename, "rw"); // the sinner? 

$data = array(
    'uploaded_file' => '@' . $image . ';filename=' . $filename, 
); 
.... 
$c = curl_init(); 
curl_setopt($c, CURLOPT_URL, $url); // the Java web service URI 
curl_setopt($c, CURLOPT_HEADER, false); 
curl_setopt($c, CURLOPT_POST, true); 
curl_setopt($c, CURLOPT_POSTFIELDS, $data); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, true); 

$output = curl_exec($c); 

錯誤:

Erreur curl : couldn't open file "Resource id #3" 
Array 
(
    [uploaded_file] => @Resource id #3;filename=480x_13197743.jpg 
) 

編輯:

我印刷從工作溶液中的陣列,並且它指向的文件/資源​​是不同的:

Array 
(
    [uploaded_file] => @C:\xampp\tmp\php20EA.tmp;filename=magn.png 
) 

或者更好的說,它只有一個文件路徑字符串。好的,這樣就可以使用文件路徑來修復它,並忽略任何二進制數據的副本。回答了我的問題= |

+0

你知道嗎php腳本執行文件$ _FILES [「photo」] [「tmp_name」]將被刪除。您必須將其移到其他位置。 – MatejB 2012-03-27 10:00:22

+0

你想在數組中放什麼?一個文件名?或文件本身(以某種編碼格式)?用'fopen'你會得到一個句柄。 – initall 2012-03-27 10:03:28

+0

那就是我用'move_uploaded_file'說的。我不知道文件編碼有什麼不同,或者不適合用於數組,無法使用atm。 – gorn 2012-03-27 10:04:05

回答