使用PHP上传文件时出错

时间:2013-04-02 07:32:04

标签: php html

我得到了这个PHP代码:

SESSION_start();

$conn = mysql_connect("localhost", "root", "");
if(!$conn) die("Cannot connect to the database server: <br />
    ".mysql_error());

$db = mysql_select_db("tsismics", $conn);
if(!$db) die("Cannot connect to the database: <br />
    ".mysql_error());

 $userId = $_SESSION['userId'];
 $dir = $userId."/".$_FILES['profpic']['name'];
 $filename = $_FILES['profpic']['name'];

 $target = "profile_pictures/".$userId."/";
 echo $target;

 mysql_query("UPDATE users SET photo=\"$dir\" WHERE userId=$userId", $conn);

 if(move_uploaded_file($_FILES['profpic']['tmp_name'], $target)) {
     echo "The file ". basename( $_FILES['profpic']['name']). " has been uploaded, and your information has been added to the directory"; 
 } 
 else { 
     echo "Sorry, there was a problem uploading your file."; 
 }

这是我的HTML块:

<form method="POST" action="upload-prof-pic.php" enctype="multipart/form-data">
    <input type="file" value="upload profile pic" name="profpic"/>
    <input type="submit" value="Upload" id="prof-pic-submit"> 
</form>

上传时,会在文件夹中创建一个文件,其中userId为文件名,没有任何扩展名:profile_pictures


我忘了发布这个..它有这两个错误:

警告:move_uploaded_file(profile_pictures / 1 / 3.png):无法打开流:第22行的C:\ wamp \ www \ project \ upload-prof-pic.php中没有此类文件或目录

警告:move_uploaded_file():无法在C:\ wamp \ www \ project \ upload-prof-pic中将'C:\ wamp \ tmp \ php2070.tmp'移动到'profile_pictures / 1 / 3.png'。第22行的PHP

5 个答案:

答案 0 :(得分:2)

哦,还要注意一件事(根据您更新的问题),因为您试图将每个图片存储在以用户ID命名的新目录中,您还需要创建该目录,并且显然具有写入权限。 / p>

mkdir

$target = "profile_pictures/".$userId."/";

应该是

$target = "profile_pictures/".$userId."/".$filename;

哦,还在使用着名的mysql_* api?

答案 1 :(得分:1)

你需要:

  1. to make the folder if it doesn't exist
  2. to give it enough privilege to write into it
  3. to use move_uploaded_file properly。 (文件参数的路径而不是文件夹)
  4. to stop using mysql_ functions(参见红色矩形?)
  5. 示例:

    session_start();
    
    if(!empty($_FILES['profpic'])){
    $conn = mysql_connect("localhost", "root", "");
    if(!$conn) die("Cannot connect to the database server: <br />
        ".mysql_error());
    
    $db = mysql_select_db("tsismics", $conn);
    if(!$db) die("Cannot connect to the database: <br />".mysql_error());
    
    $userId = $_SESSION['userId'];
    $filename = $_FILES['profpic']['name'];
    
    $target = "profile_pictures/".$userId.'/'.$filename;
    echo $target;
    
    mysql_query("UPDATE users SET photo=\"$dir\" WHERE userId=$userId", $conn);
    if(!file_exists("profile_pictures/".$userId)){
       mkdir("profile_pictures/".$userId, 700);
    }
    if(move_uploaded_file($_FILES['profpic']['tmp_name'], $target)) {
         echo "The file ". basename( $_FILES['profpic']['name']). " has been uploaded, and your information has been added to the directory"; 
     } 
     else { 
         echo "Sorry, there was a problem uploading your file."; 
     }
    }
    

答案 2 :(得分:0)

我不确定这是否是有效的,但请尝试将SESSION_start();更改为session_start();

看起来您可能想删除/或甚至更好地创建时间/文件名的md5,因此profile_pictures / 1 / 3.png正在寻找profile_pictures / 1作为目录

使用这样的东西可能会起作用

$file = md5($_FILES['profpic']['name'] . microtime(true)) . "." . pathinfo($_FILES['profpic']['name'], PATHINFO_EXTENSION);

应该通过使用pathinfo()

为您提供79054025255fb1a26e4bc422aef54eb4.png扩展名保留的内容

修改 再次查看你的问题,文件不是什么让你/1作为文件夹。我建议将所有配置文件头像放在一个文件夹中,而不是每个用户都有一个包含一个文件的文件夹。更改以下行

$target = "profile_pictures/".$userId."/";

$target = "profile_pictures/". $_FILES['profpic']['name'];
#OR
$target = "profile_pictures/" . $file;#if using md5 as above

我仍然建议使用上述md5来克服相同的文件名上传

答案 3 :(得分:0)

我认为您正在尝试创建文件夹或目录并将文件一起上传。 在这种情况下,我建议你先执行这个命令:

mkdir("profile_pictures/".$userId , 700);

在上传文件之前创建目录。

希望没有问题...

答案 4 :(得分:0)

正如我告诉你的那样,你早期发布的错误显示文件夹“1”不存在或至少没有上传的权限所以我认为你必须检查它是否不存在然后如果它是创建它然后使用chmod将其权限更改为适当的特权并继续上传过程。希望这能解决你的问题:)