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());

}

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

アップデート

答え:

dir/folder と db 名のファイルの名前を同時に変更します。

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());
}

私が最初に質問したとき、私はすでにディレクトリ/フォルダー内の画像の名前を変更していましたが、それらのバックアップを持っていたので、ジョブを混ぜ合わせて目標を達成しました:)

4

2 に答える 2

0

まず、このようなバッチ更新は純粋なSQLで実行することをお勧めします。特に、ビジネスロジックがこれと同じくらい単純な場合は、すべてMySQLでネイティブに実行できます。

とにかく..、ポップアップする1つのことは、ファイル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 に答える