使用php上传图片时无法制作目录并将文件放入其中?

时间:2015-04-15 14:14:44

标签: php

我目前无法将图片上传到目录, 这是我的PHP代码:

<?php
//Check whether the user has uploaded a profile pic or not
  $check_pic = mysqli_query($conn,"SELECT profile_pic FROM users2 WHERE username='$user'");
  $get_pic_row = mysqli_fetch_assoc($check_pic);
  $profile_pic_db = $get_pic_row['profile_pic'];
  if ($profile_pic_db == "") {
  $profile_pic = "images/default_pic.jpg";
  }
  else
  {
  $profile_pic = "userdata/profile_pics/".$profile_pic_db;
  }
  //Profile Image upload script
  if (isset($_FILES['profilepic'])) {
   if (((@$_FILES["profilepic"]["type"]=="image/jpeg") || (@$_FILES["profilepic"]["type"]=="image/png") || (@$_FILES["profilepic"]["type"]=="image/gif"))&&(@$_FILES["profilepic"]["size"] < 1048576)) //1 Megabyte
  {
   $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
   $rand_dir_name = substr(str_shuffle($chars), 0, 15);
   mkdir("/userdata/profile_pics/$rand_dir_name");

   if (file_exists("/userdata/profile_pics/$rand_dir_name/".@$_FILES["profilepic"]["name"]))
   {
    echo @$_FILES["profilepic"]["name"]." Already exists";
   }
   else
   {
    move_uploaded_file(@$_FILES["profilepic"]["tmp_name"],"/userdata/profile_pics/$rand_dir_name/".$_FILES["profilepic"]["name"]);
    $profile_pic_name = @$_FILES["profilepic"]["name"];
    $profile_pic_query = mysqli_query($conn,"UPDATE users2 SET profile_pic='$rand_dir_name/$profile_pic_name' WHERE username='$user'");

   }
  }
  else
  {
      $msg5 =  "Invailid File! Your image must be no larger than 1MB and it must be either a .jpg, .jpeg, .png or .gif";
  }
  }

?>

这是我的HTML代码:

<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="profilepic" /><br><br>
<input type="submit" name="uploadpic" value="Change Profile Photo">
</form>

其中$ user是登录用户的用户名,我的数据库连接工作正常:我可以更新数据库中的profile_pic查询,但不能将其上传到userdata文件夹。我使用的是godaddy帐户,我的php.ini文件中是否需要更改配置?

1 个答案:

答案 0 :(得分:1)

我相信问题就在这里

mkdir("/userdata/profile_pics/$rand_dir_name");

这是试图在系统的根目录中创建一个文件夹,你几乎肯定也没有访问权限。您可能希望相对于您的网站创建它,例如:

mkdir(__DIR__."/userdata/profile_pics/$rand_dir_name");

可能会解决问题。

此外,如果父文件夹不存在,您可以使用mkdir的第三个参数来创建它们。默认情况下,mkdir仅创建最后一个目录,因此如果它之前的那个目录不存在,它将失败。