15

何百万もの写真が簡単にアップロードされるサイトを構築しています (アップロードされた画像ごとに 3 つのサムネイルがあります)。これらすべての画像を保存するための最適な方法を見つける必要があります。

ハッシュとして保存されている画像の例を検索して見つけました....たとえば...

アップロードした場合、coolparty.jpg、私のスクリプトはそれを Md5 ハッシュに変換し、結果として..

dcehwd8y4fcf42wduasdha.jpg

それは保存されて/dc/eh/wd/dcehwd8y4fcf42wduasdha.jpg いますが、3つのサムネイルについては保存方法がわかりません

質問..

  1. これはこれらの画像を保存する正しい方法ですか?

  2. サムネイルを保存するにはどうすればよいですか?

  3. 上記の方法を使用してこれらの画像を保存するための PHP のサンプル コードは何ですか?

4

5 に答える 5

11

フォルダー構造の使用方法:

  • 写真をアップロードして、あなたが言ったように動かします:

    $image = md5_file($_FILES['image']['tmp_name']);
    // you can add a random number to the file name just to make sure your images will be "unique"
    $image = md5(mt_rand().$image);
    $folder = $image[0]."/".$image[1]."/".$image[2]."/";
    
    // IMAGES_PATH is a constant stored in my global config
    define('IMAGES_PATH', '/path/to/my/images/');
    // coolparty = f3d40fc20a86e4bf8ab717a6166a02d4
    $folder = IMAGES_PATH.$folder.'f3d40fc20a86e4bf8ab717a6166a02d4.jpg';
    // thumbnail, I just append the t_ before image name
    $folder = IMAGES_PATH.$folder.'t_f3d40fc20a86e4bf8ab717a6166a02d4.jpg';
    // move_uploaded_file(), with thumbnail after process
    // also make sure you create the folders in mkdir() before you move them
    
  • もちろん、あなたが言ったように、何百万もの画像がある場合は、2文字でフォルダ構造をより深いものに変更できます。

于 2012-09-04T04:39:29.820 に答える
7

このような方法を使用する理由は、ディレクトリ (inode) ごとのファイルの総数を減らすためです。

説明した方法(3レベルの深さ)を使用すると、ディレクトリの最大数がほぼ17MMになるため、ディレクトリごとに数百の画像に達する可能性はほとんどありません。16**6.

ご質問のとおりです。

  1. うん、それはそれらを保存するための良い方法です。
  2. 私がそれをする方法は

    /aa/bb/cc/aabbccdddddddddddddddddddd_thumb.jpg
    /aa/bb/cc/aabbccdddddddddddddd_large.jpg
    /aa/bb/cc/aabbccdddddddddddddddddddddddddd_full.jpg

    または類似

  3. 実際に画像を保存する方法については、ネット上にたくさんの例があります。もっと具体的な質問はありますか?
于 2012-09-04T04:41:00.030 に答える
2

数百万枚の写真について話している場合は、これらを Amazon Web Services などのサードパーティ、より具体的にはこの Amazon S3 に委託することをお勧めします。ファイルの数に制限はなく、実際にファイルを一覧表示する必要がないと仮定すると、ファイルをディレクトリに分割する必要はまったくありません (一覧表示する必要がある場合は、別の区切り記号とプレフィックスを使用できます)。 - http://docs.amazonwebservices.com/AmazonS3/latest/dev/ListingKeysHierarchy.html )。また、ホスティング/再受信のコストは、おそらく自分で行うよりも低くなります - そしてそれらはバックアップされます.

より具体的に答えるには、はい、サブディレクトリごとに分割します。構造を使用すると、ファイル名の最初の 5 文字を削除できます。これは、既にディレクトリ名に含まれているためです。

そして親指は、aquinas が示唆するように、ファイル名に _thumb1 などを追加するだけです。または別々のフォルダに保存してください。

于 2012-09-04T04:41:16.293 に答える
-3

1)それはあなただけが答えることができるものです。一般的に、私は画像をデータベースに保存することを好みます。そうすれば、1つの一貫したバックアップをとることができますが、YMMVです。

2)どうやって?/dc/eh/wd/dcehwd8y4fcf42wduasdha_thumb1.jpg、/dc/eh/wd/dcehwd8y4fcf42wduasdha_thumb2.jpg、/dc/eh/wd/dcehwd8y4fcf42wduasdha_thumb3.jpgはどうですか

3)??? ファイルシステムにファイルを書き込む方法を尋ねていますか...?

于 2012-09-04T04:34:27.073 に答える
-3

回答を改善します。

数百万の画像の場合、データベースを使用するとプロセスが遅くなることは間違いありません

最適なオプションは、「サーバー ファイル システム」を使用してイメージを保存し、.htaccess を使用してセキュリティを追加することです。

または、Web サービスを使用できます。多くのサーバーは、アップロード、表示用の画像 API を提供しています。そのオプションに進むこともできます。例えばアマゾン

于 2012-09-04T04:41:20.780 に答える