2013-09-30 14 views
5

Staramy się stworzyć stronę do tapet, tak aby były jakoś duże pliki (2mb-5mb), więc będziemy musieli przechowywać obrazy na dysku zamiast w bazie danych i tylko ścieżki do bazy danych. Jeśli więc możesz podać kilka pomysłów, jak to zrobić (metoda, którą znamy na razie to tworzenie skryptu PHP z funkcją wysyłania i ręczne wybieranie obrazów z komputera do przesłania), chyba że masz inne sugestie. Poradniki będą bardzo cenne. Wielkie dzięki!Jak przechowywać obrazy w systemie plików (w Internecie) i przechowywać ścieżki do bazy danych?

Jest to przeznaczone dla administratorów do dodawania zdjęć nie dla użytkowników. Uwaga: nie opracowaliśmy żadnego skryptu, więc mamy pomysły od was na temat tego, co możemy z niego użyć, jeśli nikt nie zgadnie, po prostu pójdziemy ze skryptem php.

+1

Czy próbowałeś nic? Googling do samouczków? Pisanie niektórych linii? Spróbuj stworzyć rusztowania, abyśmy mogli pomóc Ci znaleźć odpowiednie rozwiązanie. –

+0

Powinieneś zrobić to tak, jak sugerujesz. Jeśli napotkasz problemy, wróć i poproś o pomoc, a następnie dodaj przykład kodu. – Sven

+0

, więc jest to najlepsza metoda przesyłania plików? –

Odpowiedz

4

Formularz,

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

PHP Część

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

w rzeczywistości. dzięki! –

+2

I jak @Paul powiedział tutaj w innej odpowiedzi, upewnij się, że generujesz nazwę dla każdego pliku na własną rękę w jakiejś logice powiedzmy na przykład w microtime PHP i używaj go w zmiennej '$ myname'. Odpowiedź, którą tu wpisałem, jest po prostu prostym przykładem. –

6

Dla każdego przesłanego pliku należy wygenerować identyfikator UUID i użyć go dla nazwy pliku na dysku. Pozwala to uniknąć kolizji, dezynfekcji nazw plików i podatności na traiding ścieżki.

Będziesz mieć tabelę podobną do tej: (id, description, filename) z wartościami takimi jak (1, "Green field", "0D729DCD-5116-4480-81CE-90A0380B557A.png").

Następnie, chcesz uniknąć problemu posiadania zbyt wielu plików w jednym folderze - trafisz na ograniczenie systemu plików dla wielu FS.

Aby obejść ten problem, utwórz katalogi na podstawie kilku pierwszych liter nazwy pliku. W przypadku modelu 0D729DCD-5116-4480-81CE-90A0380B557A.png można go zapisać w postaci /0/D/7/0D729DCD-5116-4480-81CE-90A0380B557A.png.

+0

wielkie dzięki @Paul, myślę, że mogę używać nazw folderów takich jak miesiąc czy coś zamiast pierwszej litery, ale świetna propozycja. –