2014-10-31 99 views
-1

這是用於驗證概念的實驗。我創建了一個VPS,其中有一個簡單的上傳表單和PHP表單處理器腳本。這一點是爲了測試我們正在開發的iOS和Android應用程序。這個問題不是關於安全性或效率(還),而僅僅是功能。我需要修改下面的PHP以使用POST接收圖像,而不需要HTML FORM的幫助。我們目前正在發佈到Dropbox和Google Drive沒有問題。我們正在研究如何將圖像存儲在我們自己的服務器上,我們只需要制定一個概念驗證來接收使用POST提交的PHP圖像。如何修改此腳本以允許使用PHP POST URL

那就不要這樣了;我想通過可用的唯一上載方法將移動設備上的圖像發送到服務器,而無需額外的庫 - HTTP。使用FTP或SSH需要額外的代碼,我們正試圖保持輕量級。所以我打算用HTTP POST發送一張圖片,我現在正在使用HTML FORM。但是,我需要制定一個只發送圖像的POST - 沒有其他變量。這是我目前的HTML表單:

<!-- The data encoding type, enctype, MUST be specified as below --> 
<form enctype="multipart/form-data" action="__URL__" method="POST"> 
    <!-- MAX_FILE_SIZE must precede the file input field --> 
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> 
    <!-- Name of input element determines name in $_FILES array --> 
    Send this file: <input name="userfile" type="file" /> 
    <input type="submit" value="Send File" /> 
</form> 

這是我的處理器PHP:

<?php 
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead 
// of $_FILES. 

$uploaddir = '/var/www/uploads/'; 
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 

echo '<pre>'; 
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { 
    echo "File is valid, and was successfully uploaded.\n"; 
} else { 
    echo "Potential error.\n"; 
} 

echo 'Here is some more debugging info:'; 
print_r($_FILES); 

print "</pre>"; 

?> 

完美的作品在一個瀏覽器,沒有問題。現在我需要修改PHP部分以允許通過URL進行POST - 實質上是放棄使用HTML表單。通過使用我發送的文件的名稱來區分上傳的文件是非常好的,或者我可以從我的應用程序提供該變量。任何指導將不勝感激。

參考:http://php.net/manual/en/features.file-upload.post-method.php

+1

我不確定我明白什麼是「通過URL的通用PO​​ST」? – Qualcuno 2014-10-31 14:11:50

+0

你是什麼意思「允許通過URL的普通POST」?如果您通過網址發帖,是不是GET? – 2014-10-31 14:12:04

+1

'可能的攻擊'?這很愚蠢。您甚至從不會檢查上傳是否真正成功。如果上傳失敗,那麼移動命令也會失敗,你會尖叫「攻擊!」 。不,你不能在沒有'file'輸入欄和表單的情況下上傳文件。其他任何情況都會導致安全違規,允許在用戶機器上任意上傳任何文件。 – 2014-10-31 14:12:55

回答

1

你並不需要修改你的PHP。只需從iOS/Android應用程序發送文件,就好像它是由表單發送的,即使用multipart/form-data編碼。

或者,如果您想以另一種方式發送它,請解釋您希望如何發送它,沒有其他標準方式來發送文件「POST over URL」。

+0

謝謝!我會嘗試第一個選項。其他詳細信息:我想通過可用的唯一上載方法將移動設備上的圖像發送到服務器,而無需額外的庫 - HTTP。使用FTP或SSH需要額外的代碼,我們正試圖保持輕量級。所以我打算髮送一個HTTP POST的圖像,我正在使用HTML FORM進行操作。我需要制定一個只發送圖像的POST - 沒有其他變量。 – sparecycle 2014-10-31 14:33:29

+1

當然,HTTP POST是要走的路。你只需要從你的應用程序發送適當的'multipart/form-data'請求。 – 2014-10-31 14:36:50