正如标题所说我想要将存储在数据库中的图像名称更改为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 /文件夹中重命名了这些图像,但是我对它们进行了备份,因此将它们混合在一起并实现了我的目标:)
答案 0 :(得分: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);
答案 1 :(得分:0)
只需在纯SQL中执行:
UPDATE post SET img = CONCAT_WS('.',
MD5(TRIM(TRAILING CONCAT('.', SUBSTRING_INDEX(img, '.', -1)) FROM img)),
SUBSTRING_INDEX(img, '.', -1)
)