2015-04-02 3 views
0

У меня есть функция, которая сохраняет изображение в соответствующей папке.Как проверить изображение перед сохранением в файле

Я хочу, чтобы проверить, если изображение уже существует в папке, сначала с именем, если имя одинаковы, то с SHA1 изображения

Моя текущая функция выглядит как этот

function descargarImagen($id,$url,$pais1) 
{ 


    $ruta = rutaBaseImagen($id,$_POST['pais']); 

    $contenido = file_get_contents($url); 

    $ext = explode('.', $url); 
    $extension = $ext[count($ext) -1]; 

    $imagen['md5'] = md5($contenido); 
    $imagen['sha1'] = sha1($contenido); 
    $imagen['nombre'] = $imagen['md5'].'.'.$extension; 

    $ficherof = $pais[$pais1]['ruta_imagenes'].'/'.$ruta.'/'.$imagen['nombre']; 
    $ficherof = str_replace('//', '/', $ficherof); 

//Here before putting the file I want to check if the image already exist in the folder 


    file_put_contents($ficherof, $contenido); 

    $s = getimagesize($ficherof); 

    $imagen['mime'] = $s["mime"]; 
    $imagen['size'] = $s[0].'x'.$s[1]; 
    $imagen['url'] = $urlbase_imagenes.'/'.$ruta.'/'.$imagen['nombre']; 
    $imagen['url'] = str_replace('//', '/', $imagen['url']); 
    $imagen['date'] = time(); 
    $imagen['fichero'] = $ficherof; 

    return $imagen; 
} 

Я пытаюсь проверить два пути: 1.Если имя изображения присутствует в папке или нет. 2.Если присутствует, то проверьте, является ли образ одинаковыми или разными, потому что может быть новый образ, но такое же имя

Любое предложение будет оценено

Заранее спасибо

+0

Так ... где проблема? Что не работает? –

+0

@ rr- мне нужно проверить, прежде чем делать это 'file_put_contents ($ ficherof, $ contenido);' как функция, которую я должен использовать, чтобы проверить, если она exsist в данной папке, – Vikram

ответ

2

Вы можете использовать это,

// Check if file already exists 
if (file_exists($target_file)) { 
    //echo "Sorry, file already exists."; 

    /** 
    * validate images that are different but have same name 
    * we can use base64_encode function to compare the old and new image 
    * basics: http://php.net/manual/en/function.base64-encode.php 
    * online conversion help: http://freeonlinetools24.com/base64-image 
    */ 
    $base64_encoded_new_image=base64_encode(file_get_contents($name_of_your_new_image_that_you_want_to_upload)); 
    $base64_encoded_old_image=base64_encode(file_get_contents($name_of_the_image_that_already_exists)); 
    if ($base64_encoded_new_image!=$base64_encoded_old_image) { 
     /** so the images are actually not same although they have same name 
     * now do some other stuffs 
     */ 
    } 
} 

для получения дополнительной информации, пожалуйста, посетите http://www.w3schools.com/php/php_file_upload.asp

+0

любая идея, как мы можем проверять изображения, которые отличаются друг от друга, но имеют одинаковое имя?. – Vikram

+0

все работает отлично или вам нужно больше информации? – user789456

+0

последнее подтверждение, если имена файлов разные, но файл одинаковый, как обнаружить, что – Vikram

2

Подсказка предоставленные этот комментарий :

//Here before putting the file I want to check if the image already exist in the folder 

заставляет меня думать, что вы просите file_exists, что первая вещь, которая появляется, если вы ищете «PHP файл существует» в любой поисковой системе ...

+0

и как я могу сопоставить SHA1 файлов, Предположим, что файл существует, тогда возможно, что сохраняется другое изображение с его именем. Итак, в таком случае, что я должен делать? – Vikram

+1

Вы можете либо выбрать имя файла с '$ imageSha1. '.png'', или отслеживать уже загруженные хеши в базе данных (или, если вы имеете дело с <1000 изображениями, в простом текстовом файле). Я бы назвал их хешами вместо ввода пользователем, если вам не нужен прямой доступ к файлам. Если вы не заботитесь о том, чтобы быть медленным, вы также можете использовать 'glob()' для проверки наличия файлов, чьи имена содержат часть строки. –

Смежные вопросы