1

我有一个图像文件夹,其中有近 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。有什么快速的方法可以做到这一点吗?谢谢....

4

3 回答 3

2

这是一个简单的例子:

$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);
    }
}
  • PDO处理与数据库的交互。这是在 PHP 上连接到数据库的首选方式。
  • rename()仅当源名称和目标名称是同一磁盘中的文件时,该功能才有效。就您而言,这应该可以正常工作。
  • 我在数据库上使用了一个非常简单的查询。通常,您需要限制它并指定所需的列。
  • filter_var用来检查数据库中的名称是否有效。这是一种安全措施。如果数据库的文件名包含“../”,则该文件不会做坏事。这是必要的,因为rename()也可以移动文件并且有人可能会利用它。
于 2012-05-18T22:28:22.893 回答
1

这是一个概念证明。它应该让你开始。

$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);
}
于 2012-05-18T22:26:12.753 回答
0

将图像名称更改为书籍名称是一种不好的做法。如果你的名字有特殊符号怎么办?名字太长怎么办?

使用 ID 是更简单和通用的解决方案。

于 2012-05-18T22:29:02.293 回答