Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V  < 1 2  
Reply to this topicStart new topic
> [MySQL][PHP]Jak masowo wrzucac obrazki na serwer
kafar610
post
Post #21





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 13.01.2013
Skąd: Pruszków

Ostrzeżenie: (0%)
-----


Działa!!! tylko haha, trochę nie o to mi chodziło (IMG:style_emoticons/default/haha.gif) on zapisuje tak np. test.jpg0 a ja bym chciał test0.jpg + nie wiem czy id to jest dobry pomysł, jak myślisz? po prostu nazwy plikow maja się nie powtarzać, i wgl czemu id się nie dodaje w sensie żeby było 1 2 3 4 itp a jest ciagle 0, jak to zrobić?

Coś wyczytałem o pathinfo ale za bardzo nie wiem jak mam tego użyć

Ten post edytował kafar610 13.02.2015, 13:37:16
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #22





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(kafar610 @ 13.02.2015, 13:33:53 ) *
Działa!!! tylko haha, trochę nie o to mi chodziło (IMG:style_emoticons/default/haha.gif) on zapisuje tak np. test.jpg0 a ja bym chciał test0.jpg + nie wiem czy id to jest dobry pomysł, jak myślisz? po prostu nazwy plikow maja się nie powtarzać, i wgl czemu id się nie dodaje w sensie żeby było 1 2 3 4 itp a jest ciagle 0, jak to zrobić?

Coś wyczytałem o pathinfo ale za bardzo nie wiem jak mam tego użyć


Najlepszym sposobem jest po prostu zapisać plik pod swoją roboczą nazwą, nawet bez rozszerzenia, a w bazie przechowywać jego prawdziwą nazwę. W momencie próby pobrania pliku (realizujesz to skryptem php) otwierasz dany plik, nadajesz mu nazwę z bazy i wypluwasz userowi treść. Czyli w bazie musiałbyś jeszcze przechowywać nadane przez siebie tmp_name, czy tam storage_name, jak wolisz. Przy okazji masz lepszą kontrolę nad tym co, kto otwiera, bez konieczności patrzenia w logi apatcha, bo po prostu zapisujesz to sobie w bazie, a dla usera nie ma żadnej różnicy.
Go to the top of the page
+Quote Post
kafar610
post
Post #23





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 13.01.2013
Skąd: Pruszków

Ostrzeżenie: (0%)
-----


Czyli tak, przesyłam plik np test.jpg

1. Zapisuje go w folderze jako test
2. W bazie zapisuje go jako test.jpg
3. w momencie pobrania wybieram dany plik i zmieniam mu nazwę na jaka chce

To naprawdę nie będzie miało kłopotów z takimi samymi plikami?
Nie wiem czy dobrze to wszystko zrozumiałem...
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #24





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(kafar610 @ 13.02.2015, 14:00:22 ) *
Czyli tak, przesyłam plik np test.jpg

1. Zapisuje go w folderze jako test
2. W bazie zapisuje go jako test.jpg
3. w momencie pobrania wybieram dany plik i zmieniam mu nazwę na jaka chce

To naprawdę nie będzie miało kłopotów z takimi samymi plikami?
Nie wiem czy dobrze to wszystko zrozumiałem...


Nie, plik zapisujesz np. jako jakiś hash, dajmy na to q45hy6ytr - powiedzmy, że jest to md5 z nazwy pliku i czasu przesłania (oczywiście ten hash również musisz mieć w bazie, żeby wiedzieć, który plik otworzyć), więc do bazy ładujesz ten hash do jednej kolumny i nazwę pierwotną pliku, np. test.jpg do drugiej kolumny.

Kiedy ktoś chce pobrać plik, to dodajesz header, w którym wskazujesz, że jest to załącznik, otwierasz zawartość hasha, robisz echo pod header i userowi się pobiera.
Go to the top of the page
+Quote Post
kafar610
post
Post #25





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 13.01.2013
Skąd: Pruszków

Ostrzeżenie: (0%)
-----


A jeśli plik ma się nie pobierać tylko to ma być link np. na forum to ma to jakieś znaczenie?
Go to the top of the page
+Quote Post
com
post
Post #26





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


nie jedynie inny nagłówek mime ustawiasz, w tym wypadku obrazkowy zależny oczywiście od rozszerzenia obrazka a te nagłówki znajdziesz np tu http://www.sitepoint.com/web-foundations/m...-complete-list/
Go to the top of the page
+Quote Post
kafar610
post
Post #27





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 13.01.2013
Skąd: Pruszków

Ostrzeżenie: (0%)
-----


A w bazie to jakiego typu ma być ta kolumna na hash? varchar(64) starczy?
Go to the top of the page
+Quote Post
com
post
Post #28





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


jak md5 to 32 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
kafar610
post
Post #29





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 13.01.2013
Skąd: Pruszków

Ostrzeżenie: (0%)
-----


Na razie sklepałem coś takiego
  1. $target = GW_LOKALIZACJA . $image;
  2. $target1 = GW_LOKALIZACJA . $image;
  3. rename($target, md5($target)); // zmieniamy nazwe pliku na hash
  4.  
  5. if (move_uploaded_file($_FILES['image']['tmp_name'][$key], $target)) { //zapisujemy hash pliku
  6.  
  7. $connect = mysqli_connect(HOST, USER, PASSWORD, NAZWA_BAZY, PORT)
  8. or die('Brak połączenia z serwerem MySQL');
  9.  
  10. echo 'Połączenie nawiązane<br />';
  11.  
  12.  
  13. // dodajemy rekord do bazy
  14.  
  15. $ins = "INSERT INTO obrazki VALUES ('$id',NOW(),'$target1' ,'$target' )"; // dodajemy pierwotna nazwe w 1 kolumnie a w 2 hash
  16.  
  17.  
  18. $query = mysqli_query($connect, $ins);
  19.  
  20. if ($query)
  21. {
  22. echo 'Dane zostały wpisane do bazy <br />';
  23. }
  24. else
  25. echo 'Błąd przy dodawaniu rekordów do bazy <br />';
  26.  
  27. //echo '<img src="' . GW_LOKALIZACJA . $image . '" width="500px" heith="500px" alt="image" /></p>';
  28.  
  29. echo 'Nazwa: ' . $img['name'][$key] . '<br/>';
  30. echo 'Rozmiar: ' . $img['size'][$key] . '<br/>';
  31. echo '<img src="' . GW_LOKALIZACJA . $image . '" width="500px" heith="500px" alt="image" /></p>';
  32.  
  33. mysqli_close($connect);
  34. }
  35. }
  36. else
  37. echo "Obrazek nie moze być wiekszy niż 5 mb";
  38. }
  39. else
  40. echo "Przesłany plik nie jest obrazekiem!!! <br /> Dostępne rozszerzenia: .gif, .jpeg, .pjpeg, .png ";
  41. }
  42. }
  43. }
  44. //wykoananie skryptu
  45. ?>


i wyskakuje "Warning: rename(images/oc.jpg,d839ab8ac221360df66abc19a9fd8590) [function.rename]: No such file or directory in"
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #30





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  1. $target = GW_LOKALIZACJA . md5($image);


Nie możesz się pozbyć lokalizacji, hashujesz tylko nazwę pliku.
Go to the top of the page
+Quote Post
kafar610
post
Post #31





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 13.01.2013
Skąd: Pruszków

Ostrzeżenie: (0%)
-----


haha no tak (IMG:style_emoticons/default/biggrin.gif)
Cytat(b4rt3kk @ 13.02.2015, 14:50:24 ) *
Kiedy ktoś chce pobrać plik, to dodajesz header, w którym wskazujesz, że jest to załącznik, otwierasz zawartość hasha, robisz echo pod header i userowi się pobiera.


Cytat
nie jedynie inny nagłówek mime ustawiasz, w tym wypadku obrazkowy zależny oczywiście od rozszerzenia obrazka a te nagłówki znajdziesz np tu http://www.sitepoint.com/web-foundations/m...-complete-list/


A z tym to zielonego pojęcia nie mam jak to zrobić...
Pokażecie jakiś przykład?
Chce aby był taki link do pliku http://kafar.nazwa.pl/images/nazwa_pliku

Ten post edytował kafar610 13.02.2015, 16:15:13
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #32





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Potrzebujesz coś w rodzaju routera, czy też dispatchera, no i też przydałoby się zapisywać mime pliku do bazy. Później w htaccesie przekierowujesz wszystkie requesty z images na swój plik, powiedzmy index.php, gdzie odczytujesz a adresu id pliku do otworzenia.
Go to the top of the page
+Quote Post
kafar610
post
Post #33





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 13.01.2013
Skąd: Pruszków

Ostrzeżenie: (0%)
-----


Trochę trudne na początek... Nie ma łatwiejszego sposobu?

Dobra widze że nikt nie zna prostszego sposobu. To tak, zobacz czy wszystko dobrze zrozumiałem.
1. Tworze kolejna kolumne w bazie z mime zdjecia
2. Wyciągam mime pliku i zapisuje do bazy
3. w htaccesie przekierowuje wszystkie requesty z images na swój plik


I jak mam wyciągnąć mime bo na to kompletnie nie mam pomyslu

Dobra skminiłem coś takiego
  1. define('GW_LOKALIZACJA', 'images/');
  2. define('GW_MAXFILESIZE', 5242880); // 5000 kilobajtow. 5mb
  3. $img = $_FILES['image'];
  4.  
  5. //walidacja start
  6. if ((empty($image))) {
  7.  
  8. echo "Nie wstawiłes zdjecia";
  9.  
  10. }
  11.  
  12. //walidacja end
  13. //wykoananie skryptu
  14. if ((!empty($image))) {
  15.  
  16. foreach ($img['tmp_name'] as $key => $tmp_name) {
  17.  
  18. $image = $_FILES['image']['name'][$key];
  19. $image_type = $_FILES['image']['type'][$key];
  20. $image_size = $_FILES['image']['size'][$key];
  21. $id= 0;
  22.  
  23. if (($image_type == 'image/gif') || ($image_type == 'image/jpeg') || ($image_type == 'image/pjpeg') || ($image_type == 'image/png')) {
  24.  
  25. if (($image_size > 0) && ($image_size <= GW_MAXFILESIZE)) {
  26.  
  27. // Przenoszenie plików do docelowego katalogu.
  28. $target = GW_LOKALIZACJA . $image; //zwykly
  29. $target1 = GW_LOKALIZACJA . md5($image); //hash
  30.  
  31. if (move_uploaded_file($_FILES['image']['tmp_name'][$key], $target1)) {
  32.  
  33. $connect = mysqli_connect(HOST, USER, PASSWORD, NAZWA_BAZY, PORT)
  34. or die('Brak połączenia z serwerem MySQL');
  35.  
  36. echo 'Połączenie nawiązane<br />';
  37.  
  38. //pobranie rozszerzenia
  39. $odczyt = pathinfo($image);
  40. $ext = $odczyt['extension'];
  41. //pobranie rozszerzenia
  42.  
  43. // dodajemy rekord do bazy
  44.  
  45. $ins = "INSERT INTO obrazki VALUES ('$id',NOW(),'$target' ,'$target1','$ext' )";
  46.  
  47.  
  48. $query = mysqli_query($connect, $ins);
  49.  
  50. if ($query)
  51. {
  52. echo 'Dane zostały wpisane do bazy <br />';
  53. }
  54. else
  55. echo 'Błąd przy dodawaniu rekordów do bazy <br />';
  56.  
  57. //echo '<img src="' . GW_LOKALIZACJA . $image . '" width="500px" heith="500px" alt="image" /></p>';
  58.  
  59. echo 'Nazwa: ' . $img['name'][$key] . '<br/>';
  60. echo 'Rozmiar: ' . $img['size'][$key] . '<br/>';
  61. echo 'Rozszerzenie pliku ' . $ext . "<br />";
  62. echo '<img src="' . GW_LOKALIZACJA . $image . '" width="300px" heith="300px" alt="image" /></p><br />';
  63. //echo 'Link: http://kafar.nazwa.pl/' . $target . '<br />';
  64. ?>
  65. <form>
  66. <input onclick="this.form.txt.select();" type="button" value="zaznacz kod">
  67. <textarea style="resize: none;" name="txt" cols="50" rows="4"><?php echo 'http://kafar.nazwa.pl/' . $target;?> </textarea>
  68. </form>
  69. <?php
  70.  
  71. mysqli_close($connect);
  72. }
  73. }
  74. else
  75. echo "Obrazek nie moze być wiekszy niż 5 mb";
  76. }
  77. else
  78. echo "Przesłany plik nie jest obrazekiem!!! <br /> Dostępne rozszerzenia: .gif, .jpeg, .pjpeg, .png ";
  79. }
  80. }
  81. }
  82. //wykoananie skryptu
  83. ?>
  84.  

ładnie wyciąga mime pliku i teraz co?
Cytat
w htaccesie przekierowuje wszystkie requesty z images na swój plik

jak mam to zrobić?

Ten post edytował kafar610 15.02.2015, 21:13:59
Go to the top of the page
+Quote Post

2 Stron V  < 1 2
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.12.2025 - 10:28