0

正如标题所说,我想将存储在数据库中的图像名称更改为 md5 但保留图像扩展名,我尝试使用下面的代码但它失败了(可能是因为我不知道我在'正在做)......关于如何实现我的目标的任何想法?

function get_file_extension($file_name) {
  return substr(strrchr($file_name,'.'),1);
}

$query  = "SELECT img FROM post";
$result = mysql_query($query);

 while($row = mysql_fetch_array($result)) {

   $name   = substr($row['img'], -4, 4);
   $ext    = get_file_extension($row['img']);
   $notmd5 = $row['img'];
   $md5img = md5($name).'.'.$ext;

 $q = "UPDATE post SET img='$md5img' WHERE img='{$notmd5}'";
 $r = mysql_query($q) or die(mysql_error());

}

..................................................... ...........

更新

回答:

同时重命名目录/文件夹和数据库名称中的文件:

function get_file_extension($file_name) {
  return substr(strrchr($file_name,'.'),1);
}

//path to directory to scan
$directory = "thumbs/";
 $directory2 = "md5/";
//get all image files with a .jpg extension.
$images = glob($directory . "*.*");

//print each file name
foreach($images as $image)
{
$imag = str_replace($directory, '', $image);
$ex   = get_file_extension($imag);

$new = md5($imag).'.'.$ex;

rename($image, $directory2.$new);

 $q = "UPDATE post SET img='$new' WHERE img='{$imag}'";
 $r = mysql_query($q) or die(mysql_error());
}

当我最初问我的问题时,我已经重命名了 dir/folder 中的图像,但我有它们的备份,因此将 to 工作混合在一起并实现了我的目标:)

4

2 回答 2

0

首先,我建议像这样的批量更新只使用纯 SQL 完成,特别是如果业务逻辑如此简单,那么肯定可以在 MySQL 中本地完成。

无论如何..,弹出的一件事是substr获取文件的调用$name,它被硬编码为仅获取 4 个字符,它实际上获取的是扩展名而不是名称。

试试这个:

$ext = get_file_extension($row['img']);  // get ext first

// use length of $row['img'] - length of file extension to extract name
substr($row['img'], 0, strlen($row['img']) - strlen($ext) - 1);
于 2012-11-10T02:00:54.867 回答
0

只需在纯 SQL 中执行:

UPDATE post SET img = CONCAT_WS('.',
  MD5(TRIM(TRAILING CONCAT('.', SUBSTRING_INDEX(img, '.', -1)) FROM img)),
  SUBSTRING_INDEX(img, '.', -1)
)
于 2012-11-10T02:01:07.673 回答