php move_uploaded_file()不会替换现有图像

a14dhokn  于 2023-02-15  发布在  PHP
关注(0)|答案(6)|浏览(160)

我正在使用下面的脚本,所以用户可以上传他们的个人资料图片。第一次上传图像(当图像不存在的位置)它的工作很好。但是,如果图像已经存在的路径(如果用户试图改变个人资料图片)新的图像不会取代旧的。我得到成功的查询。
任何帮助都将不胜感激!
谢谢

<?php

ini_set('display_errors',1);

 error_reporting(E_ALL);

require_once('db.php'); 

$name = $_POST['name']; 

   $dir = '../uploadImages/'; 
   $file = basename($_FILES['image']['name']);

   $uploadfile = $dir . $file;

    if(move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile))
    {

        $path = $name; 
        $path .= 'Image.png';       
        $query = mysql_query("UPDATE users SET imagePath='$path' WHERE username='$name'");

        if ($query)
        {
            echo 'success'; 
        }
        else 
        {
            echo 'error'; 
        }

    }
    else 
    {
        echo mysql_error(); 
    }

 ?>
mpgws1up

mpgws1up1#

更好的方法是取消链接文件(如果存在

if(file_exists('your-filename.ext')) {
    chmod('your-filename.ext',0755); //Change the file permissions if allowed
    unlink('your-filename.ext'); //remove the file
}

move_uploaded_files($_FILES['image']['tmp_name'], 'your-filename.ext');
jslywgbw

jslywgbw2#

如果move_uploaded_file失败,它返回false,在这种情况下,根本不执行SQL,所以mysql_errorelse分支中回显,确实不会输出错误。
如果move_uploaded_file失败,它会发出一个警告,这将取决于你的PHP设置。然而,这个问题与MySQL无关。
如果您尝试先显式删除目标文件(如果该文件存在)。请先使用file_exists检查,然后使用unlink删除该文件。如果unlink失败,则可能是权限问题,不允许您删除或覆盖该文件。

cqoc49vn

cqoc49vn3#

不,你的逻辑是错误的。看看你的个人资料图片的URL,无论是在这里,在facebook或twitter。你看到他们使用一个固定的可预测的名称?他们没有,这是一个很好的理由,你需要独特的,不可预测的文件名。
试试这个:

$file = hash('sha256', openssl_random_pseudo_bytes(8)) . 'yourallowedextension';

然后从你的数据库中查询旧图片的名称,然后上传新图片,如果成功,更新数据库中用户的个人资料图片,并使用之前获得的信息(如果有的话)取消链接()旧文件。
确保你不允许上传php文件或任何其他讨厌的东西,你可以使用php文件信息扩展.

v7pvogib

v7pvogib4#

$file=$_FILES['image']['name'];
$path="your/location/".$file;
if(file_exists($path)) 
{
  chmod($path,0755); 
  unlink($path);
}

然后使用move_uploaded_file()移动文件。

v6ylcynt

v6ylcynt5#

如果执行此操作,新映像将被替换:

$sourcePath = $_FILES['image']['tmp_name'];
list($width,$height)=getimagesize($sourcePath);
$uploadedImage = imagecreatefromjpg($sourcePath);
$newImage=imagecreatetruecolor($newWidth,$newHeight); 
imagecopyresampled($newImage,$uploadedImage,0,0,0,0,$newWidth,$newHeight,$width,$height);
imagejpeg($newImage, $destinationPath,100);
ubby3x7f

ubby3x7f6#

嘿,所以如果有人像我一样,在2023年使用xampp,正在寻找这里,并希望比2012年更新的解决方案,我修复了这个问题,从他们的网站下载最新的PHP版本,并将zip中的所有.exe文件替换为xampp中php下的文件,实际上,这应该不会改变什么,因为这以前不是一个问题,但它修复了它sooo是的。尝试一下。

相关问题