Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]imagecreatefromjpeg()-Błąd
Forum PHP.pl > Forum > Przedszkole
kujol
Witam, funkcja imagecreatefromjpeg() zwraca mi false i nie mogę sobie z tym poradzić. Do zmiennej $name dochodzi prawidłowa nazwa, $img jest puste. Brak jakiegokolwiek błędu.

  1.  
  2. $img = imagecreatefromjpeg($name);
  3. echo " jpeg: ".$img;
  4.  
  5. if($this->img){
  6. echo "Ok!";
  7. }
  8.  
  9. else{
  10. echo "Błąd!";
  11. }
  12.  


@edit

Dokładniej wygląda to tak i błąd (funkcja wzraca false) jest w lini 48.

  1.  
  2. <?php
  3.  
  4. class Upload{
  5.  
  6. private $maxSize;
  7. private $catalog;
  8.  
  9. private $file;
  10. private $type;
  11. private $size;
  12. private $name;
  13. private $name_tmp;
  14. private $error;
  15.  
  16. private $width;
  17. private $height;
  18.  
  19. function Wgraj(){
  20.  
  21. $this->maxSize = 10000000; //max rozmiar pliku w bajtach ~ 10 MB
  22. $this->catalog = $_SERVER['DOCUMENT_ROOT']."/str/"; //folder docelowy
  23.  
  24. $this->file = $_FILES['file']['name'];
  25. $this->type = $_FILES['file']['type'];
  26. $this->size = $_FILES['file']['size'];
  27. $this->name = $_FILES['file']['name'];
  28. $this->name_tmp = $_FILES['file']['tmp_name'];
  29. $this->error = $_FILES['file']['error'];
  30.  
  31. $this->width = $_POST['width'];
  32. $this->height = $_POST['height'];
  33.  
  34. $this->submit = $_POST['submit'];
  35. $this->mini = $_POST['mini'];
  36.  
  37. if (isset($this->submit)){ //sprawdza czy został wciśnięty przycisk wyslij
  38.  
  39. if(isset($this->mini)){ //sprawdza czy został wybrana opcja miniaturki
  40. //uploda + miniaturka
  41. if($this->type == "image/jpeg" OR $this->type == "image/png" OR $this->type == "image/gif"){ //dozwolone typy grafik
  42.  
  43. if ($this->size <= $this->maxSize){
  44.  
  45. if(move_uploaded_file($this->name_tmp, $this->catalog.$this->name)){ //zapisuje plik w folderze
  46. echo "Pomyślnie wgrano plik!<br/>";
  47.  
  48. if($this->type == "image/jpeg"){
  49. $this->img = imagecreatefromjpeg($this->name); //wybiera grafikę jpeg do zmniejszenia
  50. echo "$this->name: jpeg:".$this->img;
  51. if($this->img){
  52. echo "Ok!";
  53. }
  54.  
  55. else{
  56. echo "Błąd!";
  57. }
  58. }
  59.  
  60. elseif($this->type == "image/png"){
  61. $this->img = imagecreatefrompng($this->name); //wybiera grafikę png do zmniejszenia
  62. echo "png".$this->img;
  63. }
  64.  
  65. else{
  66. $this->img = imagecreatefromgif($this->name); //wybiera grafikę gif do zmniejszenia
  67. echo "gif".$this->img;
  68. }
  69.  
  70. $this->original_width = imagesx($this->img); //pobiera rozmiary oryginalnej grafiki
  71. $this->original_height = imagesy($this->img);
  72.  
  73. $this->img_mini = imagecreatetruecolor($this->width, $this->height); //pobiera id zdjęcia
  74. echo "<h1>DANE: 1: $this->img_mini, 2: $this->img, 3: $this->width, 4: $this->height, 5: $this->original_width, 6: $this->original_height</h1>";
  75. if(imagecopyresampled($this->img_mini, $this->img, 0, 0, 0, 0, $this->width , $this->height, $this->original_width , $this->original_height)){ //tworzy miniaturkę
  76.  
  77. if($this->typ == "image/jpeg"){
  78. imagejpeg($this->img_mini, $this->catalog."mini.".$this->name, 80); //zapisuje jpeg w folderze
  79. }
  80.  
  81. elseif($this->typ == "image/png"){
  82. imagepng($this->img_mini, $this->catalog."mini.".$this->name, 80); //zapisuje png w folderze
  83. }
  84.  
  85. else{
  86. imagegif($this->img_mini, $this->catalog."mini.".$this->name, 80); //zapisuje gif w folderze
  87. }
  88.  
  89. imagedestroy($this->img); //zwalnia pamięć
  90. imagedestroy($this->img_mini);
  91.  
  92. echo "Pomyślnie utworzono miniaturkę!";
  93. }
  94.  
  95. else{
  96. echo $this->error."<br/>"; //ilość wszytkich błędów w tablicy files
  97. throw new Exception("Błąd podczas tworzenia miniaturki pliku, spróbuj ponownie!");
  98. }
  99. }
  100.  
  101. else{
  102. echo $this->error."<br/>"; //ilość wszytkich błędów w tablicy files
  103. throw new Exception("Błąd podczas wgrywania pliku, spróbuj ponownie!");
  104. }
  105. }
  106.  
  107. else{
  108. echo "Plik jest zbyt duży!";
  109. }
  110. }
  111.  
  112. else{
  113. echo "Zły typ pliku!";
  114. }
  115. }
  116.  
  117. else{
  118. //upload
  119. if ($this->size <= $this->maxSize){
  120.  
  121. if(move_uploaded_file($this->name_tmp, $this->catalog.$this->name)){ //zapisuje plik w folderze
  122. echo "Pomyślnie wgrano plik!";
  123. }
  124.  
  125. else{
  126. echo $this->error."<br/>"; //ilość wszytkich błędów w tablicy files
  127. throw new Exception("Błąd podczas wgrywania pliku, spróbuj ponownie!");
  128. }
  129. }
  130.  
  131. else{
  132. echo "Plik jest zbyt duży!";
  133. }
  134. }
  135.  
  136. }
  137.  
  138. else{
  139. }
  140.  
  141. }
  142. }
  143.  
  144. $upload = new Upload;
  145. $upload->Wgraj();
  146.  
  147. ?>
  148.  
SmokAnalog
Nie utworzysz obrazka z pliku $this->name, bo tam masz zapisaną tylko nazwę oryginalnego pliku. Spróbuj z $this->name_tmp - to jest nazwa pliku tymczasowego i to on powinien być podstawą dla imagecreatefromjpeg.

P.S. Masz bardzo dziwnie zaprojektowaną klasę.
kujol
To samo, utworzyłem 2 plik bez klasy, tylko tworzenie miniaturki i tam normalnie działa.

@edit:

Robię nową klasę, ale coś wywala mi błąd i nie wiem dlaczego. Błąd ten nie utrudnia działania, tylko się wyświetla.

  1. <!doctype html>
  2. <html>
  3. <head>
  4.  
  5. <title>Upload pliku na serwer</title>
  6. <meta charset="UTF-8">
  7.  
  8. </head>
  9. <body>
  10.  
  11. <form method="post" action="" enctype="multipart/form-data">
  12. Szerokość: <input type="text" name="width" value="200"/>px
  13. Wysokość: <input type="text" name="height" value="150"/>px<br/>
  14. <input type="submit" name="submit" value="Wyślij"/>
  15. </form>
  16.  
  17. <?Php
  18.  
  19. class Uploda{
  20.  
  21. public $width;
  22. public $height;
  23.  
  24. public $catalog;
  25. public $maxSize;
  26.  
  27. public function Data($width, $height){
  28.  
  29. $this->width = $width;
  30. $this->height = $height;
  31. echo $this->width = $width.$this->height = $height;
  32. }
  33.  
  34. public function Settings($catalog, $maxSize){
  35.  
  36. $this->catalog = $catalog;
  37. $this->maxSize = $maxSize;
  38. }
  39.  
  40. public function UploadFile(){
  41.  
  42. if($this->width <= $this->maxSize){
  43. echo 'Is ok!';
  44. }
  45.  
  46. else{
  47. }
  48.  
  49. echo 'To jest juz upload';
  50. }
  51.  
  52. public function UploadImageAndMini(){}
  53.  
  54.  
  55. }
  56.  
  57. $upload = new Uploda;
  58. $upload->Data($_POST['width'], $_POST['height']);
  59. $upload->Settings('https://www.adresstrony.pl/', 10000000); //Folder docelowy i max rozmiar pliku
  60. $upload->UploadFile();
  61. $upload->UploadImageAndMini();
  62.  
  63. ?>
  64.  
  65. </body>
  66. </html>


Błąd jest w tej linijce:

  1. $upload->Data($_POST['width'], $_POST['height']);


Kod
Notice: Undefined index: width in https://www.adresstrony.pl/index.php on line 59

Notice: Undefined index: height in https://www.adresstrony.pl/index.php on line 59


Gdy zamiast $_POST wstawię tam $zmienna jest nadal to samo, błąd ustępuje, kiedy jest tam coś wpisane na sztywno.
Turson
Wywala błąd, bo formularz nie został jeszcze wysłany.
  1. if(isset($_POST['submit'])){
  2. //tutaj operacje na obiekcie
  3. }
kujol
Znalazłem chyba błąd, ale nie wiem jak go rozwiązać. To nie była wina funkcji.
Gdy pliki nie są w żadnym folderze tylko w katalogu home to działają normalnie, ale gdy utworzę nowy folder i je tam wrzucę to wywala błąd z nazwą tej funkcji:

Kod
Warning: imagecreatefromjpeg(2701447256_2.jpg): failed to open stream: No such file or directory in https://www.adresstrony.pl/NowyFolder/class.php on line 61


Struktura (tu działają normalnie):

*Home
-index.php
-class.php

A tu już nie:

*Home
*NowyFolder
-index.php
-class.php
Turson
Cytat
A tu już nie:

*Home
*NowyFolder
-index.php
-class.php

index i class są w katalogu NowyFolder?

Cytat
failed to open stream: No such file or directory

To po prostu wskazuje na złą ścieżkę. Podawaj bezwzględną
kujol
Cytat
index i class są w katalogu NowyFolder?

Tak, są w tym samym folderze

Klasę includuję do index w takie sposoby:

  1. include('https://www.adresstrony.pl/NowyFolder/class.php') //dołącza klasę
  2. //LUB
  3. include('class.php') //dołącza klasę


I w obu przypadkach jest ten sam efekt :/
Turson
A ścieżka "/NowyFolder/class.php" lub "NowyFolder/class.php" questionmark.gif
Spróbuj także http a nie https
kujol
Plik includowany jest chyba prawidłowo, bo w klasie inna metoda, czyli upload pliku, bez miniaturki wykonuje się normalnie.
Dopiero gdy ma się wykonać upload z miniaturką wywala ten błąd.

index.php

  1. <!doctype html>
  2. <html>
  3. <head>
  4.  
  5. <title>Upload pliku na serwer</title>
  6. <meta charset="UTF-8">
  7.  
  8. </head>
  9. <body>
  10.  
  11. <form method="post" action="" enctype="multipart/form-data">
  12. Max 10MB <input type="file" name="file"/>
  13. <input type="checkbox" name="mini"/> -Stwórz miniaturkę, jeśli plik jest grafiką (jpeg, png, gif)
  14. Szerokość: <input type="text" name="width" value="200"/>px
  15. Wysokość: <input type="text" name="height" value="150"/>px<br/>
  16. <input type="submit" name="submit" value="Wyślij"/>
  17. </form>
  18.  
  19. <?Php
  20.  
  21. include('class.php') //dołącza klasę
  22.  
  23. ?>
  24.  
  25. </body>
  26. </html>


class.php

  1. <?Php
  2.  
  3. class Uploda{
  4.  
  5. public $name;
  6. public $tmp_name;
  7. public $type;
  8. public $size;
  9. public $error;
  10. public $width;
  11. public $height;
  12.  
  13. public $catalog;
  14. public $maxSize;
  15.  
  16. public function Data($name, $tmp_name, $type, $size, $error, $width, $height){
  17.  
  18. $this->name = $name;
  19. $this->tmp_name = $tmp_name;
  20. $this->type = $type;
  21. $this->size = $size;
  22. $this->error = $error;
  23. $this->width = $width;
  24. $this->height = $height;
  25. }
  26.  
  27. public function Settings($catalog, $maxSize){
  28.  
  29. $this->catalog = $catalog;
  30. $this->maxSize = $maxSize;
  31. }
  32.  
  33. public function UploadFile(){
  34.  
  35. if($this->size <= $this->maxSize){
  36.  
  37. if(move_uploaded_file($this->tmp_name, $this->catalog.$this->name)){ //zapisuje plik w folderze
  38. echo '<p>Pomyślnie wgrano plik!<p>';
  39. }
  40.  
  41. else{
  42. echo '<p>Błąd podczas wgrywania pliku, spróbuj ponownie!<br/> Ilość błędów w tablicy $_FILES: '.$this->error.'<p>';
  43. }
  44. }
  45.  
  46. else{
  47. echo '<p>Plik jest zbyt duży!<p>';
  48. }
  49. }
  50.  
  51. public function UploadImageAndMini(){
  52.  
  53. if($this->size <= $this->maxSize){
  54.  
  55. if($this->type == "image/jpeg" OR $this->type == "image/png" OR $this->type == "image/gif"){ //dozwolone typy grafik
  56.  
  57. if(move_uploaded_file($this->tmp_name, $this->catalog.$this->name)){ //zapisuje plik w folderze
  58. echo '<p>Pomyślnie wgrano plik!<p>';
  59.  
  60. if($this->type == 'image/jpeg'){
  61. $this->img = imagecreatefromjpeg($this->name); //wybiera grafikę jpeg do zmniejszenia
  62. }
  63.  
  64. elseif($this->type == 'image/png'){
  65. $this->img = imagecreatefrompng($this->name); //wybiera grafikę png do zmniejszenia
  66. }
  67.  
  68. else{
  69. $this->img = imagecreatefromgif($this->name); //wybiera grafikę gif do zmniejszenia
  70. }
  71.  
  72. $this->img_mini = imagecreatetruecolor($this->width, $this->height); //pobiera id zdjęcia
  73.  
  74. $this->original_width = imagesx($this->img); //pobiera rozmiary oryginalnej grafiki
  75. $this->original_height = imagesy($this->img);
  76.  
  77. if(imagecopyresampled($this->img_mini, $this->img, 0, 0, 0, 0, $this->width , $this->height, $this->original_width , $this->original_height)){ //tworzy miniaturkę
  78. echo '<p>Pomyślnie utworzono miniaturkę!<p>';
  79.  
  80. if($this->type == 'image/jpeg'){
  81. imagejpeg($this->img_mini, $this->catalog.'mini.'.$this->name, 80); //zapisuje jpeg w folderze
  82. }
  83.  
  84. elseif($this->type == 'image/png'){
  85. imagepng($this->img_mini, $this->catalog.'mini.'.$this->name, 9); //zapisuje png w folderze
  86. }
  87.  
  88. else{
  89. imagegif($this->img_mini, $this->catalog.'mini.'.$this->name, 80); //zapisuje gif w folderze
  90. }
  91.  
  92. imagedestroy($this->img); //zwalnia pamięć
  93. imagedestroy($this->img_mini);
  94. }
  95.  
  96. else{
  97. echo '<p>Błąd podczas tworzenia miniaturki pliku, spróbuj ponownie!<br/> Ilość błędów w tablicy $_FILES: '.$this->error.'<p>';
  98. }
  99. }
  100.  
  101. else{
  102. echo '<p>Błąd podczas wgrywania pliku, spróbuj ponownie!<br/> Ilość błędów w tablicy $_FILES: '.$this->error.'<p>';
  103. }
  104. }
  105.  
  106. else{
  107. echo '<p>Zły typ pliku!<p>';
  108. }
  109. }
  110.  
  111. else{
  112. echo '<p>Plik jest zbyt duży!<p>';
  113. }
  114. }
  115. }
  116.  
  117. if(isset($_POST['submit'])){ //sprawdza czy wciśnięto przycisk "Wyślij"
  118. $upload = new Uploda;
  119. $upload->Data($_FILES['file']['name'],
  120. $_FILES['file']['tmp_name'],
  121. $_FILES['file']['type'],
  122. $_FILES['file']['size'],
  123. $_FILES['file']['error'],
  124. $_POST['width'],
  125. $_POST['height']);
  126.  
  127. $upload->Settings('https://www.adresstrony.pl/NowyFolderDoZapisu/', 10000000); //Folder docelowy i max rozmiar pliku
  128.  
  129. if(!isset($_POST['mini'])){ //sprawdza czy wybrano opcję miniaturki
  130. $upload->UploadFile();
  131. }
  132.  
  133. else{
  134. $upload->UploadImageAndMini();
  135. }
  136. }
  137.  
  138. else{}
  139.  
  140. ?>


Już wiem gdzie leży dokładniej błąd

W klasie powyżej jest to linijka 127:

  1. $upload->Settings('https://www.adresstrony.pl/NowyFolderDoZapisu/', 10000000); //Folder docelowy i max rozmiar pliku


Jeśli pliku są w katalogu home:
Kod
*HOME
   -index.php
   -class.php

To ścieżka pod którą mają zostać zapisane pliki musi wyglądać tak:
  1. $upload->Settings('https://www.adresstrony.pl/', 10000000); //Folder docelowy i max rozmiar pliku


A gdy pliku są w folderze NowyFolder:
Kod
*HOME
   *NowyFolder
      -index.php
      -class.php

To ścieżka pod którą mają zostać zapisane pliki musi wyglądać tak:
  1. $upload->Settings('https://www.adresstrony.pl/NowyFolder/', 10000000); //Folder docelowy i max rozmiar pliku


Czyli plik z miniaturką musi być zapisywany w tym samym miejscu co jest klasa, ale gdybym chciał zapisać go w inne miejsce docelowe to nie działa.
Co muszę zmienić?

Podkreślę, że sam plik mogę zapisać gdzie mi się podoba, ale z miniaturką tak już nie jest.

Temat do kosza smile.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.