Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Maximum execution time of 60 seconds exceeded, 400 linijek, żadnej pętli
L_Devil
post 25.08.2005, 15:40:25
Post #1





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


400 linijkowy program bez żadnej pętli, rekurencji, itp. wykonuje się ponad 60 sekund. Jak po raz pierwszy to zauważyłem to mnie zatkało. Powstawiałem echo microtime co 25 linijek. Efekt? Okazało się że ponad 30 sekund wykonują się polecenia str_replace (około 75, każdy operuje na innych zmiennych więc ciężko wcisnąć w pętle, albo przekazać argumenty jako tablicę - trzeci i tak musi być stringiem), po czym dochodzimy do polecenia
  1. <?php
  2. /* Wyrzucenie wszystkiego co jest pomiędzy dwoma komentarzami html */
  3. $skin = substr($skin, 0, strpos($skin, '<!-- BEGIN stats_row -->') ) . substr($skin, (strpos($skin, '<!-- END stats_row -->')+23) );
  4. ?>
które blokuje już do końca czasu...
Nie mam pojęcia czego to jest wina, używam Windowsa XP, serwera Apache 2.0.52, php 5.0.4 - wszystko na domowym kompie. 1,7 ghz, 256 RAM, do tej pory nie było żadnych kłopotów...

Ten post edytował L_Devil 25.08.2005, 15:41:10


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
gloin
post 25.08.2005, 15:52:54
Post #2





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 25.06.2005

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


sprobuj moze cos takiego:

  1. <?php
  2.  
  3.  
  4. $skin = preg_replace('/<!-- BEGIN stats_row -->.*?<!-- END stats_row -->/s', '', $skin);
  5.  
  6.  
  7.  
  8.  
  9. ?>


niestety nie mam teraz jak tego przetestowac ale powinno zadzialac winksmiley.jpg

hehe sam jestem Ciekaw czy przyspieszy to Twoj skryp ...
daj znac jakie sa efekty smile.gif

Ten post edytował gloin 25.08.2005, 15:54:10
Go to the top of the page
+Quote Post
L_Devil
post 25.08.2005, 16:16:38
Post #3





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


W żaden sposób, nadal
Fatal error: Maximum execution time of 60 seconds exceeded

Szczerze wątpię czy to chodzi o polecenia, bo przecież i tak to moje to się powinno wykonywać góra 0.05 sekundy... Pytanie brzmi raczej - co w ustawieniach serwera/kompa/systemu może tak bardzo spowalniać php? Ewentualnie, jeżeli coś pominąłem, co w samym php może tak bardzo spowalniać jego prace?
Będę wdzięczny za wszelkie sugestie smile.gif

PS> Dopiero teraz się zorientowałem że to nie jest najlepszy dział do tego tematu... byłbym wdzięczny moderatorom za przeniesienie smile.gif


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
strife
post 25.08.2005, 16:49:17
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


Witam,

Ciekawe u mnie zwykle po 8-11 godzinach dzieją się dziwne rzeczy, ale najwyżej Apache'a mi wywala, a nie spowalnia. Może coś w procesach Windows'a XP blokuje Ci to np. dwa razy uruchomione mysql, miałem tak ostatnio i przez to miałem zawiechy, zobacz.

Pozdrawiam!


--------------------
Go to the top of the page
+Quote Post
L_Devil
post 25.08.2005, 18:54:21
Post #5





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Zarżnąłem parę(naście) procesów tła i generalnie było lepiej..... ale główny problem leżał gdzie indziej:

  1. <?php
  2. $stats_row = substr(
  3. $skin,
  4. (strpos($skin,'<!-- BEGIN stats_row -->') + 24),
  5. strpos($skin, '<!-- END stats_row -->') 
  6. );
  7.  
  8. ?>
Miało wyciąć wszytko co jest pomiędzy tagami, do późniejszych operacji str_replace. Po wykomentowaniu tego i zastąpieniu czymkolwiek skrypt wykonał się w 0.0416 sekundy biggrin.gif

Drugie pytanie - jak to zastąpić? Jak skopiować wszystko między tymi dwoma komentarzami html do zmiennej?

Ten post edytował L_Devil 25.08.2005, 19:00:31


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
gloin
post 26.08.2005, 10:19:14
Post #6





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 25.06.2005

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


po tych zmianach sprobuj wykorzystac to preg_replace'a, ktorego napisalem Ci wyzej, moze teraz zadziala to szybciej.
pozdrawiam
Go to the top of the page
+Quote Post
L_Devil
post 26.08.2005, 14:15:57
Post #7





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Tylko że, zdaje się, mówimy teraz o dwóch różnych linijkach smile.gif Ty mi napisałeś poprawkę do czegoś co, jak się okazało później, działało dobrze [mój błąd, przyznaję się bez picia], zaś spowalniające polecenie zawarłem w moim ostatnim poście. Wiesz może jak poprawić tą linijkę żeby działała szybciej? Jej celem jest skopiowanie wszystkiego pomiędzy dwoma komentarzami html do zmiennej biggrin.gif [skopiowanie, NIE usunięcie]

Ten post edytował L_Devil 26.08.2005, 14:16:49


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
FiDO
post 26.08.2005, 16:13:56
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Jak dlugi jest tekst w $skin ?

  1. <?php
  2.  
  3. preg_match('#<!-- BEGIN stats_row -->(.*)<!-- END stats_row -->#', $skin, $m);
  4. echo $m[1];
  5.  
  6. ?>


--------------------
Brak czasu :/
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 - 07:21