Переименовать изображения с php и базой данных - PullRequest
2 голосов
/ 09 января 2020

Извините, я не знал, как дать ему лучшее имя, и это моя первая тема здесь.

У меня проблема в том, что ... У меня есть куча изображений с именами файлов в этот синтаксис:

ABC_1234-sometext.jpg

Просто переименовать его в php не будет большим делом, но я хочу получить

1234

, который уникален для каждого изображения (назовем его products_ean) и выполняет запрос SELECT в моей базе данных, который возвращает мне другой идентификатор poducts_id) для каждого изображения, которое также является уникальным.

Итак, я хочу получить

ABC_1234-sometext.jpg

в

56789.jpg

Где цифры связаны с базой данных. Имеет ли это смысл? Я надеюсь, что кто-нибудь может направить меня sh в правильном направлении.

Это будет запрос, который приведет к желаемому имени файла изображения:

SELECT products_id FROM products WHERE products_ean = '.$img_name_strg.'

Ответы [ 4 ]

0 голосов
/ 10 января 2020

Я придумал это сейчас. Оно работает. Но я не уверен, что это сработает, если мне придется переименовать тысячу изображений? Я полагаю, что запрос в foreach не является хорошим способом для go?

$dir = '/original_file_directory';
$destination = '/destination_directory/';

$files = glob($dir.'/*'); //get all images


foreach($files as $file){
    if(is_file($file)){

        $ean = substr(basename($file), 8, 5);

        $image_query = xtc_db_query("SELECT products_id FROM products WHERE 
        products_manufacturers_model = ".$ean."");
        $image_id = xtc_db_fetch_array($image_query);
        $image_id = $image_id['products_id'];


if($image_id != '')
       copy($file,$destination.$image_id.'.jpg');
    }
}

А что если у меня есть файлы, которые дали бы мне идентичный $ ean, и мне пришлось бы добавить ... _0.jpg и ..._ 1.jpg для этих двойников?

0 голосов
/ 09 января 2020

Попробуйте следующий код.

$files = glob($dir.'/*'); //get all images
$i=1234;
    foreach($files as $file){
        if(is_file($file)){
            copy($file,'folder/'.$i'.jpg');//copy ABC_1234-sometext.jpg to 1234.jpg
            unlink($file); //delete ABC_1234-sometext.jpg
        }
    }
0 голосов
/ 09 января 2020

Вы можете создать запрос для извлечения столбца изображений и изменения имен изображений новыми случайными именами без изменения расширения. Или загрузите их на страницу, затем переименуйте все с новым именем и обновите таблицу. чтобы получить первую часть изображений, используйте:

$file_name = $row['img'];
$image = explode('.',$file_name);

Используйте это, чтобы изменить имена $image, а затем включить их расширения

$chagedImage =$image . '.' . end($temp);

Используйте это значение в move_upload $chagedImage

UPDATE :

Я думаю, что выполнение этого запроса сделает работу

function generatenewstring($lenght){
//This function creates random tokens for new name
        $token = 'qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM0123456789';
        $token = str_shuffle($token);
        $token = substr($token, 0, 36);
        return $token;
}
$stmt = $pdo->prepare('SELECT * FROM your_table');
$stmt->execute();
$row = $stmt->fetchAll();
    $id = $row['id'];

    $image = explode('.',$row['img']);
    $extension = pathinfo($image, PATHINFO_EXTENSION);
//$image this is your old image name

    $chagedImage = generatenewstring(20) . '.' . $extension);

//$chagedImage this is your new image name

    $sql = "UPDATE your_table SET image = ? WHERE id = ?";
    $pdo->prepare($sql)->execute([$chagedImage, $id]);
0 голосов
/ 09 января 2020

Вы можете использовать следующий код и изменить имя файла так, как вам угодно sh.

Я использую round(microtime(true)) для уникального имени, а не для идентификатора БД.

$temp = explode(".", $file["name"]);
$filename = "filename"
$newfilename =$filename . '.' . end($temp);
move_uploaded_file($file["tmp_name"], $target_dir . $newfilename);

Не забудьте проверить, загружен ли ваш файл.

...