gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:44 25 4
gpt4 key购买 nike

上传图片时,我仍然无法对图片进行散列处理。我有这段代码:

$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";

}

我收到这个错误:

警告:hash_file(images/uploads/english_royal_family_tree.jpg):无法打开流:没有这样的文件或目录

我已经尝试了一个多星期。没有人真正提供帮助,人们只是继续否决我的问题,没有提供任何帮助。有人可以帮我吗?

最佳答案

首先hash_file()期望文件已经存在并且您正在尝试在文件上传之前使用该方法;这就是为什么您的代码失败并向您抛出该错误的原因。

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

如果这真的是你想要做的,那么你可以根据以下内容,记住存储重命名的文件,同时保留其原始扩展名;答案末尾有链接。

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

回显分配给 hash_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.

}

同时使用 mysqli_error($conn) 检查查询错误。

但是,您最终会遇到显示该图像的问题,因为现在和例如使用“file.jpg”将产生以下散列:

cf80cd8aed482d5d1527d7dc72fceff84e6326592848447d2dc0b0e87dfc9a90

我不知道你打算如何显示图像,但它将不再保留 .jpg 扩展名。

为了保留图像的文件扩展名,您基本上需要重命名上传的文件。

这里有一些关于 Stack (我过去取得过成功) 的很好的引用资料,您可以查看并在您的代码中实现它。 :

确实没有更好的学习方法,恕我直言。


编辑:

这是我最近编写的脚本的摘录。基于以下内容。

注意:您不应使用哈希方法(例如 SHA 系列或 MD5 中的任何方法)作为文件名,因为它们会产生相同的哈希值并且没有唯一性。

重要提示:如果人们从移动设备上传,他们中的大多数人都将“image.jpg”作为默认名称,因此需要对其进行重命名并赋予一个独特的方法。

使用日期和时间是一种方式。您还可以添加 uniqid()通过为其分配一个变量并将其附加到新文件名,或者 MD5 和 uniqid() 的组合是一个不错的选择。

当然,您需要对其进行一些修改。 $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...

}

关于目录和数据库中的 PHP 图像哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48478675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com