move_uploaded_file () не заменит существующее изображение

Я использую сценарий ниже, поэтому пользователь может загрузить изображение своего профиля. В первый раз, когда изображение загружается (когда изображение не существует в месте), он отлично работает. Однако, если изображение уже существует на пути (если пользователь пытается изменить изображение профиля), новое изображение не будет заменено старым. Я получаю успех для запроса.

Любая помощь будет очень оценена!

благодаря

<?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(); } ?> 

Лучшим способом было бы не связывать файл, если он существует

 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'); 

Если move_uploaded_file не работает, он возвращает false. В этом случае SQL вообще не выполняется, поэтому mysql_error , который эхом встречается в ветке else , действительно не mysql_error ошибку.

если move_uploaded_file не работает, он выдает предупреждение, которое станет видимым в зависимости от ваших настроек PHP. Однако эта проблема не имеет ничего общего с MySQL.

Если вы сначала попытаетесь удалить целевой файл, если он существует. Проверьте с помощью file_exists а затем с unlink для удаления файла. Если unlink не удается, это, вероятно, проблема с правами доступа, чем не позволит вам удалить или перезаписать файл.

Нет, ваша логика неверна. Посмотрите URL-адрес изображения вашего профиля, либо здесь, либо в facebook, либо в twitter … вы видите, что они используют фиксированное предсказуемое имя? Они этого не делают, и для этого есть веская причина, вам нужны уникальные, непредсказуемые имена файлов.

Попробуй это:

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

Затем запросите имя старого изображения из своей базы данных, после чего загрузите новый рисунок, если это удастся, обновите изображение профиля пользователя в базе данных и отсоедините () старый файл, используя информацию, полученную ранее, если таковая имеется.

Убедитесь, что вы не разрешаете загружать файлы php или любые другие неприятные вещи, для чего вы можете использовать расширение php fileinfo.

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

затем переместите файл.

Если вы это сделаете, новое изображение будет заменено:

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