2013-09-30 13 views
5

Stiamo cercando di creare un sito per gli sfondi in modo che siano in qualche modo file di grandi dimensioni (2mb-5mb), quindi avremo bisogno di memorizzare le immagini sullo spazio del disco invece nel database e solo i percorsi del database. Quindi, se puoi dare qualche idea su come farlo (il metodo che conosciamo per ora è la creazione di uno script PHP con la funzione di caricamento e selezionando manualmente le immagini dal PC da caricare) a meno che tu non abbia altri suggerimenti. I tutorial saranno molto apprezzati. Molte grazie!Come memorizzare le immagini sul file system (su internet) e memorizzare i percorsi nel database?

Questo è per gli amministratori per aggiungere immagini non per gli utenti. Nota: non abbiamo sviluppato nessuno script, quindi questo è per avere qualche idea da voi ragazzi su cosa possiamo usare con questo, se nessuno indovina andremo semplicemente con lo script php.

+1

Hai provato nulla? Googling per esercitazioni? Scrivere alcune righe? Prova a creare scaffold in modo che possiamo aiutarti a trovare una soluzione appropriata. –

+0

Dovresti farlo come hai suggerito. Se riscontri problemi, torna indietro e chiedi aiuto, quindi includi un esempio di codice. – Sven

+0

è quindi il metodo migliore per caricare i file? –

risposta

4

Il modulo,

<form action="PHP_FILE_PATH.php" method="post" enctype="multipart/form-data"> 
<input type="file" name="image" /> 
<input type="submit" name="submit" value="Upload" /> 
</form> 

Il PHP Parte

<?php 
if($_FILES['image']['name']) 
{ 
    $save_path="FOLDER_PATH_TO_SAVE_UPLOADED_IMAGE"; // Folder where you wanna move the file. 
    $myname = strtolower($_FILES['image']['tmp_name']); //You are renaming the file here 
    move_uploaded_file($_FILES['image']['tmp_name'], $save_path.$myname); // Move the uploaded file to the desired folder 
} 

$inser_into_db="INSERT INTO `database`.`table` (`folder_name`, `file_name`) VALUES('$save_path', '$myname'))"; 

?> 
+0

in realtà. Grazie! –

+2

E come @Paul ha detto qui in un'altra risposta, assicurati di generare il nome per ogni file da solo in alcuni elementi logici, ad esempio PHP microtime, e usarlo nella variabile '$ myname'. La risposta che ho digitato qui è solo un semplice esempio. –

6

Per ogni file caricato, generare un UUID e utilizzarlo per il nome file sul disco. Ciò evita le collisioni, l'igienizzazione dei nomi dei file e le vulnerabilità di attraversamento del percorso.

Avrai una tabella come questa: (id, description, filename) con valori come (1, "Green field", "0D729DCD-5116-4480-81CE-90A0380B557A.png").

Successivamente, si desidera evitare il problema di avere troppi file in una cartella: si verificherà una limitazione del filesystem per molte FSes.

Per ovviare a questo problema, creare directory basate sulle prime lettere del nome file. Per 0D729DCD-5116-4480-81CE-90A0380B557A.png, lo memorizzerai in /0/D/7/0D729DCD-5116-4480-81CE-90A0380B557A.png.

+0

grazie mille @Paul, penso di poter usare i nomi delle cartelle come per mese o qualcosa al posto della prima lettera, ma ottimo suggerimento. –

Problemi correlati