【问题标题】:Upload photo to server folder in PHP with Android使用 Android 将照片上传到 PHP 中的服务器文件夹
【发布时间】:2014-02-16 22:04:30
【问题描述】:

我想将照片保存在我的服务器中,但保存在其他文件夹中。文件夹的结构是:

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

当用户注册时,我创建了一个用户名,权限为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);

这很有效,但是当我将变量 $email 放入同名时不起作用。

应用程序的部分是这样的:

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);

【问题讨论】:

  • 用户文件夹名称是什么,是来自$user还是$email
  • 是的 $email,抱歉弄错了。
  • 我的服务器在 Ubuntu Server 上,但我正在尝试使用不带 @ 的电子邮件,因为我必须知道如何将照片保存到文件夹中。
  • 当我更改 php 脚本并将真正的文件夹 /photos/1234/ 文件上传到此文件夹时,但当我更改为 /photos/$mail/ 时不会。为什么?
  • 此时你应该发布整个脚本,我会复制它

标签: php android json


【解决方案1】:

改变:

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

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

【讨论】:

  • 它不起作用,照片保存在照片文件夹中,而不是电子邮件文件夹中,我不知道为什么......
  • @UKAndroid 你把这条线改成chmod ("photos/". $email . basename( $_FILES['fotoUp']['name']), 0644);了吗?
  • 不,我已经尝试更改此行并注释此行,但它不起作用
【解决方案2】:

用户名“$email”和文件名之间似乎缺少一个斜杠。所以你基本上像这样存储它:

什么时候

$email = "john@apple.com";

然后

$ruta = "/photos/john@apple.comfoto1.jpeg";

所以添加 ."/"。在 ruta 变量中的 $email 之后,它会变成这样:

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

附:尽量避免 CHMOD 0777,这会导致严重的安全漏洞。尝试改用 644(PHP 以与虚拟主机 UID 相同的用户身份运行)

【讨论】:

  • 它不起作用。照片保存在 /photos 文件夹而不是 /photos/$email 文件夹中。我可以尝试使用电子邮件“1234”并将其发送到 PHP 文件,但它没有保存在正确的文件夹中。这是我现在的文件: $email = "$_POST['email']"; $ruta =“照片/”。 $电子邮件。 “/”。基本名称($_FILES['fotoUp']['name']); if(move_uploaded_file($_FILES['fotoUp']['tmp_name'], $ruta)) chmod ($ruta.basename($_FILES['fotoUp']['name']), 0644);
  • 通过将文件名硬编码到 $ruta 来检查创建的目录是否可写,只是为了测试。确保它可以正常工作,然后通过将 $ruta 与您的原始代码相呼应来检查您是否没有将错误的名称粘合在一起。此外,您将两次添加 fotoUP 名称 var 到 $ruta。只需使用 chmod($ruta, 0644); (但这不是这里的主要问题)
  • 我检查了第一个 PHP 文件以创建文件夹和权限。我已经创建了 777 权限,但是当我进入我的服务器时,这个文件夹没有 su 权限,这就是问题所在。 >>>如何更改创建文件夹的方式以获得正确保存照片的所有权限。
  • 这些是出现的权限:www-data
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
  • 2011-05-16
相关资源
最近更新 更多