Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Skrypt przekracza limit czasu
Forum PHP.pl > Forum > PHP
230005
Kod:

  1.  
  2. while($height > 400)
  3. {
  4. $height = round($height / $nwd);
  5. $width = round($width / $nwd);
  6. }
  7.  


Serwer krzyczy, że został przekroczony maksymalny limit czasu przeznaczony na wykonanie skryptu (ustawiłem na 500 sekund) w linii dzielenia $height. Zmienna $nwd to największy wspólny dzielnik dla dwu pozostałych - w wypadku który powoduje błąd tą liczbą jest 2. Sprawa wydaje się dziwna, bo błąd nie występuje w każdym wypadku - ten fragment służy do wyliczania wymiarów dla przeskalowanego zdjęcia - jeśli orientacja zdjęcia jest pozioma (np w stosunku 3:2) wszystko jest ok, kiedy natomiast proporcje odwrócimy, nie. Policzyłem sobie nawet na kartce i wyszło że pętla wcale nie robi milionów powtórzeń. Np.:

width: 2179
height: 3276

dzielimy na 2

width: 2179 -> 1089 -> 544 -> 272 -> 137
height: 3276 -> 1638 -> 819 -> 409 ->204


Rozumiecie coś z tego? tongue.gif
wry
a nie lepiej policzyc stosunek wiekszego wymiaru do mniejszego i wysokosc nowego obrazka ustawic na 400 a jego szerokosc wyliczyc dzielac badz mnozac 400 przez wyliczony stosunek w zaleznosci od tego czy to wysokosc czy szerokosc byla wieksza
230005
Można i tak, ale wolałbym pozostać przy moim rozwiązaniu smile.gif.
redeemer
NWD 2179 i 3276 na pewno nie jest 2.
230005
Po zaokrągleniu jest smile.gif. Z resztą to był tylko przykład.
krowal
Możliwe, że twój serwer jest tak słaby, że nie radzi sobie z większymi plikami graficznymi, GD niestety nieźle zawala pamięć. Pętla raczej nie jest tu problemem - faktycznie dużo powtórzeń w niej nie będzie. Tak czy inaczej jest to najdziwniejsze rozwiązanie jakie widziałem, sam stosuje sposób który podał 'wry' i imo jest najlepszy.
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.