PHPのereg_replaceで正規表現を使っています。

画像ファイル名を連番に変えたいのですが、どう書けばいいでしょうか。
具体的に言うと、
$file_name = シリアル番号 として、
var.pngやfoo.jpgをそれぞれ
$file_name.pngや$file_name.jpg
に変えたいです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:nalchin No.1

回答回数12ベストアンサー獲得回数0

ポイント40pt

変換元がどういった内容なのかわからないので期待されている答えかわからないですが


連番を付ける変換の場合、ereg_replace() を使うより

Perl互換の preg_replace() を使った方が簡単なのでは? と思います。


--------------

サンプルソース

--------------

<?

// 変換元がこういう文字列なら

$str = ’

var.png

var.jpg

var.gif

foo.png

foo.jpg

foo.gif

’;


// 連番用シリアル?

$file_name = 1;


echo preg_replace(”/¥w+¥.(¥w+)/e”, ’sprintf(”%05d.%s”, $file_name++, ”¥¥1”)’, $str);


exit;

?>


--------------

結果

--------------

00001.png 00002.jpg 00003.gif 00004.png 00005.jpg 00006.gif

id:takeuchi_k

ありがとうございます。

六つのファイルをいっぺんに処理できなくても、一つずつの処理で十分です。

2005/07/06 13:51:46
id:kipposhi No.2

回答回数10ベストアンサー獲得回数2

ポイント40pt

http://de3.php.net/manual/ja/

PHP: PHP マニュアル - Manual

$imgtype = array(

IMG_GIF=>’GIF’,

IMG_JPG=>’JPG’,

IMG_PNG=>’PNG’

);

$directory = ”ディレクトリのパス”;


$dh = opendir($directory);

while($filename = readdir($dh)){

if(is_file($directory.$filename)){

list($width, $height, $type, $attr) = getimagesize($directory.$filename);


$newfilename = $file_name .’.’. $imgtype[$type];

rename($directory.$filename, $directory.$newfilename);

}

}


質問の意味がいまいちわからなかったのですが、上記のように、あるディレクトリ以下のファイルを見つけてリネームするのはどうでしょうか?

さらにif文のところに条件を加えてあげればファイルを限定できると思います。

id:takeuchi_k

ありがとうございます。

けっきょくexplodeで.で割って処理してしまいました。

ピリオドは一つだけ、ということで・・・

2005/07/08 15:00:04

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません