1

ユーザーが約 6 枚の写真をアップロードできるアンケートを作成しています。これらをファイルシステムに保存する最良の方法は何ですか? ユーザーは複数の調査を行うことができます(したがって、時間の経過に伴う改善を追跡します)...つまり、順番に名前を付けることはできません...

これは CI/PHP アプリです。:)

または、知識のために、どのようにしますか?

4

5 に答える 5

1

データベース内のこれらすべてをファイルシステム上の保存場所にマッピングすると、検索可能な調査とユーザーにとって最良の結果になります。

// Pseudo Database
// user table
user_id (pk)
user_name
user_filesystem_dir
...

// survey table
survey_id (pk)
survey_name
survey_filesystem_dir
...

// Image table
image_id (pk)
image_name
image_filesystem_dir
user_id_fk (this is the user_id from the user table)
survey_id_fk (this is the survey_id from the survey table)
...

// Find all the images for user id 123 and survey 456
SELECT * FROM image_table AS it, user_table AS ut, survey_table AS st
JOIN (it.user_id_fk = ut.user_id AND it.survey_id_fk = st.survey_id)
WHERE user_id_fk = 123
AND survey_id_fk = 456

// Pseudo Code
$user_id     = 123;
$survey_id   = 456;
$survey_name = 'Stack Survey #1';

$image_array = array(
    'image1.png',
    'image2.png',
    'image3.png',
    'image4.png',
    'image5.png',
    'image6.png'
);

// Folder Structure where User is most searched 
+-+123 <user_id>
  |
  +-467 <survey_id>
  | |
  | +-images
  |   |
  |   +-image1.jpg
  |   +-image2.jpg
  |   +-image3.jpg
  +-456 <survey_id>
    |
    +-images
      |
      +-image1.png
      +-image2.png
      +-image3.png
      +-image4.png
      +-image5.png
      +-image6.png

// Folder Structure where Survey is most searched 
+-+467 <survey_id>
| |
| +-123 <user_id>
|   |
|   +-images
|     |
|     +-image1.jpg
|     +-image2.jpg
|     +-image3.jpg
+-456 <survey_id>
    |
    +-123 <user_id>
      |
      +-images
        |
        +-image1.png
        +-image2.png
        +-image3.png
        +-image4.png
        +-image5.png
        +-image6.png
于 2011-01-14T20:01:09.917 に答える
1

うわー、これはちょっと自由です...おそらく各ユーザーのディレクトリを構築し、アップロードされた日時に基づいて画像に名前を付けると思います。したがって、次のようになります。

/+
 |
 +--+ Kyle
    |
    +-- 20110113114903.png
    |
    +-- 20110113115122.png
    |
    +-- 20110114010304.png
 +--+ Kevin
    |
    +-- 20101114123456.png
    |
    +-- 20110102023648.png
    |
    +-- ...

ただし、これは希望するほどスケーラブルではない場合があります。ディレクトリをさらに深くして、各人が日付ごとに画像を含むディレクトリを取得するようにすることもできます。

于 2011-01-14T19:51:55.957 に答える
0

「したがって、時間の経過とともに改善を追跡する」ことによって示唆されるように、個々のユーザーを追跡する場合、私はそれがトップレベルのディレクトリであるところから始めます。ただし、それでも、ユーザー数が増えるとディレクトリが肥大化する可能性があります。

システム内のすべてのユーザー用にファイルを作成する必要があるアプリケーションの1つで、一意のIDを構造化されたフォルダーのセットに分解するルーチン(実際にはデータベース側)を作成しました。

例:ユーザー12345アップロード#5はUPLOAD_DIR / 1/2/3/4/5/upload_5.pngに保存できます

もう少し「推測可能」でないものが必要な場合でも、上記のようなものを使用できますが、IDを使用する代わりに、ハッシュすることもできますが、同様のパターンに従います。

于 2011-01-14T20:01:42.430 に答える
0

1 つの代替方法は、uniqid() を使用してファイルにランダムに名前を付けることです。もちろん、そのuniqidがまだ存在していないことを確認する必要があります。このようなもの。

do {
    $filename = uniqid().'.jpg';
} while (file_exists('images/'.$filename));
于 2011-01-14T20:33:42.150 に答える
0

連続した番号付けを検討してください。

user123_survey1_image6.jpg

ユーザーの ID は であり123、これはユーザーの 6 番目の画像です。より簡単には、次のようになります。

user123_survey56_image899.jpg

ユーザー123の 6 番目の画像にはたまたま ID があります899

于 2011-01-14T20:24:31.070 に答える