Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z GD
Forum PHP.pl > Forum > PHP
mskiba
Witam, napisalem skrypt do upload'u plikow na serwer, ktory jednoczesnie zmienia rozmiar pliku oraz dodaje do bazy nazwe pliku. Niby wszystko ok, ale bo pliko jest uload'owany na serwer, rozmiar tez jest zmienione, do bazy rowniez dodaje nazwe, tylko efekt koncowy, zamiast wyswietlic mi ten plik wyswietla blad jakby byla zla sciezka do pliku. Ponizej kod:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
  3. transitional.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  7. <title>Upload</title>
  8. </head>
  9. <body>
  10.  
  11. <div>
  12. <form enctype="multipart/form-data" method="POST">
  13. <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
  14. <input name="plik" type="file" />
  15. <input type="submit" value="Wyślij plik" />
  16. </form>
  17. </div>
  18.  
  19. <?php
  20. $plik_tmp = $_FILES['plik']['tmp_name'];
  21. $plik_nazwa = $_FILES['plik']['name'];
  22. $plik_rozmiar = $_FILES['plik']['size'];
  23.  
  24. $info = pathinfo($plik_nazwa);
  25. $nazwa = $info['filename'];
  26. $rozszerzenie = $info['extension'];
  27.  
  28. if(is_uploaded_file($plik_tmp)) {
  29. move_uploaded_file($plik_tmp, "images/$plik_nazwa");
  30. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
  31. <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!<br />
  32. ";
  33. }
  34.  
  35. if ($rozszerzenie == 'jpg' || $rozszerzenie == 'JPG' || $rozszerzenie == 'jpeg' || $rozszerzenie == 'JPEG'){
  36. header("Content-type: image/jpeg");
  37. $image = imagecreatefromjpeg("images/$plik_nazwa");
  38. }
  39. elseif ($rozszerzenie == 'gif' || $rozszerzenie == 'GIF'){
  40. header("Content-type: image/gif");
  41. $image = imagecreatefromgif("images/$plik_nazwa");
  42. }
  43. elseif ($rozszerzenie == 'png' || $rozszerzenie == 'PNG'){
  44. header("Content-type: image/png");
  45. $image = imagecreatefrompng("images/$plik_nazwa");
  46. }
  47.  
  48. $size = getimagesize("images/$plik_nazwa");
  49. $new_width = 800;
  50. $new_height = $size[1] * $new_width/$size[0];
  51. $image_new = imagecreatetruecolor($new_width, $new_height);
  52. imagecopyresized($image_new, $image, 0, 0, 0, 0, $new_width, $new_height,$size[0], $size[1]);
  53.  
  54. if ($rozszerzenie == 'jpg' || $rozszerzenie == 'JPG' || $rozszerzenie == 'jpeg' || $rozszerzenie == 'JPEG'){
  55. imagejpeg($image_new,"images/$plik_nazwa",100);
  56. }
  57. elseif ($rozszerzenie == 'gif' || $rozszerzenie == 'GIF'){
  58. imagegif($image_new,"images/$plik_nazwa",100);
  59. }
  60. elseif ($rozszerzenie == 'png' || $rozszerzenie == 'PNG'){
  61. imagepng($image_new,"images/$plik_nazwa",100);
  62. }
  63.  
  64.  
  65.  
  66.  
  67.  
  68. $polaczenie = new mysqli('localhost', 'user', 'pass', 'db');
  69. $wynik = $polaczenie -> query("INSERT INTO gallery_files (id_file, filename) VALUES
  70. ('', '$plik_nazwa')") or die("QUERY ERROR: ".mysql_error());
  71. ?>
  72. </body>
  73. </html>
  74.  
pedro84
Treść błędu to...? Spróbuj też podać ścieżkę absolutną do pliku.
mskiba
No właśnie widzisz, ani w logach ani na stronie żaden blad sie nie wyświetla. Ścieżka bezwzględna nic nie dała, jest to samo. A swoja droga to ktory fragment kodu odpowiada, za wyswietlenie obrazka po jego zapisaniu juz po resize?

  1. imagejpeg($image_new,"images/$plik_nazwa",100);


questionmark.gif Ten fragment zapisuje i wysyla do przegladarki? Czy po podaniu drugiego parametru tylko zapisuje?
pedro84
Ehh, ślepy jestem. Oczywiście, po podaniu drugiego parametru, tylko Ci zapisze.

BTW. A czemu nie IM tylko GD?
mskiba
Po prostu poszerzam horyzonty wink.gif Nie miałem wcześniej do czynienia z gd dlatego próbuje wink.gif Co dalej nie rozwiązuje mojego problemu wink.gif
pedro84
No jeśli chcesz wyświetlić plik, to imagejpeg($image) bez drugiego argumentu i analogicznie.
com
http://php.net/manual/en/function.imagejpeg.php 3 parametr określa jakość, drugi zapisuje do pliku, pierwszy wyświetla na ekran ale nie użyjesz obu naraz w jednej funkcji, możesz albo zapisać albo wyświetlić na ekranie zresztą pisze to w manualu wink.gif
Cytat
// outputting to the browser
// header() needed for browser
header('Content-Type: image/jpeg')
imagejpeg($im);

// saving to a file
// you do not need a header() function to save to a file
imagejpeg($im, "../images/image001.jpg");

// outputting to the browser including quality parameter.
// skipping parameter2 to output to browser
header('Content-Type: image/jpeg');
imagejpeg($im, null, 90);

// saving to a file including quality parameter.
// all parameters used for saving to a file with quality adjustment
imagejpeg($im, "../images/image001.jpg", 90);


poza tym ten if prosiłby się o zamianę na jakiegoś switch case smile.gif pomijając fakt ze robisz sobie lekki bałagan tworząc kilka razy tego samego ifa
mskiba
Właśnie o to chodzi, ze ja nie chce wyswietlac tego obrazka. Spróbuj wgrać jakiś plik i zobacz efekt końcowy.


http://185.5.99.71/gallery/upload.php
com
nie możesz ustawiać nagłówka header("Content-type: image/jpeg"); jeśli nie wyświetlasz na ekranie pliku zobacz mój cytat tam nie ma header("Content-type: image/jpeg");

bo teraz upload.php traktuje jak obrazek a przecież on nie ma być obrazkiem tylko dalej plikiem php wink.gif
mskiba
Właśnie o to mi chodziło, wywaliłem te naglowki idziala jak natura chciała wink.gif Dziękuje wink.gif
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.