2013-08-18 5 views
-2

Мне нужно написать код, чтобы переименовать файлы, если файл с таким же именем уже был загружен. Например, если вы загружаете «internet.jpg», но этот файл уже существует в стороне сервера и бд, то система переименовывает в «internet_2.jpg»Где я могу поместить файл переименования

Мой код:

<?php 

mysql_connect("localhost", "user", "user") or die(mysql_error()) ; 
mysql_select_db("view") or die(mysql_error()) ; 

if ($_FILES["imagen"]["error"] > 0){ 
    echo "ha ocurrido un error"; 
} else { 

    $permitidos = array("image/jpg", "image/jpeg", "image/gif", "image/png"); 
    $limite_kb = 100; 

    if (in_array($_FILES['imagen']['type'], $permitidos) && $_FILES['imagen']['size'] <= $limite_kb * 1024){ 

    $ruta = "./image/" . $_FILES['imagen']['name']; 

     $resultado = @move_uploaded_file($_FILES["imagen"]["tmp_name"], $ruta); 
     if ($resultado){ 
     $nombre = $_FILES['imagen']['name']; 

     @mysql_query("UPDATE product SET image='data/$nombre' Where id=55") ; 

     echo "la imagen ha sido actualizada exitosamente"; 
     echo " 

    "; 
     } else { 
     echo "ocurrio un error al mover el archivo."; 
     } 

    } else { 
    echo "archivo no permitido, es tipo de archivo prohibido o excede el tamano de $limite_kb Kilobytes"; 
    } 
} 

?> 

----- ----------------- Спасибо -----------------------------

thank you very much Farhan Ihsas, your code worked perfect! 
I just change two lines 

$new_name =  $rand . '_'. $dotName ; 

and 

@mysql_query("UPDATE product SET image='./image/$new_name' Where product_id=55") ; 


Thanks for such a quick response! 

thank you both (Farhan Ihsas and Kieran) 
+0

Что происходит, когда вы запускаете свой код? Любые ошибки? Пожалуйста, отредактируйте вопрос и добавьте к нему дополнительные сведения. @YoungStudent, aquí se habla en Inglés, правила дома;) – brasofilo

+0

перед перемещением загруженного файла просто проверьте его существование с помощью [link] (http://php.net/manual/en/function.file-exists. php), если вы хотите итерации, как вы писали, следует использовать [link] (http://php.net/manual/en/function.glob.php) для проверки файлов. – Axidepuy

ответ

0

Я предполагаю, что у вас нет какой-либо ошибки в коде, так что выяснить линию и заменить его ..

if(in_array($_FILES['imagen']['type'],$permitidos) && $_FILES['imagen']['size'] <=$limite_kb * 1024){ 

$fileName = $_FILES['imagen']['name']; 
$ruta = "./image/" . $fileName ; 
if (file_exists($ruta)) { 

$dotType = pathinfo($fileName, PATHINFO_FILENAME); 
$rand = rand(111, 2333); 
$dotName = str_replace('.' . $dotType, '', $fileName) ; 
$new_name = $dotName . '_' . $rand . '.'. $dotType ; 

$ruta = "./image/" . $new_name; 
} 
$resultado = @move_uploaded_file($_FILES["imagen"]["tmp_name"], $ruta);  
+0

Большое спасибо Farhan Ihsas, ваш код работал отлично! Я просто меняю две строки $ new_name = $ rand. '_'. $ dotName; и @mysql_query ("UPDATE product SET image = './Image/$ new_name' Where product_id = 55"); Спасибо за такой быстрый ответ! Благодарю вас обоих (Farhan Ihsas and Kieran) –

+0

@UsuariowebUsuarioweb убедитесь, что вы принимаете мой ответ, если он помог. Спасибо. –

0

Вы хотите использовать комбинацию file_exists и move_uploaded_file

Eg

function setFilename($file, $count = 1) { 
    if (file_exists($file)) { 
     return setFilename($file, $count++); 
    } else { 
     $path_parts = pathinfo($file); 
     move_uploaded_file($file, "{$fileData['dirname']}/{$path_parts['filename']}_{$count}.{$path_parts['extension']}"; 
    } 
} 
Смежные вопросы