Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Jak masowo wrzucac obrazki na serwer
Forum PHP.pl > Forum > Przedszkole
kafar610
Witam
Stworzyłem kod dzięki któremu mogę wrzucać obrazki na serwer, jednak chciałbym abym mógł wrzuć pare obrazków a nie tylko 1 bardzo proszę o pomoc co mam dodać.
  1. <?php
  2. //definicja stalych
  3. define('HOST', '...');
  4. define('USER', 'kafar_2');
  5. define('PASSWORD', '...');
  6. define('NAZWA_BAZY', 'kafar_2');
  7. define('PORT', '3307');
  8.  
  9. define('GW_LOKALIZACJA', 'images/');
  10. define('GW_MAXFILESIZE', 5242880); // 5000 kilobajtow. 5mb
  11.  
  12. $image = $_FILE ['image'];
  13.  
  14. $image = $_FILES['image']['name'];
  15. $image_type = $_FILES['image']['type'];
  16. $image_size = $_FILES['image']['size'];
  17.  
  18. //walidacja start
  19. if ((empty($image))) {
  20.  
  21. echo "Nie wstawiłes zdjecia";
  22.  
  23. }
  24.  
  25. //walidacja end
  26. //wykoananie skryptu
  27. if ((!empty($image))) {
  28.  
  29. if (($image_type == 'image/gif') || ($image_type == 'image/jpeg') || ($image_type == 'image/pjpeg') || ($image_type == 'image/png')) {
  30.  
  31. if (($image_size > 0) && ($image_size <= GW_MAXFILESIZE)) {
  32.  
  33. // Przenoszenie plików do docelowego katalogu.
  34. $target = GW_LOKALIZACJA . $image;
  35.  
  36. if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) {
  37.  
  38. $connect = mysqli_connect(HOST, USER, PASSWORD, NAZWA_BAZY, PORT)
  39. or die('Brak połączenia z serwerem MySQL');
  40.  
  41. echo 'Połączenie nawiązane<br />';
  42.  
  43.  
  44. // dodajemy rekord do bazy
  45.  
  46. $ins = "INSERT INTO obrazki VALUES (0,NOW(), '$image' )";
  47.  
  48.  
  49. mysqli_query($connect, $ins);
  50. $query = mysqli_query($connect, $ins);
  51.  
  52. if ($query)
  53. {
  54. echo 'Dane zostały wpisane do bazy <br />';
  55. }
  56. else
  57. echo 'Błąd przy dodawaniu rekordów do bazy <br />';
  58.  
  59. echo '<img src="' . GW_LOKALIZACJA . $image . '" width="500px" heith="500px" alt="image" /></p>';
  60.  
  61. mysqli_close($connect);
  62. }
  63. }
  64. else
  65. echo "Obrazek nie moze być wiekszy niż 5 mb";
  66. }
  67. else
  68. echo "Przesłany plik nie jest obrazekiem!!! <br /> Dostępne rozszerzenia: .gif, .jpeg, .pjpeg, .png ";
  69. }
  70. //wykoananie skryptu
  71. ?>

Pozdrawiam Darek
b4rt3kk
Jak widzisz $_FILES to tablica, gdzie pierwszy wymiar to nazwa wrzuconego pliku. Może być ich więcej jak 1, wszystko zależy od formularza.
kafar610
formularz mam dobry, jednak po wybraniu 2 zdj wyskakuje błąd "
Przesłany plik nie jest obrazekiem!!!
Dostępne rozszerzenia: .gif, .jpeg, .pjpeg, .png"
nie widzi 2 plików..
b4rt3kk
Formularz masz może i dobry, ale w takim razie skrypt masz zły. Daj na samej górze skryptu coś w stylu:

  1. echo '<pre>';
  2. var_dump($_FILES);
  3. echo '</pre>';


I zobacz jak faktycznie wygląda tablica, którą przesyłasz.
kafar610
  1. array(1) {
  2. ["image"]=>
  3. array(5) {
  4. ["name"]=>
  5. array(1) {
  6. [0]=>
  7. string(0) ""
  8. }
  9. ["type"]=>
  10. array(1) {
  11. [0]=>
  12. string(0) ""
  13. }
  14. ["tmp_name"]=>
  15. array(1) {
  16. [0]=>
  17. string(0) ""
  18. }
  19. ["error"]=>
  20. array(1) {
  21. [0]=>
  22. int(4)
  23. }
  24. ["size"]=>
  25. array(1) {
  26. [0]=>
  27. int(0)
  28. }
  29. }
  30. }

i co dalej?
b4rt3kk
Przecież nie przesłałeś żadnego pliku, wrzuć ich kilka tak jak chciałeś i dopiero patrz co jest w tablicy. Masz error 4 - no file was uploaded.
kafar610
array(1) {
["image"]=>
array(5) {
["name"]=>
array(3) {
[0]=>
string(6) "oc.jpg"
[1]=>
string(11) "tabelka.jpg"
[2]=>
string(8) "test.jpg"
}
["type"]=>
array(3) {
[0]=>
string(10) "image/jpeg"
[1]=>
string(10) "image/jpeg"
[2]=>
string(10) "image/jpeg"
}
["tmp_name"]=>
array(3) {
[0]=>
string(14) "/tmp/phpe6Q9rt"
[1]=>
string(14) "/tmp/phpNdFxJl"
[2]=>
string(14) "/tmp/php3SNt1d"
}
["error"]=>
array(3) {
[0]=>
int(0)
[1]=>
int(0)
[2]=>
int(0)
}
["size"]=>
array(3) {
[0]=>
int(451173)
[1]=>
int(339693)
[2]=>
int(431177)
}
}
}
b4rt3kk
No i wszystko przecież masz podane jak na tacy. Zwróć uwagę chociażby na $_FILES['image']['name'], która jest tablicą nazw wrzuconych przez Ciebie plików.

Po prostu to co robisz obecnie musisz zrobić w pętli.
kafar610
no i zrobiłem pętle

  1. <?php
  2. //definicja stalych
  3.  
  4. define('HOST', '...');
  5. define('USER', 'kafar_2');
  6. define('PASSWORD', '...');
  7. define('NAZWA_BAZY', 'kafar_2');
  8. define('PORT', '3307');
  9.  
  10. define('GW_LOKALIZACJA', 'images/');
  11. define('GW_MAXFILESIZE', 5242880); // 5000 kilobajtow. 5mb
  12.  
  13. $image = $_FILES['image']['name'];
  14. $image_type = $_FILES['image']['type'];
  15. $image_size = $_FILES['image']['size'];
  16.  
  17. //walidacja start
  18. if ((empty($image))) {
  19.  
  20. echo "Nie wstawiłes zdjecia";
  21.  
  22. }
  23.  
  24. //walidacja end
  25. //wykoananie skryptu
  26. if ((!empty($image))) {
  27.  
  28. for($i=0;$i<count($_FILES['image']['tmp_name']);$i++) {
  29.  
  30. if (($image_type == 'image/gif') || ($image_type == 'image/jpeg') || ($image_type == 'image/pjpeg') || ($image_type == 'image/png')) {
  31.  
  32. if (($image_size > 0) && ($image_size <= GW_MAXFILESIZE)) {
  33.  
  34. // Przenoszenie plików do docelowego katalogu.
  35. $target = GW_LOKALIZACJA . $image;
  36.  
  37. if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) {
  38.  
  39. $connect = mysqli_connect(HOST, USER, PASSWORD, NAZWA_BAZY, PORT)
  40. or die('Brak połączenia z serwerem MySQL');
  41.  
  42. echo 'Połączenie nawiązane<br />';
  43.  
  44.  
  45. // dodajemy rekord do bazy
  46.  
  47. $ins = "INSERT INTO obrazki VALUES (0,NOW(), '$image' )";
  48.  
  49.  
  50. mysqli_query($connect, $ins);
  51. $query = mysqli_query($connect, $ins);
  52.  
  53. if ($query)
  54. {
  55. echo 'Dane zostały wpisane do bazy <br />';
  56. }
  57. else
  58. echo 'Błąd przy dodawaniu rekordów do bazy <br />';
  59.  
  60. echo '<img src="' . GW_LOKALIZACJA . $image . '" width="500px" heith="500px" alt="image" /></p>';
  61.  
  62. mysqli_close($connect);
  63. }
  64. }
  65. else
  66. echo "Obrazek nie moze być wiekszy niż 5 mb";
  67. }
  68. else
  69. echo "Przesłany plik nie jest obrazekiem!!! <br /> Dostępne rozszerzenia: .gif, .jpeg, .pjpeg, .png ";
  70. }
  71. }
  72. //wykoananie skryptu
  73. ?>


juz widzi ze wrzucam 3 pliki lecz nadal wywala blad "Przesłany plik nie jest obrazekiem!!!
Dostępne rozszerzenia: .gif, .jpeg, .pjpeg, .png Przesłany plik nie jest obrazekiem!!!
Dostępne rozszerzenia: .gif, .jpeg, .pjpeg, .png Przesłany plik nie jest obrazekiem!!!
Dostępne rozszerzenia: .gif, .jpeg, .pjpeg, .png"

Pokaże ktoś jak powinno to wyglądać?

doszedłem do tego momentu że
1.nie wywala błędów
2.niby widzę 3 obrazki ale 1 i ten sam
3. do bazy dodaje mi się jedynka (numer tablicy) zamiast nazwy obrazka
  1. <?php
  2.  
  3. //definicja stalych
  4. ini_set('display_errors', 'on');
  5.  
  6. define('HOST', '...');
  7. define('USER', 'kafar_2');
  8. define('PASSWORD', '...');
  9. define('NAZWA_BAZY', 'kafar_2');
  10. define('PORT', '3307');
  11.  
  12. define('GW_LOKALIZACJA', 'images/');
  13. define('GW_MAXFILESIZE', 5242880); // 5000 kilobajtow. 5mb
  14. $i= 0;
  15. $image = print_r($_FILES['image']['name'][$i]);
  16. $image_type = print_r($_FILES['image']['type'][$i]);
  17. $image_size = print_r($_FILES['image']['size'][$i]);
  18.  
  19. //walidacja start
  20. if ((empty($image))) {
  21.  
  22. echo "Nie wstawiłes zdjecia";
  23.  
  24. }
  25.  
  26. //walidacja end
  27. //wykoananie skryptu
  28. if ((!empty($image))) {
  29.  
  30. for($i=0;$i<count($_FILES['image']['tmp_name']);$i++) {
  31.  
  32. if (($image_type == 'image/gif') || ($image_type == 'image/jpeg') || ($image_type == 'image/pjpeg') || ($image_type == 'image/png')) {
  33.  
  34. if (($image_size > 0) && ($image_size <= GW_MAXFILESIZE)) {
  35.  
  36. // Przenoszenie plików do docelowego katalogu.
  37. $target = GW_LOKALIZACJA . $image;
  38.  
  39. if (move_uploaded_file($_FILES['image']['tmp_name'][$i], $target)) {
  40.  
  41. $connect = mysqli_connect(HOST, USER, PASSWORD, NAZWA_BAZY, PORT)
  42. or die('Brak połączenia z serwerem MySQL');
  43.  
  44. echo 'Połączenie nawiązane<br />';
  45.  
  46.  
  47. // dodajemy rekord do bazy
  48.  
  49. $ins = "INSERT INTO obrazki VALUES (0,NOW(), '$image' )";
  50.  
  51.  
  52. mysqli_query($connect, $ins);
  53. $query = mysqli_query($connect, $ins);
  54.  
  55. if ($query)
  56. {
  57. echo 'Dane zostały wpisane do bazy <br />';
  58. }
  59. else
  60. echo 'Błąd przy dodawaniu rekordów do bazy <br />';
  61.  
  62. echo '<img src="' . GW_LOKALIZACJA . $image . '" width="500px" heith="500px" alt="image" /></p>';
  63.  
  64. mysqli_close($connect);
  65. }
  66. }
  67. else
  68. echo "Obrazek nie moze być wiekszy niż 5 mb";
  69. }
  70. else
  71. echo "Przesłany plik nie jest obrazekiem!!! <br /> Dostępne rozszerzenia: .gif, .jpeg, .pjpeg, .png ";
  72. }
  73. }
  74. //wykoananie skryptu
  75. ?>
b4rt3kk
Nie taka pętla... Nie widzisz na prawdę jaką strukturę ma ta tablica $_FILES?

  1. $img = $_FILES['image'];
  2.  
  3. foreach ($img['tmp_name'] as $key => $tmp_name) {
  4. echo 'Nazwa: ' . $img['name'][$key] . '<br/>';
  5. echo 'Rozmiar: ' . $img['size'][$key] . '<br/>';
  6. echo '<img src="' . $tmp_name . '" />';
  7. }
kafar610
zrobiłem tak jak mówiłeś i nic...

  1.  
  2. <?php
  3. define('GW_LOKALIZACJA', 'images/');
  4. define('GW_MAXFILESIZE', 5242880); // 5000 kilobajtow. 5mb
  5. $image = print_r($_FILES['image']['name']);
  6. $image_type = print_r($_FILES['image']['type']);
  7. $image_size = print_r($_FILES['image']['size']);
  8. $img = $_FILES['image'];
  9.  
  10. //walidacja start
  11. if ((empty($image))) {
  12.  
  13. echo "Nie wstawiłes zdjecia";
  14.  
  15. }
  16.  
  17. //walidacja end
  18. //wykoananie skryptu
  19. if ((!empty($image))) {
  20.  
  21. foreach ($img['tmp_name'] as $key => $tmp_name) {
  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;
  29.  
  30. if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) {
  31.  
  32. $connect = mysqli_connect(HOST, USER, PASSWORD, NAZWA_BAZY, PORT)
  33. or die('Brak połączenia z serwerem MySQL');
  34.  
  35. echo 'Połączenie nawiązane<br />';
  36.  
  37.  
  38. // dodajemy rekord do bazy
  39.  
  40. $ins = "INSERT INTO obrazki VALUES (0,NOW(), '$image' )";
  41.  
  42.  
  43. mysqli_query($connect, $ins);
  44. $query = mysqli_query($connect, $ins);
  45.  
  46. if ($query)
  47. {
  48. echo 'Dane zostały wpisane do bazy <br />';
  49. }
  50. else
  51. echo 'Błąd przy dodawaniu rekordów do bazy <br />';
  52.  
  53. echo '<img src="' . GW_LOKALIZACJA . $image . '" width="500px" heith="500px" alt="image" /></p>';
  54.  
  55. mysqli_close($connect);
  56. }
  57. }
  58. else
  59. echo "Obrazek nie moze być wiekszy niż 5 mb";
  60. }
  61. else
  62. echo "Przesłany plik nie jest obrazekiem!!! <br /> Dostępne rozszerzenia: .gif, .jpeg, .pjpeg, .png ";
  63. }
  64. }
  65. //wykoananie skryptu
  66. ?>

wyskakuje błąd Warning: move_uploaded_file() expects parameter 1 to be string
com
http://php.net/move_uploaded_file
kafar610
zrobiłem DOKŁADNIE jak w php.net i teraz obrazków nie wyświetla...
b4rt3kk
Jak chcesz robić tak jak robisz, to chociaż przerzuć zmienne z których korzystasz do wnętrza pętli.

  1. <?php
  2. define('GW_LOKALIZACJA', 'images/');
  3. define('GW_MAXFILESIZE', 5242880); // 5000 kilobajtow. 5mb
  4. $img = $_FILES['image'];
  5.  
  6. //walidacja start
  7. if ((empty($image))) {
  8.  
  9. echo "Nie wstawiłes zdjecia";
  10.  
  11. }
  12.  
  13. //walidacja end
  14. //wykoananie skryptu
  15. if ((!empty($image))) {
  16.  
  17. foreach ($img['tmp_name'] as $key => $tmp_name) {
  18.  
  19. $image = $_FILES['image']['name'][$key];
  20. $image_type = $_FILES['image']['type'][$key];
  21. $image_size = $_FILES['image']['size'][$key];
  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;
  29.  
  30. if (move_uploaded_file($_FILES['image']['tmp_name'][$key], $target)) {
  31.  
  32. $connect = mysqli_connect(HOST, USER, PASSWORD, NAZWA_BAZY, PORT)
  33. or die('Brak połączenia z serwerem MySQL');
  34.  
  35. echo 'Połączenie nawiązane<br />';
  36.  
  37.  
  38. // dodajemy rekord do bazy
  39.  
  40. $ins = "INSERT INTO obrazki VALUES (0,NOW(), '$image' )";
  41.  
  42.  
  43. mysqli_query($connect, $ins);
  44. $query = mysqli_query($connect, $ins);
  45.  
  46. if ($query)
  47. {
  48. echo 'Dane zostały wpisane do bazy <br />';
  49. }
  50. else
  51. echo 'Błąd przy dodawaniu rekordów do bazy <br />';
  52.  
  53. echo '<img src="' . GW_LOKALIZACJA . $image . '" width="500px" heith="500px" alt="image" /></p>';
  54.  
  55. mysqli_close($connect);
  56. }
  57. }
  58. else
  59. echo "Obrazek nie moze być wiekszy niż 5 mb";
  60. }
  61. else
  62. echo "Przesłany plik nie jest obrazekiem!!! <br /> Dostępne rozszerzenia: .gif, .jpeg, .pjpeg, .png ";
  63. }
  64. }
  65. //wykoananie skryptu
  66. ?>


Nic nie zrobiłeś tak jak Ci podałem w przykładzie. Zmieniłeś tylko pętlę z for na foreach, a reszta została.
kafar610
Kod działa dzięki smile.gif ale czemu do bazy obrazki dodają się podwójnie?
b4rt3kk
Pewnie dlatego, że dwa razy wykonujesz zapytanie:

  1. mysqli_query($connect, $ins);
  2. $query = mysqli_query($connect, $ins);
kafar610
ahhh dzięki biggrin.gif
Pomożesz mi jeszcze zmienić nazwę pliku przed przeniesieniem ich do folderu?

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


Próbowałem już użyć funkcji rename jednak wywala błąd "rename(oc.jpg,oc.jpg0) [function.rename]: No such file or directory"
shpaque
Ja po prostu polecił bym Tobie takie coś wink.gif

http://elfinder.org/
b4rt3kk
  1. if (move_uploaded_file($_FILES['image']['tmp_name'][$key], $target)) {


$target to Twoja nazwa pliku. Zmień na dowolną (oczywiście poprzedzając odpowiednią ścieżką). Pamiętaj, żeby też zmienić nazwę, którą zapisujesz w bazie danych.

Jak chcesz użyć rename to w ten sposób:

  1. rename($target, $target . $id);
kafar610
Działa!!! tylko haha, trochę nie o to mi chodziło 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ć
b4rt3kk
Cytat(kafar610 @ 13.02.2015, 13:33:53 ) *
Działa!!! tylko haha, trochę nie o to mi chodziło 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.
kafar610
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...
b4rt3kk
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.
kafar610
A jeśli plik ma się nie pobierać tylko to ma być link np. na forum to ma to jakieś znaczenie?
com
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/
kafar610
A w bazie to jakiego typu ma być ta kolumna na hash? varchar(64) starczy?
com
jak md5 to 32 wink.gif
kafar610
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"
b4rt3kk
  1. $target = GW_LOKALIZACJA . md5($image);


Nie możesz się pozbyć lokalizacji, hashujesz tylko nazwę pliku.
kafar610
haha no tak 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
b4rt3kk
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.
kafar610
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ć?
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.