我正在使用下面的脚本,因此用户可以上传他们的个人资料照片。第一次上传图像(当图像不存在于该位置时),它的效果很好。但是,如果图像已存在于路径中(如果用户尝试更改配置文件图片),则新图像将不会替换旧图像。我确实获得了查询的成功。
任何帮助都将非常感谢!
由于
<?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();
}
?>
答案 0 :(得分:26)
更好的方法是取消链接文件(如果存在)
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');
答案 1 :(得分:4)
如果move_uploaded_file
失败,则返回false。在这种情况下,根本不执行任何SQL,因此在mysql_error
分支中回显的else
确实不会输出错误。
如果move_uploaded_file
失败,它会发出警告,该警告将根据您的PHP设置显示。但是,这个问题与MySQL没有任何关系。
如果您尝试首先显式删除目标文件,如果它存在。选中file_exists
,然后使用unlink
删除该文件。如果unlink
失败,则可能是权限问题,而不允许您删除或覆盖该文件。
答案 2 :(得分:2)
不,你的逻辑错了。看看你的个人资料图片的网址,无论是在这里,还是在facebook或twitter ..你看到他们使用固定的可预测名称吗?他们没有,并且有一个很好的理由,你需要独特的,不可预测的文件名。
试试这个:
$file = hash('sha256', openssl_random_pseudo_bytes(8)) . 'yourallowedextension';
然后从数据库中查询旧图片的名称,之后,上传新图片,如果成功,则更新数据库中用户的个人资料图片,并使用先前获得的信息(如果有)取消链接()旧文件。
确保您不允许上传php文件或任何其他令人讨厌的东西,因为您可以使用php fileinfo扩展。
答案 3 :(得分:1)
$file=$_FILES['image']['name'];
$path="your/location/".$file;
if(file_exists($path)
{
chmod($path,0755);
unlink($path);
}
然后移动文件。
答案 4 :(得分:0)
如果这样做,新图像将被替换:
$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);