2013-04-30 82 views
4

我使用PHP將文件上傳到我的服務器,卻有着一個噩夢使用這種簡單的HTML表單時,它似乎工作:PHP文件上傳(通過捲曲在命令行上)

<html><body> 
<form enctype="multipart/form-data" action="uploads.php" method="POST"> 
<input type="hidden" name="MAX_FILE_SIZE" value="100000" /> 
Choose a file to upload: <input name="uploadedfile" type="file" /><br /> 
<input type="submit" value="Upload File" /> 
</form> 

的PHP則是:

<?php 
$target_path = "uploads/"; 
$target_path = $target_path . basename($_FILES['uploadedfile']['name']); 
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
echo "The file ". basename($_FILES['uploadedfile']['name']). 
" has been uploaded"; 
} else{ 
echo "There was an error uploading the file, please try again!"; 
} 
?> 

是否有通過使用curl命令行或shell腳本這種技術來發送文件的任何可能的方式?即東西沿着線:

curl -f "@/path/to/my/file;type=text/html" http://mywebserver.com/uploads.php 

這一特定線路上給了我:「捲曲:(22)無法連接到:: 1:權限被拒絕」雖然有在網站上沒有密碼等等。我認爲這是可能的,但我得到的語法錯了?

+0

您還應該設置通過'-X「POST'' – fardjad 2013-04-30 19:49:17

+0

這個劇本非常小心地,因爲它上傳任何類型的文件,是一個安全漏洞發佈方法(腳本可能直接上傳到你的服務器,然後使用瀏覽器執行)...所以需要額外的編碼保護! – 2014-03-20 07:56:08

回答

7

我想你想要的參數是一個資本F(對於窗體)。小寫f表示失敗,並返回錯誤代碼22.嚴重的是,它在手冊中!

-f,--fail

(HTTP)默默地失效服務器上的錯誤(沒有輸出)。這是 主要是爲了更好地啓用腳本等,以更好地處理嘗試失敗的 。在正常情況下,當HTTP服務器未能發送一個 文檔時,它會返回一個HTML文檔來說明這一點(通常也會爲 描述原因以及更多)。此標誌將防止捲曲從輸出 這一點,返回錯誤22

這種方法是不是故障安全和有場合 非成功響應代碼將漏網之魚,尤其是當 認證涉及(響應代碼401和407)。

-F,--form

(HTTP)這允許捲曲模擬填充的形式,其中用戶已經 按下提交按鈕。這會導致根據RFC 2388使用 Content-Type multipart/form-data捲曲POST數據。這使得 上傳二進制文件等。要強制將「content」部分設置爲 文件,請在文件名前加上@ 標誌。要從文件中獲取內容 零件,請在文件名前加上符號<。 @和<之間的差別在於@使得文件作爲文件上載被附加在文章 中,而<使文本字段成爲 從文件獲得該文本字段的內容。

此外,您還沒有命名您的文件變量。我想你想:

curl -F "[email protected]/path/to/my/file" http://mywebserver.com/uploads.php 
+0

示例:http://ariejan.net/2010/06/07/uploading-files-with-curl/ – mbarlocker 2013-04-30 19:58:11

+1

謝謝,雖然它仍然無法正常工作。(這次PHP返回:「上傳文件時出現錯誤」,我認爲我今天註定是-f失敗 – BSUK 2013-04-30 20:03:55

+0

我已經添加了一些關於命名文件變量的信息 – 2013-04-30 20:08:31