Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Funkcja ignoruje warunek if
Niedowiarek
post
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 28.04.2011

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


Witam, mam taki oto skrypt na zmianę wielkości obrazka:

  1. function avatar_resizer($avatar_link, $avatardimensions="80|80")
  2. {
  3. $rozmiar = getsizeimage($avatar_link);
  4.  
  5. if($avatar_link[0] > 80 && $avatar_link[1] > 80) {
  6.  
  7.  
  8. $avatar_link = htmlspecialchars_uni($avatar_link);
  9. $avatar_dimensions = explode("|", $avatardimensions);
  10. if($avatar_dimensions[0] && $avatar_dimensions[1])
  11. {
  12. $avatar_width_height = "width=\"{$avatar_dimensions[0]}\" height=\"{$avatar_dimensions[1]}\"";
  13. }
  14. $avatar = "<img src=\"{$avatar_link}\" alt=\"\" $avatar_width_height />";
  15. }
  16. else
  17. {
  18. $avatar = '';
  19. }
  20.  
  21.  
  22. return $avatar;
  23. }
  24. }


Działał, dopóki nie dodałem instrukcji if, która sprawdza czy obrazek ma już 80x80, a jeżeli ma to przejść do końca funkcji.

Teraz wywala błąd: Parse error: syntax error, unexpected '}' in /virtual/w/o/workdomain.ugu.pl/global.php on line 547

Linijka 547 to ostatnia klamra zamykająca.
Go to the top of the page
+Quote Post
rocktech.pl
post
Post #2





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

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


Witam.

Jakiego IDE używasz?

Usuń ostatnią klamrę nie będę złośliwy (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Niedowiarek
post
Post #3





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 28.04.2011

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


Na to to ja też wpadłem (IMG:style_emoticons/default/haha.gif) Ale wtesy znowóż wyskakuje:

Fatal error: Call to undefined function getsizeimage() in /virtual/w/o/workdomain.ugu.pl/global.php on line 526
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Klamer jest za dużo, ale i usunięcie tej ostatniej nie pomoże. W instrukcji warunkowej if posługujesz się zmienną $avatar_link, a powinieneś chyba użyć zmiennej $rozmiar.

A funkcja nazywa się getimagesize().

EDIT: Poza tym wydaje mi się, że obraz powinien być skalowany proporcjonalnie, bo inaczej będzie zniekształcony.

Ten post edytował mortus 5.01.2012, 16:32:11
Go to the top of the page
+Quote Post
Niedowiarek
post
Post #5





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 28.04.2011

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


Okej, zmieniłem na getimagesize() oraz $avatar_link na $rozmiar, lecz teraz wyskoczyło ostrzeżenie:

Warning [2] getimagesize(images/avatars/php.gif?dateline=1325777488) [function.getimagesize]: failed to open stream: No such file or directory - Line: 526 - File: global.php PHP 5.2.17-ugu1 (Linux)

Wyniakłoby z niego że nie ma takiego obrazku, jaki chcę mieć w avatarze, ale sprawdziałem, i jest.

Tutaj obecna funkcja:

  1. function avatar_resizer($avatar_link, $avatardimensions="80|80")
  2. {
  3. $rozmiar = getimagesize($avatar_link);
  4.  
  5. if($rozmiar[0] > 80 && $rozmiar[1] > 80) {
  6.  
  7.  
  8. $avatar_link = htmlspecialchars_uni($avatar_link);
  9. $avatar_dimensions = explode("|", $avatardimensions);
  10. if($avatar_dimensions[0] && $avatar_dimensions[1])
  11. {
  12. $avatar_width_height = "width=\"{$avatar_dimensions[0]}\" height=\"{$avatar_dimensions[1]}\"";
  13. }
  14. $avatar = "<img src=\"{$avatar_link}\" alt=\"\" $avatar_width_height />";
  15. }
  16. else
  17. {
  18. $avatar = '';
  19. }
  20.  
  21.  
  22. return $avatar;
  23. }
  24.  
  25.  
  26. $avatar = avatar_resizer($mybb->user['avatar']);
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Funkcja jako argument $avatar_link przyjmuje adres obrazka, a nie adres pliku PHP, który ten obrazek generuje (chyba).
Go to the top of the page
+Quote Post
Niedowiarek
post
Post #7





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 28.04.2011

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


No ale w takim razie funkcja powinna wygenerować to ostrzeżenie również jak nie było żadnej modyfikacji (instrukcja if sprawdzająca wielkość obrazka), a działała. ;/
Go to the top of the page
+Quote Post
mortus
post
Post #8





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Ja nie mówię, że funkcja nie działa, tylko że dostaje nieprawidłowe dane na wejście. Sprawdź, co kryje zmienna $mybb->user['avatar'], powinien to być adres obrazka z odpowiednim rozszerzeniem.

Ten post edytował mortus 5.01.2012, 16:42:37
Go to the top of the page
+Quote Post
Niedowiarek
post
Post #9





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 28.04.2011

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


Okej, pozmieniałem teraz co nie co, i funkcja wygląda tak:

  1. <?php
  2. function avatar_resizer($avatar_link)
  3. {
  4. $rozmiar = getimagesize($avatar_link);
  5.  
  6. if($rozmiar[0] > 80 || $rozmiar[1] > 80) {
  7.  
  8. if($rozmiar[0] > 80) {
  9.  
  10. $avatardimensions[0] = 80;
  11. $avatardimensions[1] = (80*$avatardimensions[1])/$avatardimensions[0];
  12.  
  13. return $avatardimensions;
  14.  
  15. } else if($rozmiar[1] > 80) {
  16.  
  17. $avatardimensions[1] = 80;
  18. $avatardimensions[0] = (80*$avatardimensions[0])/$avatardimensions[1];
  19.  
  20. return $avatardimensions;
  21. }
  22.  
  23. if($avatar_link)
  24. {
  25. $avatar_link = htmlspecialchars_uni($avatar_link);
  26.  
  27. if($avatardimensions[0] && $avatardimensions[1])
  28. {
  29. $avatar_width_height = "width=\"{$avatardimensions[0]}\" height=\"{$avatardimensions[1]}\"";
  30. }
  31. $avatar = "<img src=\"{$avatar_link}\" alt=\"\" $avatar_width_height />";
  32. }
  33. else
  34. {
  35. $avatar = '';
  36. }
  37.  
  38. return $avatar;
  39. }
  40.  
  41. }
  42.  
  43.  
  44. $avatar = avatar_resizer($mybb->user['avatar']);
  45. ?>


I teraz obrazek się wyświetla, ale tak samo kiedy nie było skali, więc jeżeli bok ma mniej niż 80 to go rozciąga.

Ten post edytował Niedowiarek 5.01.2012, 23:25:00
Go to the top of the page
+Quote Post
wookieb
post
Post #10





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Swojego syna też nazwiesz "Błąd" bo nie rozumiesz po co nazywa się pewne rzeczy?
Temat: Jak poprawnie zatytulowac watek
Go to the top of the page
+Quote Post
Niedowiarek
post
Post #11





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 28.04.2011

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


@Refresh
Go to the top of the page
+Quote Post
mortus
post
Post #12





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Ale przecież w tym żadnych cudów nie ma:
  1. function avatar_resizer($avatar_link) {
  2. $defaultWidth = 80;
  3. $defaultHeight = 80;
  4. list($avatarWidth, $avatarHeight) = getimagesize($avatar_link);
  5. if($avatarWidth > $avatarHeight) {
  6. $newWidth = $defaultWidth;
  7. $newHeight = (int)($defaultWidth * $avatarHeight / $avatarWidth);
  8. if($newHeight > $defaultHeight) {
  9. $newWidth = (int)($defaultHeight * $avatarWidth / $avatarHeight);
  10. $newHeight = $defaultHeight;
  11. }
  12. } elseif($avatarHeight > $avatarWidth) {
  13. $newWidth = (int)($defaultHeight * $avatarWidth / $avatarHeight);
  14. $newHeight = $defaultHeight;
  15. if($newWidth > $defaultWidth) {
  16. $newWidth = $defaultWidth;
  17. $newHeight = (int)($defaultWidth * $avatarHeight / $avatarWidth);
  18. }
  19. } else {
  20. $newWidth = $defaultWidth;
  21. $newHeight = $defaultHeight;
  22. }
  23. if($avatar_link) {
  24. $avatar_link = htmlspecialchars_uni($avatar_link);
  25. $avatar = "<img src=\"{$avatar_link}\" alt=\"\" width=\"{$newWidth}\" height=\"{$newHeight}\" />";
  26. } else {
  27. $avatar = '';
  28. }
  29. return $avatar;
  30. }

Kodu na proporcjonalne przeliczenie wysokości i szerokości obrazka w sieci jest całe mnóstwo. Wystarczy dobrze poszukać.

EDIT: Jeśli coś dalej nie będzie działać, to sprawdź, co zwraca funkcja getimagesize() - var_dump($avatarWidth, $avatarHeight) w moim kodzie lub var_dump($rozmiar) w Twoim kodzie.

Ten post edytował mortus 6.01.2012, 14:13:47
Go to the top of the page
+Quote Post
Niedowiarek
post
Post #13





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 28.04.2011

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


Hmm.. Jest tak jak powiedziałeś. Getimagesize pobiera obrazek z linku, a ja mam na dysku. Jest jakaś inna funkcja sprawdzająca wielkość obrazka?

Edit: Taki warning wyskakuje: Warning [2] getimagesize(images/avatars/php.gif?dateline=1325855477) [function.getimagesize]: failed to open stream: No such file or directory - Line: 527 - File: global.php PHP 5.2.17-ugu1 (Linux)

Ten post edytował Niedowiarek 6.01.2012, 14:21:59
Go to the top of the page
+Quote Post
mortus
post
Post #14





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Problemem jest przekazywanie niewłaściwej wartości do funkcji avatar_resizer(), a nie nieprawidłowe działanie funkcji getimagesize(). Coś jest skopane w innym miejscu aplikacji, tzn. w miejscu w którym pobierasz adresy url obrazków.
Go to the top of the page
+Quote Post
Niedowiarek
post
Post #15





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 28.04.2011

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


  1. $avatar = avatar_resizer($mybb->user['avatar']);


Tutaj pobieram obrazekdo funkcji.
Go to the top of the page
+Quote Post
mortus
post
Post #16





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Pisałem już, abyś sprawdził co zawiera zmienna $mybb->user['avatar']: var_dump($mybb->user['avatar']);. Jeśli zawiera adres pliku PHP, to poszukaj tego pliku i sprawdź, co on takiego robi (być może odpowiada za przeskalowanie obrazka).
Go to the top of the page
+Quote Post
Niedowiarek
post
Post #17





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 28.04.2011

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


string(44) "images/avatars/mysql.png?dateline=1325856623"


To mi wyszło, znalazłem też w usercp.php taką linijkę: "avatar" => $avatar['avatar'].'?dateline='.TIME_NOW

@refresh
Go to the top of the page
+Quote Post
mortus
post
Post #18





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Trzeba się pozbyć tej końcówki:
  1. $avatar = avatar_resizer(substr($mybb->user['avatar'], 0, strpos($mybb->user['avatar'], '?') - 1);
Go to the top of the page
+Quote Post
Niedowiarek
post
Post #19





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 28.04.2011

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


Tzn. zamienić to:

  1. $avatar = avatar_resizer($mybb->user['avatar']);


na to co podałeś?

Nie mogę tego usunąć całkowicie bo do tej zmiennej się odnoszę w szablonie MyBB.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 19:42