Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: imagecreatetruecolor nie działa
Forum PHP.pl > Forum > PHP
radziopoke
Dawno mnie tu nie było ale do rzeczy:
Nie dawno chciałem zrobić sobie pewien skrypt bazujący na bibliotece GD. Nie raz z niej korzystałem kiedyś i wszystko było w porządku a teraz wyskakują same błędy.

Najpierw używany skrypt:
  1. <?php
  2. $src = imagecreatefromjpeg('test2.jpg');
  3.  
  4. $w = imagesx($src);
  5. $h = imagesy($src);
  6.  
  7. $dest = imagecreatetruecolor($w, $h);//tą linię wskazuje błąd
  8. //tu miały być dalsze operacje
  9. imagedestroy($dest);
  10. imagedestroy($src);
  11. ?>

Po wykonaniu tego skryptu otrzymuję błąd:
Kod
Parse error: syntax error, unexpected '$h' (T_VARIABLE) in C:\xampp\htdocs\testy\galleryimage\image.php on line 7

co dziwniejsze po wykonaniu takiego skryptu:
  1. <?php
  2. $src = imagecreatefromjpeg('test2.jpg');
  3.  
  4. $w = imagesx($src);
  5. $h = imagesy($src);
  6.  
  7. echo $w.' x '.$h;
  8. imagedestroy($src);
  9. ?>

Skrypt wyświetla: 320 x 240
Czyli odpowiednio pobiera parametry.

Nie wiem dlaczego nie chce wykonać się pierwszy skrypt.
1. Biblioteka GD jest włączona(sprawdzałem to na wszystkie możliwe sposoby).
2. gdybym zamienił $dest = imagecreatetruecolor($w, $h); na $desc = imagecreatefromjpeg('test2.jpg'); i prubując dodać funkcję imagecopy to wyrzuca mi błąd w tej funkcji wskazując 2 argument którym jest $desc
3. Nie dotyczy to nazwy $desc gdyż po jej zmianie nadal błąd występował
4. nawet odinstalowałem i na nowo zainstalowałem xampp-a, podmieniałem również pliki związane z biblioteką GD na inne, niestety też nie pomogło.
5. Funkcja imagecreate zachowuje się tak samo

Najbardziej dziwi mnie fakt, że błedy nie wskazują na funkcje z bibklioteki GD tylko na jej parametr (najczęsciej drugi w kolejności).
Co może być powodem tych błedów?

edit:
sprawdziłem jeszcze kilka rzeczy:
1. funkcja imagecreate zachowuje się tak samo
2. gdy w parametrach podam liczby zamiast zmiennych wyskakuje błąd o nieznanej funkcji imagecreate/imagecreatetruecolor
3. Jak już wspomniałem biblioteka GD jezt zainstalowana i uruchomiona
skrypt:
  1. <?php
  2. $testGD = get_extension_funcs("gd"); // Grab function list
  3. if (!$testGD){ echo "GD not even installed."; exit; }
  4. echo"<pre>".print_r($testGD,true)."</pre>";
  5. ?>

pokazuje te funkcje wypisane więc powinny działać

Już sam nie wiem jak temu zaradzić...
Kshyhoo
U mnie wszystko co wkleiłeś działa...
radziopoke
A z jakiego serwera korzystasz?
Jaką posiadasz wersję biblioteki GD?
I pod jakim systemem to sprawdzałeś?
Kshyhoo
System - Windows NT 6.0 build 6002
Serwer - Apache/2.2.8 (Win32) PHP/6.0.0-dev
GD Version - bundled (2.0.28 compatible)
radziopoke
Mógłbyś mi jakąś podesłać dll-kę php_gd2.dll bo może coś jest nie tak z moją wersją (2.1.0 compatible), a w necie niestety nie da się znaleźć osobno innej wersji wypakowanej osobno.
Kshyhoo
A nie lepiej zainstalować AppServ?

php_gd2.rar
radziopoke
niestety ani podmiana pliku ani odinstalowanie całkowicie dotychczasowego serwera i zainstalowanie AppServ nie rozwiązało sprawy.
Wyświetla się taki błąd wskazujący na tą samą linię co poprzedni serwer.
Kod
Parse error: syntax error, unexpected T_VARIABLE in C:\AppServ\www\test.php on line 7


Próbowałem zmieniać nawet kodowanie pliku z ANSII na UTF-8 i na UTF-8(bez BUM)
Niestety efekt ten sam. Więc raczej kodowanie pliku nie ma ty większego znaczenia.

Z początku myślałem również, że być może to wina systemu(Windows XP z SP 3), więc próbowałem przetestować to na innym systemie, akurat tak się złożyło, że mam tablet z androidem na którym posiadam również serwer. Niestety i na androidzie nie przeszło tej linijki...
Więc gdzie może leżeć błąd?

edit:
sprawdzone również na serwerze cba.pl i home.pl
Na każdym z nich również wyskoczył błąd.

Skoro zadziałał ci pierwszy skrypt możesz mi go zapisać i wysłać w formie pliku php. bo może masz jakąś inną metodę zapisu tego pliku. Bo ja nawet kopiując swój pierwszy skrypt z pierwszego wątku również otrzymuję ten sam błąd.

edit2:
Problem rozwiązany choć trochę dziwny.
Efektem błędu były spacje przed parametrami w funkcji.
Oto sposób w jaki do tego doszedłem.
Zacząłem ręcznie przepisywać cały ten krótki kod. O dziwo ku mojemu zaskoczeniu odpalił bezbłędnie. Więc uruchomiłem w notepad++ stary plik i przekopiowałem linijkę
  1. $dest = imagecreatetruecolor($w, $h);

tak by wyglądało to mniej więcej tak:
  1. $dest = imagecreatetruecolor($w, $h);//linijka wpisana ręcznie
  2. $dest = imagecreatetruecolor($w, $h);//linijka przekopiowana ze starego pliku

zapewne różnicy nie widzicie bo jest ona całkowicie nie widoczna! a błąd wyskoczył dla drugiej linijki.
choć już mogłem napisać w nowym pliku wszystko coś nie dawało mi spokoju. Wykasowałem w skopiowanej linijce spacje i ku mojemu zdziwieniu skrypt już nie protestował.
Teraz już wiem, że nie warto kopiować skryptów z internetu a lepiej samemu je wpisywać smile.gif
sowiq
Spróbuj przykładu z php.net i daj znać jaki otrzymałeś wynik:

  1. <?php
  2. $im = @imagecreatetruecolor(120, 20)
  3. or die('Cannot Initialize new GD image stream');
  4. $text_color = imagecolorallocate($im, 233, 14, 91);
  5. imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);
  6.  
  7. header ('Content-Type: image/png');
  8. imagepng($im);
  9.  
  10. imagedestroy($im);
radziopoke
jak już napisałem w poprzednim poście problem rozwiązałem.
Co więcej pamiętam, że właśnie funkcję imagecreatetruecolor kopiowałem z php.net i od tego zaczęły się moje problemy.
Tak na szybko sprawdziłem też twój skrypt i działa.
Kshyhoo
Ja skopiowałem z forum i bez problemów...
sowiq
Cytat(Kshyhoo @ 20.08.2013, 20:24:56 ) *
Ja skopiowałem z forum i bez problemów...

Być może forum filtruje jakoś niestandardowe znaki.
radziopoke
dla tych co chcą sprawdzić wystarczy w pierwszym poście nacisnąć link pobierz (nad pierwszym skryptem) i tak zapisać wygenerowany plik...
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.