1

ユーザーがリストを作成して複数の画像をアップロードするphp/mysql Webサイトがあります(それぞれ3つの画像サイズ)。以下のように画像をフォルダーに保存するのを間違えました:

images/listings/listing_id/image-name.jpg
images/listings/listing_id/thumbs/image-name.jpg
images/listings/listing_id/large/image-name.jpg

残念ながら、サブディレクトリの最大数が 30,000 で、コードが壊れるという問題に遭遇しました。

フォルダー構造を次のように変更したいと思います。

images/listings/yyyy/mm/dd/listing_id/image-name.jpg
images/listings/yyyy/mm/dd/listing_id/thumbs/image-name.jpg
images/listings/yyyy/mm/dd/listing_id/large/image-name.jpg

「images/listings/」フォルダ内のすべてのディレクトリをループする php スクリプトを作成し、上記で指定した新しいディレクトリにすべての画像をコピーするのが最善の方法であると判断しました。または各「listing_id」フォルダーの場合、mysql を使用して listing_id を検索し、created_date を取得してから、日付を分割して yyyy mm dd を取得する必要があります。

私はphpスクリプトの作成に完全に迷っています.古いイメージをコピーして削除せずに既存のディレクトリ構造の名前を変更することは可能でしょうか.それとも古いイメージをコピーして新しいディレクトリを作成し、それらを移動してから削除する必要があります.古いフォルダ?

4

3 に答える 3

0

使用できます

$origin = "images/listings";
$final =  "images/final";


$start = strlen($origin) + 1;
$di = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($origin, RecursiveDirectoryIterator::SKIP_DOTS));
foreach ( $di as $file ) {
    if ($file->isFile()) {
        $mtime = $file->getMTime();
        $date = sprintf("%d/%d/%d", date("Y", $mtime), date("m", $mtime), date("d", $mtime));
        $new = sprintf("%s/%s/%s", $final, $date, substr($file, $start));
        $dir = dirname($new);
        is_dir($dir) or mkdir($dir, null, true);
        rename($file, $new);
    }
}
于 2013-04-04T16:56:43.907 に答える
0

画像の移動にはphpのrename()関数が使えます。

例えば

rename("../app/temp/natural.jpeg","../public/public_photo/natural.jpeg");

上記のコードは、フォルダ/aap/temp/ からの natural.jpegがフォルダ/public/public_photo/に移動されました。

于 2014-05-02T05:58:15.750 に答える