使用Android将照片上传到PHP的服务器文件夹中

问题描述:

我想将照片保存在服务器中,但保存在其他文件夹中。该文件夹的结构是:使用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

变化:

$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

好像有一个斜杠在用户名“$ 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权限,这就是问题所在。 >>> 如何更改创建文件夹的方式以获取正确保存照片的所有权限。 – CapAm