【问题标题】:How to hash the uploaded file name in db?如何在db中对上传的文件名进行哈希处理?
【发布时间】:2015-03-23 13:04:19
【问题描述】:

我有一个“个人资料图片”系统,每个注册用户都可以更改他们的个人资料图片,以便显示图片。上传的过程是将图片上传到名为pictures的文件夹中,然后将文件名写入名为"picture"的数据库行中,它可以工作,一切都很好,但我需要知道如何对上传的图片名称进行哈希处理所以如果两个人有不同的图片,但是同名的图片会上传一个文件,那就有问题了...

这是我的提交表单:

<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" name="submit">
</form>

我有此代码用于将文件上传到文件夹和数据库行:

<?php
    if(isset($_POST['submit'])){
        move_uploaded_file($_FILES['file']['tmp_name'],"pictures/".$user_id.$_FILES['file']['name']);
        $con = mysqli_connect("host","name","pass","db");
        $q = mysqli_query($con,"UPDATE members SET picture = '".$_FILES['file']['name']."' WHERE username = '".$_SESSION['username']."'");
    }
?>

这是在网站上显示图片的代码:

<?php   
    $con = mysqli_connect("host","name","pass","db");
    $q = mysqli_query($con,"SELECT * FROM members WHERE username = '".$_SESSION['username']."'");
    while($row = mysqli_fetch_assoc($q)){
        if($row['picture'] == ""){
            echo " <img src='pictures/public_icon.png' width='25' height='25'>"; *//This is default pic//*
        } else {
            echo " <img width='25' height='25' src='pictures/".$row['picture']."' alt='Profile Pic'>"; *//And this is pic from db row//*
        }                                    
    }
?>

我想知道如何在上传的文件夹和数据库行中对这张图片的名称进行散列... 我可以这样做吗?我会用 db 中的“id”和“date”行对其进行哈希处理,但我不知道如何..:/

【问题讨论】:

  • 您可以附加随机字符串或数字来解决此问题。
  • @Toretto - 怎么做?
  • 您也可以在服务器端更改上传的文件名,这样就不会有冲突
  • @SumitPatil - 抱歉,我不知道该怎么做:|

标签: php image hash mysqli


【解决方案1】:

用这个代替上传:

<?php
    if(isset($_POST['submit'])){

      /*
      * create a unique file name with the current time and ip address of 
      * user, since it is highly unlikely to have the same file uploaded 
      *form the same ip address at the same time
      */
      $unique_file_name = time(). $_SERVER['REMOTE_ADDR']. $_FILES['file']['name']; 

         //run query only if file upload and transfer succeeded
         if( move_uploaded_file($_FILES['file']['tmp_name'],"pictures/".$user_id. $unique_file_name) ){ 
            $con = mysqli_connect("host","name","pass","db");
            $q = mysqli_query($con,"UPDATE members SET picture = '".$_FILES['file']['name']."' WHERE username = '".$_SESSION['username']."'");
        }
    }
?>

【讨论】:

  • 文件名可以正常使用,但是现在如何从db中提取名称?
  • 而不是SELECT * 使用这个:"SELECT picture`
  • 但是现在,它只重命名profile_pics文件夹中的文件..数据库中的文件名称与您/其他PC中的名称相同...为什么?
  • 将此行:$q = mysqli_query($con,"UPDATE members SET picture = '".$_FILES['file']['name']."' WHERE username = '".$_SESSION['username']."'"); 更改为:$q = mysqli_query($con,"UPDATE members SET picture = '".$user_id. $unique_file_name."' WHERE username = '".$_SESSION['username']."'"); 让我知道它是否有效
【解决方案2】:

你可以试试这个

<?php
    if(isset($_POST['submit'])){
            $filename = $user_id.$_FILES['file']['name'];
            move_uploaded_file($_FILES['file']['tmp_name'],"pictures/".$filename);
            $con = mysqli_connect("host","name","pass","db");
            $q = mysqli_query($con,"UPDATE members SET picture = '".$filename."' WHERE username = '".$_SESSION['username']."'");
    } ?>    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2018-06-18
    • 2020-07-20
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多