Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przesłanie obrazu do tabeli obrazek.
Forum PHP.pl > Forum > Bazy danych > MySQL
waqmaz
  1. <?php
  2. require('funkcje_bazy.php');
  3.  
  4. $plik1_tmp = $_FILES['zdj']['tmp_name'];
  5. $plik1_nazwa = $_FILES['zdj']['name'];
  6. $plik1_rozmiar = $_FILES['zdj']['size'];
  7. $plik1_typ = $_FILES['zdj']['type'];
  8.  
  9. $sp1 = explode(".",$plik1_nazwa);
  10.  
  11. if(($sp1[1] == "jpg" or $sp1[1] == "gif" or $sp1[1] == "bmp" or $sp1[1] == "png") and (is_uploaded_file($plik1_tmp))){
  12. $lacz=lacz_bd();
  13.  
  14. $obraz = addslashes(fread(fopen($plik1_tmp, "r"), $plik1_rozmiar));
  15. $zapytanie = "insert into obrazek";
  16. $wynik = $lacz->query($zapytanie);
  17.  
  18. echo " $plik1_nazwa przesłany.";
  19. }
  20. else
  21. {
  22. echo "$plik1_nazwa nie przeslany.";
  23. }
  24.  
  25. ?>
  26. <form enctype="multipart/form-data" action="" method="POST">
  27. <input type="hidden" name="MAX_FILE_SIZE" value="5000" />
  28. <input name="zdj" type="file" />
  29. <input type="submit" value="Wyslij plik" />
  30. </form>


FUNKCJE_BAZY.PHP DZIAŁAJĄ, BO DO WSZYSTKIEGO SIĘ TAK ŁĄCZĘ.
W BAZIE JEST UTWORZONA TABELA obrazek z typem BLOB.
Kiedy jednak chcę coś wysłać, wciąż jest napisane: "$plik1_nazwa nie przeslany".
Co może być źle? Plik pisany przez innego użytkownika z tego forum.
maly_swd
zrob print_r($_FILES['zdj'])

i wklej to tu.
waqmaz
Nie dało żadnego wyniku.

Może inaczej. Chcę urozmaicić forum o system awatarów. I teraz nie wiem, jak powinny być przesyłane do bazy ich nazwy, czy gdzie przechowywać obrazy?
maly_swd
czytaj ze zrozumieniem

zrob print_r($_FILES['zdj'])

i wklej to tu. <- zobacz co tu napisane
xdev
Nie rób czegoś takiego od serwowania plików są serwery plików. Będzie to kilkadziesiąt X wolniejsze jeszcze ci będzie umieszczało śmieci w cache SQL-a. Dodatkowo będziesz musiał się użerać z wszystkimi nagłówkami HTTP (expire, cache, partial-content, etc.). Wolno i kiepsko, zrób sobie sha1 zawartości pliku zapisz zawartość na dysk jako "{$sha[0]}/{$sha[1]}/{$sha}.{$rozszerzenie}" a do bazy relatywną ścieżkę. Expire ustaw w apache na 2 lata do przodu i masz bardzo szybki i wydajny system do serwowania awatarów.

W dodatku w przykładzie powyżej będziesz musiał używać myisam bo innoDB jest koszmarnie wone dla blobów (myisam, też, chociaż ok 2x mniej koszmarne)...
waqmaz
czyli funkcja basename do ukrywania ścieżki pliku i ładowanie nazw do bazy?
xdev
Tak, dodatkowo nazwę pliku ukrywa sha1 wykonywany na jego zawartości (sha1_file). Każdy plik ma unikalną sumę kontrolną więc nie martwisz się, że jak jeden użytkownik załaduje 2 awatary pod tą samą nazwą to mechanizm cache przeglądarki tego nie złapie od razu. Po prostu plik będzie miał nazwę wygenerowaną przez ciebie i zmiany zawsze będą widoczne od razu.

To rozwiązanie typowo na CDN. Jak się zwiększa ruch podpinasz pod katalog z statycznymi plikami nginx i ustalasz cache-expire w nieskończoność, przeglądarka załaduje wszystkie awatary jedynie raz i już nigdy nie będzie musiała pytać po HTTP o aktualność plików. Jeszcze by się przydało, żebyś trzymał wszystkie pliki statyczne na subdomenie (odpadają cookie i można ustawić inne nagłówki / serwer)... chociaż i bez tego to dobre rozwiązanie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.