我有一个图像文件夹,其中有近 200 张图像。我的图像名称是:
101.png
102.png
103.png
(it continues until 300.png)
这些图像是我的书在 mysql 数据库中的图像。例如;
id | book_name
101| aaaaa
102| bbbbb
所以,我想将我的图像名称更改为书名。也就是说,“aaaa”书的图片名称将是 aaaa.png 而不是 101.png。有什么快速的方法可以做到这一点吗?谢谢....
这是一个简单的例子:
$db = new PDO('mysql:host=myhost;dbname=mydb', 'myuser', 'mypass');
$books = $db->query('SELECT * FROM books');
$images_folder = '/var/bookimages/';
foreach ($books as $book) {
$old_image_file = realpath($images_folder.$book['id'].'.jpg');
if ($old_image_file) {
$clean_book_name = filter_var($book['book_name'], FILTER_SANITIZE_ENCODED);
$new_image_file = realpath($images_folder).$clean_book_name.'.jpg';
rename($old_image_file, $new_image_file);
}
}
rename()
仅当源名称和目标名称是同一磁盘中的文件时,该功能才有效。就您而言,这应该可以正常工作。filter_var
用来检查数据库中的名称是否有效。这是一种安全措施。如果数据库的文件名包含“../”,则该文件不会做坏事。这是必要的,因为rename()
也可以移动文件并且有人可能会利用它。这是一个概念证明。它应该让你开始。
$books = array('100' => 'grapes of wrath', '101' => 'where the red fern grows');
echo '<pre>'; print_r($books); echo '</pre>';
foreach($books AS $key => $value){
$current_image = $key.'.jpg';
$new_image = $value.'.jpg';
echo $current_image.' & '.str_replace(" ", "_",$new_image).'<br />';
//rename($current_image, $new_image);
}
将图像名称更改为书籍名称是一种不好的做法。如果你的名字有特殊符号怎么办?名字太长怎么办?
使用 ID 是更简单和通用的解决方案。