2012-01-24 95 views
2

我要求用戶上傳的文件,可以通過以下形式進行POST請求到另一個頁面upload.php的錯誤上傳文件中使用PHP

<form name="input" action="upload.php" method="post" enctype="multipart/form-data"> 
    Username: <input type="text" name="username" /><br/> 
    <input type="file" name="file" /> <br/> 
    <input type="submit" value="Submit" /> 
</form> 

在upload.php的,我用的填充數據在前面的表格,要使用捲曲功能,我寫了下面的代碼中的POST請求:

$data = array(
     "username" => $username, 
     "password" => $password, 
     "title" => $title, 
     "srcfile" => "@".$_FILES['file']['tmp_name']); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_URL, $api); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
$response=curl_exec($ch); 

echo $response; 

這樣我能夠成功上傳該文件,但上載的文件有一個名稱,沒有任何擴展名是由此設定

$ _FILES [ '文件'] [ 'tmp_name的值']

,因此我不能夠使用服務器上的文件。

我應該如何使用從POST請求中獲得的文件來創建另一個POST請求?

在此先感謝。

+0

嗨,歡迎來到StackOverflow!看看你的代碼,你似乎對PHP文件上傳工作缺乏瞭解。看看手冊,再試一次並更新你的問題,如果你仍然有困難實現你的目標:http://www.php.net/manual/en/features.file-upload.post-method.php –

+0

有也嘗試過使用「srcfile」=>「@」。$ _ FILES ['srcfile'] ['tmp_name']。「; type =」。$ _ FILES ['srcfile'] ['type']但仍然不起作用 – Decoded

+0

跨越這** PHP的錯誤**雖然我使用PHP 5.3.1 https://bugs.php.net/bug.php?id=48962 – Decoded

回答

2

在上述情況下的問題是,雖然我們可以用$ _FILES [文件「文件」] [「tmp_name的值」],然而,文件擴展名是不一樣的原始文件,甚至下面的代碼無法正常工作,應運行在PHP 5.0

"srcfile" => "@".$_FILES['file']['tmp_name'].";filename=".$_FILES['file']['name'].";type=".$_FILES['file']['type'] 
提交的這個bug https://bugs.php.net/bug.php?id=48962

我終於使用了以下解決方案來解決上述問題:

步驟1:將通過表單的POST請求發送的文件臨時保存在服務器或您的機器上的文件夾中。

步驟2:現在使用臨時保存文件的路徑來使用CURL發出POST請求,該請求的代碼使用方法與上述文件位置更改相同。

"srcfile" => "@".temp_file_path 
1

$_FILE['file']是一個數組,表示complex typesSimpleXMLElement的屬性。

+0

請檢查以上問題的更新版本 – Decoded

1

您應該讀取文件,對其進行編碼並將編碼值分配給XML元素。例如,您可以使用類似:

$xml->file = base64_encode(file_get_contents($_FILE['file'][ 'tmp_name' ])); 

當然,在真正的代碼,你應該添加錯誤檢查等

+0

此答案無效在我的情況下,因爲我還必須在POST請求中附帶文件名,將服務器上傳的文件指定爲「srcfile」參數。 – Decoded