目录和数据库中的PHP图像哈希

目录和数据库中的PHP图像哈希,php,mysql,mysqli,Php,Mysql,Mysqli,当我上传图片时,我仍然很难对它们进行哈希处理。我有以下代码: $target_dir = "images/uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); hash_file('sha256', $target_file );

当我上传图片时,我仍然很难对它们进行哈希处理。我有以下代码:

$target_dir = "images/uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
   hash_file('sha256', $target_file );

  // Check if image file is a actual image or fake image

      if(isset($_POST["change"])) {

    move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);
    $sql = "UPDATE users SET userPic = '".$_FILES['fileToUpload']['name']."' WHERE username = '" . $username . "'";

    $check = $conn->query($sql);

    if($check !== false) {
    echo "<a href = profile.php> Profile pciture has been changed </a>" . 
    $check["mime"] . ".";
    $uploadOk = 1;

    } else {
    echo "File is not an image.";
    $uploadOk = 0; 
    }
    } else {

     echo"did not change";

     }
$target_dir=“图像/上传/”;
$target\u file=$target\u dir。basename($_文件[“fileToUpload”][“name”]);
$uploadOk=1;
$imageFileType=pathinfo($target\u文件,pathinfo\u扩展名);
哈希_文件('sha256',$target_文件);
//检查图像文件是真实图像还是假图像
如果(isset($_POST[“change”])){
移动上传的文件($文件[“fileToUpload”][“tmp\u name”],$target\u文件);
$sql=“UPDATE users SET userPic=”。$\u文件['fileToUpload']['name']。“'WHERE username=”。“$username.”;
$check=$conn->query($sql);
如果($check!==false){
“回声”。
$check[“mime”]。”;
$uploadOk=1;
}否则{
echo“文件不是图像。”;
$uploadOk=0;
}
}否则{
回声“没有改变”;
}
我得到了这个错误:

警告:哈希文件(images/uploads/english\u royal\u family\u tree.jpg):无法打开流:没有此类文件或目录

我已经试了一个多星期了。没有人真的在帮助我,人们只是继续投票否决我的问题,不给任何帮助。有人能帮我吗?

首先,您希望文件已经存在,并且您正在尝试在上传文件之前使用该方法;这就是你的代码失败并抛出错误的原因

您需要做的是查看该文件是否存在,然后对其进行哈希处理

如果这是您真正想要做的,那么您可以基于以下内容,并记住存储重命名的文件,同时保留其原始扩展名;答案的末尾有一些链接

注意:正如我在评论中提到的,您需要散列文件,而不是整个目标文件夹和文件。那是不可能挽回的

回显分配给
hash\u file()
的变量。您还将获得显示的哈希名称(仅限)减去其扩展名

检查错误并确保文件夹已被授予适当的权限

<?php 

// check for errors
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$file_name = $_FILES['fileToUpload']['name'];
$sent_file = move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);

 if (file_exists("images/uploads/" . $_FILES["fileToUpload"]["name"]))
  {
  echo $the_file = $_FILES["fileToUpload"]["name"] . " exists.";
  
    // its new location and hashing the filename only.
   $var = hash_file('sha256', $the_file );
   echo $var;
   
   // store your renamed file here in your database
   // using the assigned $var variable.
  
  }

那么,为什么在创建文件之前要对其进行哈希处理呢?然后检查权限,确保路径正确且确实存在。@u\u mulder我已经尽了最大的努力。这是我最后一次尝试的方法,所以这就是我以这种方式发布代码的原因。
$target\u file
在调用
hash\u file
时不存在,您应该在
move\u uploaded\u file
之后调用
hash\u file
,这是一个简单的逻辑,不是吗?然后检查
move\u uploaded\u file
的结果,如果
为false
则您的文件无法复制。如果不对图像进行哈希处理,一切都有意义且安全吗?@JacobsJohnson我认为没有必要这样做,除非您不想让人们知道原始文件名或其位置。社交网络使用的是重写方法,这些方法隐藏了原始文件名,而且有点复杂。如果您正在寻找唯一性,那么将文件重命名为哈希,或者使用另一种哈希方法,即使在文件上载或存在之前,也有许多和一些文件不需要获取。好吧,我将保持原样,因为没有冲突。但是谢谢你的帮助answer@JacobsJohnson我对答案做了修改。重新加载它并在“编辑”下查看:。请注意,我不是为你写的,我想让你从中学习。你会成功的,只要坚持下去,全神贯注。我需要在我的数据库中添加
$year
$year = date("Y");
$pdf_file = $_FILES['fileToUpload']["name"];

$uploaded_date = date("Y-m-d_h-i-s_A"); // this could be another unique method.

$target_dir = "../upload_folder/" . $year . "/";

$ext = explode('.',$_FILES['fileToUpload']['name']);
$extension = $ext[1];

$newname = $ext[0].'_'.$uploaded_date;

$full_local_path = $target_dir.$newname.'.'.$extension;
$new_full_name = $newname.'.'.$extension;

    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $full_local_path)) {
        echo "The file ". $newname . " has been uploaded.";
        echo "<hr>";

$file_link = "/upload_folder/$year/$new_full_name";

    // other code such as saving to a database...

    }