Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> getimagesize i problem z jpg
vvooki
post 1.12.2005, 00:12:03
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 30.11.2005

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


Witam,
robię funkcję do skalowania jpgów.
Plan wygląda tak:
plik jest upoladowany z formularza i wgrywany do katalogu
potem jest robiona prewka i jednocześnie wrzucana do odpowiedniego katalogu.
Dla niektórych jpgów (np. 800/600 zapisanych z Photoshopa przez "Save for web") wszystko działa jak trzeba.
Problem zacznyna się w przypadku gdy próbuję wrzucić nie zmieniany plik 1,3Mb (koło 2000/1800px) bezpośrednio z cyfrówki (nie obrabianą w PS) - plik jak najbardziej się przegyrwa na serwer a problem powstaje dopiero w momencie w którym przez getimagesize() próbuję pobrać typ pliku i wielkość - funkcja poprostu nie zwraca żadnych wyników.
Czy ktoś miał kiedyś taki problem? Może jest jakaś metoda, żeby obejść tą funkcję?

Pozdrawiam
guma

Ten post edytował vvooki 1.12.2005, 00:12:26
Go to the top of the page
+Quote Post
shpyo
post 1.12.2005, 08:56:58
Post #2





Grupa: Zarejestrowani
Postów: 574
Pomógł: 2
Dołączył: 13.04.2004
Skąd: Lublin

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


Spróbuj sobie wyświetlić nazwę pliku jaka jest pobierana, tablicę $_FILES etc. Bo tak to ciężko coś powiedzieć. Bo chyba mało prawdopodobne aby php się wykładało, tylko dlatego że plik ma 1,3MB.


--------------------
Go to the top of the page
+Quote Post
vihoo
post 1.12.2005, 10:03:19
Post #3





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.11.2005

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


Może za niska wersja php nieradzaca sobie z typem jpg generowanym przez cyfrówkę. Zobacz http://pl2.php.net/function.getimagesize


--------------------
--------------------------
zapraszam na Wejherowo - centrum informacji
Parkiety, granit
Go to the top of the page
+Quote Post
vvooki
post 1.12.2005, 13:16:59
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 30.11.2005

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


Tak wygląda funkcja:
  1. <?php
  2. function img_resize($path,$w=0,$h=0,$quality=100,$save=''){
  3.  
  4.   echo $path;
  5.   $image_data=@getimagesize($path);
  6.   echo 'image_data: 0: '.$image_data[0].' 1: '.$image_data[1].' 2: '.$image_data[2].' 3: '.$image_data[3];
  7.  
  8.   if($save=='') header('Content-type: '.$image_data['mime']); else $save=eregi_replace('%ext',$gd_ext[$image_type],$save);
  9.  
  10.   if($w!=0){
  11.    $rapporto=$image_data[0]/$w;
  12.    if($h!=0){
  13.      if($image_data[1]/$rapporto>$h) $rapporto=$image_data[1]/$h;
  14.    }
  15.   }elseif($h!=0){
  16.    $tmp_h=$image_data[1]/$h;
  17.   }else{
  18.    return false;
  19.   }
  20.  
  21.   $thumb_w=$image_data[0]/$rapporto;
  22.   $thumb_h=$image_data[1]/$rapporto;
  23.  
  24.   $img_src=@imagecreatefromjpeg($path);
  25.  
  26.   $img_thumb=@imagecreatetruecolor($thumb_w,$thumb_h);
  27.   $result=@imagecopyresampled($img_thumb,$img_src,0,0,0,0,$thumb_w,$thumb_h,$image_data[0],$image_data[1]);
  28.   if(!$img_src||!$img_thumb||!$result) return false;
  29.  
  30.   $result=@imagejpeg($img_thumb,$save,$quality);
  31.  
  32.   return $result;
  33. }
  34. ?>


poprawiam
---
nospor



Linijka z echo na początku jest do testów.
Okazało się że jest ok to znaczy:
0: 2048 1: 1536 2: 2 3: width="2048" height="1536"

Ale prewki w dalszym ciągu się nie tworzą...
Może ktoś znajdzie co jest w tym kodzie źle?...
Go to the top of the page
+Quote Post
mike
post 1.12.2005, 13:23:53
Post #5





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Usuń wszystkie @ to zobaczysz gdzie są błędy.
Na początku daj też:
  1. <?php
  2.  
  3. error_reporting( E_ALL );
  4. ini_set( 'display_errors', 1 );
  5.  
  6. ?>

będziesz pewien że wyświetlają się wszystko błędy.
Go to the top of the page
+Quote Post
vvooki
post 1.12.2005, 13:39:09
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 30.11.2005

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


Dziękuję. Faktycznie błędy teraz pokazuje.
Dostałem coś takiego:
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 2048 bytes) in .... on line 51
W tej lini znajduje się funkcja imagecreatefromjpeg();
Czy to oznacza, że mało pamięci ma przydzielone samo php na serwerze?

ps. dostałem jeszcze coś takiego:
Notice: Use of undefined constant akcja - assumed 'akcja' in ... on line 63
kod tam wygląda tak: $akcja=$_GET[akcja];
czy coś w tym jest nie tak jak powinno?

Z góry dziękuję za odpowiedzi i pomoc

Ten post edytował vvooki 1.12.2005, 13:41:22
Go to the top of the page
+Quote Post
mike
post 1.12.2005, 13:41:24
Post #7





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Tak, oznacza to że php ma za mało pamięci i nie starcza jej na operacje na tym pliku.
Możesz zwiększyć przydział pamięci dla php, alebo zdecydować się na operacje na mniejszych plikach.

----edit----
Jeśli używasz tablic asocjacyjnych, nie ważne czy są superglobalne czy nie nie można pisać:
  1. <?php
  2.  
  3. echo $arrSomeTable[ someIndex ];
  4.  
  5. ?>

dlatego że nie masz takiej stałej jak someIndex.
Powinieneś zawsze używać znaków apostrofu:
  1. <?php
  2.  
  3. echo $arrSomeTable[ 'someIndex' ];
  4.  
  5. ?>
Go to the top of the page
+Quote Post
nospor
post 1.12.2005, 13:42:51
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Co do akcji. POwinno byc:
  1. <?php
  2.  
  3.  $akcja=$_GET['akcja'];
  4.  
  5. ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
vvooki
post 1.12.2005, 13:43:27
Post #9





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 30.11.2005

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


Cytat(mike_mech @ 2005-12-01 12:41:24)
Tak, oznacza to że php ma za mało pamięci i nie starcza jej na operacje na tym pliku.
Możesz zwiększyć przydział pamięci dla php, alebo zdecydować się na operacje na mniejszych plikach.

Ale ponieważ skrypt piszę nie na swoim serwerze tylko na wykupionym miejscu u providera i tam phpinfo() wypisuje samo że ma 8Mb to znaczy, że jest to ustawienie globalne i sam go nie zmienię?... :-(
Go to the top of the page
+Quote Post
mike
post 1.12.2005, 13:45:55
Post #10





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(vvooki @ 2005-12-01 13:43:27)
Ale ponieważ skrypt piszę nie na swoim serwerze tylko na wykupionym miejscu u providera i tam phpinfo() wypisuje samo że ma 8Mb to znaczy, że jest to ustawienie globalne i sam go nie zmienię?... :-(

Nie. Musi to zrobić administrator serwera.
Go to the top of the page
+Quote Post
vvooki
post 1.12.2005, 13:46:52
Post #11





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 30.11.2005

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


Ok. Bardzo dziękuję.
Sporo się nauczyłem... idę walczyć z providerem aarambo.gif

Pozdrawiam
Guma
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:56