2011-01-14 13 views
1

ユーザーが約6枚の写真をアップロードできるアンケートを作成しています。これらをファイルシステムに保存するにはどうすればよいでしょうか?ユーザーは複数のアンケートを行うことができます(時間の経過とともに改善が追跡されます)。つまり、私はそれらを順番に名前を付けることはできません。...アップロードの命名規則

これはCI/PHPアプリケーションです。 :)

あなたはそれをどうやってやりますか?

+2

なぜ連続していないのですか? 'survey1_image6.jpg'? –

+0

あなたは、ユーザー、調査、画像を追跡する必要がありますか? –

+0

@Phill、画像とユーザを追跡する簡単な方法が必要ですが、 'user12_image3'のような名前を付けることはできません。 –

答えて

0

は、シーケンシャル番号を考慮してください

user123_survey1_image6.jpg 

ユーザのIDが123され、これはさらに容易にユーザの第六の画像、またはある:

user123_survey56_image899.jpg 

ユーザ123の第六の画像ID 899のIDを持っています。

+0

これは、蜂の構成が不十分であると感じるため、ディレクトリIMOに関していくつかの構造が存在するはずです。 – RobertPitt

1

うわー、これはまあまあです...私はおそらく、各ユーザのディレクトリを構築し、アップロードされた日時に基づいてイメージに名前をつけます。したがって、次のようになります。

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

ただし、これはあなたが好きなほどスケーラブルではない可能性があります。ディレクトリを深くしたいので、それぞれの人が画像を内部に持って日付ごとにディレクトリを取得します。

+0

悪くない...私は日付スタンプのアイディアを掘り下げることができます。 –

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 
0

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

私はシステム内のすべてのユーザーのファイルを作成しなければならない場所に書きましたが、一意のIDを構造化された一連のフォルダに分割したルーチン(実際にはデータベース側でした)を書きました。例えば

:あなたはまだ何かを使用することができます少し "推測" 何かを望んでいた場合は、ユーザー12345アップロード#5はupload_dirの/ 1/2/3/4/5/

upload_5.pngに記憶することができます上記のように、代わりにIDを使用するだけでなく、ハッシュすることもできますが、同様のパターンに従います。

0

代わりにuniqid()を使用してファイルをランダムに指定することもできます。そのuniqidが既に存在していないことを確認する必要があります。このようなもの。

do { 
    $filename = uniqid().'.jpg'; 
} while (!file_exists('images/'.$filename)); 
+0

これは、ファイル名をデータベースに保存していることを前提としています。 – dqhendricks