2014-02-16 110 views
0

我想將照片保存在服務器中,但保存在其他文件夾中。該文件夾的結構是:使用Android將照片上傳到PHP的服務器文件夾中

---main folder 
| 
---uploadphoto.php 
| 
---photos (folder) 
    | 
    --$email (folder) 

當用戶寄存器,I創建一個文件夾與權限0777的用戶名,該文件夾是成功創建。

當我嘗試上傳用戶文件夾內的照片,它不起作用,但如果我改變路徑來保存文件,它完美的作品。這意味着在用戶文件夾之外的文件夾「照片」中。

這是我的PHP代碼來保存文件夾中的照片:

$email = $_POST['email']; 
$ruta = "photos/". $email . basename($_FILES['fotoUp']['name']); 
if(move_uploaded_file($_FILES['fotoUp']['tmp_name'], $ruta)) 
    chmod ("photos/". $email . basename($_FILES['fotoUp']['name']), 0644); 

以及用戶名通過Android的傳遞:

List<NameValuePair> paramsu = new ArrayList<NameValuePair>(); 
paramsu.add(new BasicNameValuePair("email", email)); 
paramsu.add(new BasicNameValuePair("path", path)); 

JSONObject json = jsonParser.makeHttpRequest(UPLOAD_PHOTO_URL, "POST", paramsu); 

我怎樣才能把照片的文件夾裏面?我認爲這是PHP語法的問題。我已經在Android中進行了調試,並將可變電子郵件內容發送給PHP。

註冊用戶時,創建文件夾的方式是。

$folderemail = $_POST['email']; 
    mkdir("photos/$folderemail", 0777); 
    chmod("photos/$folderemail", 0644);  

這是我現在的文件:

$email = "$_POST['email']"; 
$ruta = "photos/". $email . "/" . basename($_FILES['fotoUp']['name']); 
if(move_uploaded_file($_FILES['fotoUp']['tmp_name'], $ruta)) 
    chmod ($ruta . basename($_FILES['fotoUp']['name']), 0644); 

我也試過:

$email = "$_POST['email']"; 
$ruta = "photos/$email/" . basename($_FILES['fotoUp']['name']); 
if(move_uploaded_file($_FILES['fotoUp']['tmp_name'], $ruta)) 
    chmod ($ruta . basename($_FILES['fotoUp']['name']), 0644); 

這:

//$email = "$_POST['email']"; 
$ruta = "photos/1234/" . basename($_FILES['fotoUp']['name']); 
if(move_uploaded_file($_FILES['fotoUp']['tmp_name'], $ruta)) 
    chmod ($ruta . basename($_FILES['fotoUp']['name']), 0644); 

這完美的作品,但當我把變量$電子郵件與相同的名稱不起作用。

應用程序的一部分是這樣的:

List<NameValuePair> paramsu = new ArrayList<NameValuePair>(); 
paramsu.add(new BasicNameValuePair("email", email)); 
paramsu.add(new BasicNameValuePair("path", filename)); 

Log.d("request!", "starting"); 

JSONObject json = jsonParser.makeHttpRequest(
    UPLOAD_PHOTO_URL, "POST", paramsu); 

Log.i("tag", email);//DEBUG (Email that upload the photo) 

的Log.i返回正確的電子郵件測試 「1234」。

當我創建電子郵件文件夾中的服務器使用此命令在PHP的工作原理:

$folderemail = $_POST['email']; 
mkdir("photos/$folderemail", 0777); 
+0

什麼是用戶文件夾名稱,來自$ user還是$ email – meda

+0

是的是$ email,對於錯誤感到抱歉。 – CapAm

+0

我的服務器位於Ubuntu服務器上,但我嘗試使用不帶@的電子郵件,因爲我必須知道如何將照片保存到文件夾中。 – CapAm

回答

0

變化:

$ruta = "photos/". $email . basename($_FILES['fotoUp']['name']); 

$ruta = "photos/$email/".basename($_FILES['fotoUp']['name']); 
+0

它不起作用,照片保存在照片文件夾,而不是電子郵件文件夾,我不知道爲什麼... – CapAm

+0

回聲它...我不認爲電子郵件是好路徑 – meda

+0

@UKAndroid你是否已經修復這條線到'chmod(「photos /」。$ email。 basename($ _FILES ['fotoUp'] ['name']),0644);'? – meda

0

好像有一個斜槓在用戶名「$ email」和文件名之間缺失。所以你基本上是存儲這樣的:

$email = "[email protected]"; 

然後

$ruta = "/photos/[email protected]"; 

所以添加 「/」。在魯塔變量至極$電子郵件後,將使它像這樣:

$ruta = "photos/". $email . "/" . basename($_FILES['fotoUp']['name']); 

附:儘量避免CHMOD 0777,這會造成嚴重的安全漏洞。嘗試使用644代替(使用PHP作爲與虛擬主機UID相同的用戶運行)

+0

它不起作用。照片保存在/ photos文件夾中,而不是/ photos/$ email文件夾。我可以嘗試使用電子郵件「1234」並將它發送到PHP文件,但它不保存在正確的文件夾中。 這是我現在的檔案: $ email =「$ _POST ['email']」; $ ruta =「照片/」。 $電子郵件。 「/」。 basename($ _FILES ['fotoUp'] ['name']);如果(move_uploaded_file($ _ FILES ['fotoUp'] ['tmp_name'],$ ruta)) chmod($ ruta。basename($ _FILES ['fotoUp'] ['name']),0644); – CapAm

+0

通過將文件名硬編碼到$ ruta來測試,來檢查創建的目錄是否可寫。確保它可以正常工作,然後通過在您的代理碼中回顯$ ruta來檢查您是否粘貼了錯誤的名稱。另外,您將fotoUP名稱var添加到$ ruta兩次。只需使用chmod($ ruta,0644); (但這不是這裏的主要問題) – RoyB

+0

我檢查了第一個PHP文件來創建文件夾和權限。我創建了777權限,但是當我輸入我的服務器時,這個文件夾沒有su權限,這就是問題所在。 <<<< $ folderemail = $ _POST ['email']; mkdir(「photos/$ folderemail」,0777); chmod(「$ folderemail /」,0777); >>>> 如何更改創建文件夾的方式以獲取正確保存照片的所有權限。 – CapAm

相關問題