Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][PHP]Dodawanie zdjęcia, tworzenie miniatury
arekko
post
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 8.01.2015

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


Dzień dobry, stworzyłem formularz z którego za pomocą kontrolera pobieram wybrane zdjęcie, sprawdzam warunki czy wszystko jest ok, dodaje zdjęcie na serwer i w innym pliku towrzę miniaturkę.
Oto szablon:

  1. <form action="?addproductform" method="post" enctype="multipart/form-data" >
  2. <p><input type="file" name="upload_image[]" /></p>
  3. <input type="submit" name="upload_submit" value="Dodaj" id="dodaj"/>


oraz kontroler:
  1. <?php
  2.  
  3. if(isset($_GET['addproductform']))
  4. {
  5. $pageTitle = 'Dodawanie realizacji';
  6.  
  7. $config = array();
  8. $config['thumbnail_width'] = 400; // maksymalna szerokość miniatury w pikselach
  9. $config['thumbnail_height'] = 400; // maksymalna wysokość miniatury w pikselach
  10. $config['thumbnail_scale'] = true; // czy przy minimalizowaniu wielkości zachowywać skalę?
  11. $config['path_images'] = '../../grafika/realizacje/obrazki/'; // ścieżka do katalogu grafik
  12. $config['path_thumbnails'] = '../../grafika/realizacje/miniaturki/'; // Ścieżka do katalogu miniatur
  13. $config['max_file_size'] = 2097152; // maksymalna wielkość pliku w bajtach, 2MB
  14. $config['accepted_extensions'] = array('jpg', 'jpeg', 'png', 'gif'); // dozwolone rozszerzenia
  15. $config['accepted_mimes'] = array('image/jpg', 'image/jpeg', 'image/png', 'image/gif'); // dozwolone typy MIME
  16.  
  17. if ( !file_exists($config['path_images']) || !is_dir($config['path_images']) ) {
  18. if ( !mkdir($config['path_images']) ) { // utworzenie katalogu wraz
  19. exit('Folder obrazków nie możliwy do utowrzenia!');
  20. }
  21. chmod($config['path_images'], 0777); // nadanie praw
  22. }
  23. if ( !file_exists($config['path_thumbnails']) || !is_dir($config['path_thumbnails']) ) {
  24. if ( !mkdir($config['path_thumbnails']) ) { // utworzenie katalogu
  25. exit('Folder miniaturek niemożliwy do utworzenia!');
  26. }
  27. chmod($config['path_thumbnails'], 0777); // nadanie praw
  28. }
  29.  
  30. if ( !extension_loaded('gd') ) { // sprawdzenie, czy GD jest załadowane
  31. if ( !dl('gd') ) { // próba wymuszenia załadowania
  32. exit('Biblioteka GD nie została załadowana!');
  33. }
  34. }
  35.  
  36. if ( isset($_FILES['upload_image']) && isset($_POST['upload_submit']) )
  37. {
  38. // pętla analizująca zawartość wszystkich trzech potencjalnie wysyłanych plików
  39. foreach ( $_FILES['upload_image']['error'] as $key => $arr )
  40. {
  41. if ( $_FILES['upload_image']['error'][$key] != UPLOAD_ERR_OK )
  42. {
  43. continue;
  44. }
  45. if ( $_FILES['upload_image']['size'][$key] > $config['max_file_size'] )
  46. {
  47. $error = "Plik jest za duży. ";
  48. $imageerror = ' Wybrany przez Ciebie plik:' . $_FILES['upload_image']['name'][$key];
  49. continue;
  50. }
  51. if ( file_exists($config['path_images'] . $_FILES['upload_image']['name'][$key]) )
  52. {
  53. $error = "Plik o takiej nazwie już istanieje. ";
  54. $imageerror = ' Wybrany przez Ciebie plik:' . $_FILES['upload_image']['name'][$key];
  55. continue;
  56. }
  57. $extension = explode('.', $_FILES['upload_image']['name'][$key]);
  58. if ( in_array(strtolower($extension[count($extension)-1]), $config['accepted_extensions']) === false || in_array($_FILES['upload_image']['type'][$key], $config['accepted_mimes']) === false )
  59. {
  60. $error = "Niepoprawne rozszerzenie pliku.";
  61. continue;
  62. }
  63. $image = getimagesize($_FILES['upload_image']['tmp_name'][$key]);
  64. if ( !is_array($image) || $image[0] < 1 )
  65. {
  66. $error = "Plik graficzny jest spreparowany.";
  67. continue;
  68. }
  69. if ( !is_uploaded_file($_FILES['upload_image']['tmp_name'][$key]) )
  70. {
  71. $error = "Plik nie został wysłany.";
  72. continue;
  73. }
  74. if ( !move_uploaded_file($_FILES['upload_image']['tmp_name'][$key], $config['path_images'] . $_FILES['upload_image']['name'][$key]) )
  75. {
  76. $error = "Wysyłanie nie może zostać zakończone.";
  77. continue;
  78. }
  79. // opcjonalnie, jeşeli chcemy tylko z poziomu skrypt mieć dostęp do plików moşemy odkomentować ponişsza linijkę
  80. // chmod($config['path_images'] . $_FILES['upload_image']['name'][$key], 0600);
  81. print generateThumbnail($_FILES['upload_image']['name'][$key], $extension[count($extension)-1]); // funkcja tworząca miniaturkę
  82. }
  83. }
  84.  
  85. function generateThumbnail($filename, $extension)
  86. {
  87.  
  88. // sprawdzenie, czy plik o podanej nazwie już nie istnieje
  89. if ( file_exists($config['path_thumbnails'] . $filename) )
  90. {
  91. unlink($config['path_thumbnails'] . $filename); // usunięcie miniatury
  92. }
  93. // stworzenie nowej grafiki wg typu
  94. switch ( $extension )
  95. {
  96. case 'gif':
  97. $ic = imagecreatefromgif($config['path_images'] . $filename);
  98. break;
  99. case 'png':
  100. $ic = imagecreatefrompng($config['path_images'] . $filename);
  101. break;
  102. default:
  103. $ic = imagecreatefromjpeg($config['path_images'] . $filename);
  104. break;
  105. }
  106. if ( $ic === false )
  107. {
  108. return 'Miniaturka nie stworzona!';
  109. echo "Miniaturka nie stworzona!";
  110. }
  111. $is = getimagesize($config['path_images'] . $filename); // [0] - szerokość, [1] - wysokość
  112. switch ( $config['thumbnail_scale'] )
  113.  
  114. {
  115. case false: // zmniejszanie bezpośrednio do 180x160px
  116. $nts = imagecreatetruecolor($config['thumbnail_width'], $config['thumbnail_height']);
  117. imagecopyresized($nts, $ic, 0, 0, 0, 0, $config['thumbnail_width'], $config['thumbnail_height'], $is[0], $is[1]);
  118. break;
  119. default: // zmniejszanie z zachowaniem skali, aż do osiągnięcia co najmniej 180x160px
  120. $width = $is[0];
  121. $height = $is[1];
  122. $ratio = $is[0] / $config['thumbnail_width'];
  123. if ( $ratio > 1 )
  124. {
  125. $width = $config['thumbnail_width'];
  126. $height = intval($is[1] / $ratio);
  127. }
  128. $ratio = $height / $config['thumbnail_height'];
  129. if ( $ratio > 1 )
  130. {
  131. $width = intval($width / $ratio);
  132. $height = $config['thumbnail_height'];
  133. }
  134. $nts = imagecreatetruecolor($width, $height); // utworzenie obrazka o podanych rozmiarach z czarnym tłem
  135. imagecopyresized($nts, $ic, 0, 0, 0, 0, $width, $height, $is[0], $is[1]); break;
  136. }
  137. switch ( $extension ) // zapis do pliku
  138. {
  139. case 'gif':
  140. imagegif($nts, $config['path_thumbnails'] . $filename);
  141. break;
  142. case 'png':
  143. imagepng($nts, $config['path_thumbnails'] . $filename);
  144. break;
  145. default:
  146. imagejpeg($nts, $config['path_thumbnails'] . $filename);
  147. break;
  148. }
  149. imagedestroy($nts); // zniszczenie obrazka
  150. return $config['path_thumbnails'] . $filename;
  151. }
  152.  
  153.  
  154. include 'addproductform.html.php'; //Powrót do formularza
  155. exit();
  156. }
  157. ?>


Kontroler posiada jeszcze parę innych funkcji dlatego część z dodawaniem zdjęcia umieściłem w instrukcji if. Problem jest taki, że tworzenie miniatury nie powodzi się. Po kliknięciu przycisku "Dodaj" - dodaje się samo zdjęcie, a przeglądarka pokazuje błąd "500" mianiturka nie tworzy się.
Problem ten występuje tylko gdy kod dodający zdjęcie i tworzący miniaturę umieszczę wewnątrz instrukcji if.
Gdy cały kod jest poza if wszystko działa. Proszę o pokazanie mi gdzie jest problem. Zależy mi na tym, żeby kod był wewnątrz instrukcji if.

Proszę o pomoc.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 21.08.2025 - 01:34