1

画像フォルダーがあり、その中には 200 枚近くの画像があります。私の画像名は次のとおりです。

101.png
102.png
103.png
(it continues until 300.png)

これらの画像は、私の本が mysql データベースに持っている画像です。例えば;

id | book_name
101| aaaaa
102| bbbbb

そこで、画像の名前を本の名前に変更したいと思います。つまり、「aaaa」本の画像名は 101.png ではなく aaaa.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 に答える