2012-03-25 2 views
4

Я использую сценарий ниже, поэтому пользователь может загрузить изображение своего профиля. В первый раз, когда изображение загружается (когда изображение не существует в месте), он отлично работает. Однако, если изображение уже существует на пути (если пользователь пытается изменить изображение профиля), новое изображение не будет заменено старым. Я получаю успех для запроса.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(); 
    } 


?> 
+1

Вы создали первое изображение через загрузки или создания файла самостоятельно? Если последнее, это может быть проблема с разрешениями. – PlexQ

+0

На самом деле, теперь я думаю об этом, проверьте свою версию PHP. Я подал ошибку об этом много лет назад, и я знаю, что это не было исправлено в течение многих лет, так что это может быть и не так, или вы можете использовать версию, где она не исправлена. – PlexQ

+1

Почему вы используете 'mysql_error()', если он не может переместить файл? В то время он не делал никаких запросов mysql ... – Shikiryu

ответ

20

Лучше всего было бы не-связывающая файл, если он существует

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

Отлично работает! Спасибо – BlackMouse

+2

Не обязательно лучше. move_uploaded_file должен сделать это сам – GolezTrol

4

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

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

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

2

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

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

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

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

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

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

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

+0

Вы пропустили круглые скобки: ')' после функции 'file_exists'. – TricksfortheWeb

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); 
Смежные вопросы