2011-01-14 12 views
1

Ich erstelle eine Umfrage, in der Benutzer etwa 6 Bilder hochladen können. Was wäre der beste Weg für mich, diese im Dateisystem zu speichern? Benutzer können mehrere Umfragen machen (und so ihre Verbesserung im Laufe der Zeit verfolgen) ... so dass ich sie nicht nacheinander benennen kann ...Namenskonvention hochladen

Dies ist eine CI/PHP App. :)

Oder um Wissen willen, wie würdest du es tun?

+2

Warum nicht sequenziell? 'survey1_image6.jpg'? –

+0

Sie müssen also verfolgen, Benutzer, Umfrage und Bild (e)? –

+0

@Phill, ich brauche nur eine einfache Möglichkeit, Bilder und Benutzer zu verfolgen, aber ich kann sie nicht einfach so nennen wie 'user12_image3' ... –

Antwort

0

Betrachten sequentielle Nummerierung:

user123_survey1_image6.jpg 

die ID des Benutzers 123 ist, und dies kann die sechste Bild des Benutzers sein, oder sogar leicht:

user123_survey56_image899.jpg 

wo Benutzer 123 ‚s sechsten Bild passiert mit der ID 899.

+0

Dies zu Biene fühlt sich schlecht organisiert, sollte es einige Struktur in Bezug auf Verzeichnis IMO. – RobertPitt

1

Wow, das ist irgendwie open-ended ... Ich denke, ich würde wahrscheinlich ein Verzeichnis für jeden Benutzer strukturieren, dann benennen Sie die Bilder basierend auf dem Datum, zu dem sie hochgeladen wurden. So wäre es etwa so aussehen:

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

Dies ist jedoch nicht so skalierbar sein können, wie Sie möchten. Vielleicht möchten Sie die Verzeichnisse tiefer machen, so dass jede Person ein Verzeichnis pro Datum mit Bildern darin erhält.

+0

Nicht schlecht ... Ich kann die Datumsstempel Idee graben. –

1

All dies in einer Datenbank zu speichern, wo Sie sie im Dateisystem gespeichert haben, wäre das beste Ergebnis in durchsuchbaren Umfragen und Benutzern.

// 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

Wenn Sie die einzelnen Benutzer verfolgen, wie durch „so Tracking ihre Verbesserung im Laufe der Zeit“ wird vorgeschlagen, würde ich mit, dass sein die Top-Level-Verzeichnis starten. Aber auch das kann zu einem Directory Bloat führen, wenn die Anzahl der Benutzer steigt.

In einer Anwendung schrieb ich, wo ich eine Datei für jeden Benutzer in einem System erstellen musste, schrieb ich eine Routine (war eigentlich Datenbankseite), die ihre eindeutige ID in eine strukturierte Reihe von Ordnern aufgeteilt.

Zum Beispiel: Benutzer 12345 Upload # 5 könnte in UPLOAD_DIR/1/2/3/4/5/upload_5.png

Wenn Sie etwas gespeichert werden etwas weniger "zu erraten", wollte konnte man noch etwas verwenden Wie oben, aber anstatt nur ihre ID zu verwenden, könntest du sie hashen, aber folgst einem ähnlichen Muster.

0

Eine Alternative wäre, Ihre Dateien nach dem Zufallsprinzip mit uniqid() zu benennen. Du müsstest überprüfen, ob diese uniqid nicht schon existiert. Etwas wie das.

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

Dies setzt voraus, dass Sie die Dateinamen in einer Datenbank speichern. – dqhendricks