Maximum Execution Time Error i PHP
Daily Rush › Debat › Programmering › Maximum Execution Time Error i PHP
- Dette indlæg indeholder 13 kommentarer, har 5 deltagere og blev senest opdateret af
hausner for 14 år, 8 måneder siden.
- ForfatterEmne
- 24/05/2006 kl. 14:14#0
Jeg laver nogle relativt tunge beregninger i PHP som nogle gange resulterer i at jeg rammer loftet på PHP’s Maximum execution time.
Det jeg gerne vil vide er om jeg på en eller anden måde kan fange sådan en fejl således at systemet ikke exit’er.
Dvs. At PHP springer en del af funktionaliteten over hvis det tager for lang tid og fortsætter med at udføre resten af koden.
Reelt drejer det sig vel om at kunne sætte maximum execution time for dele af koden i stedet for den komplette kode.
edit: typos
Planter er fascinerende
- ForfatterEmne
- ForfatterKommentarer
- 24/05/2006 kl. 14:35 #1
en måde det kunne gøres på er:
1)beregning 1
2)automatisk viderestilling til side nr 2
3)side nr 2 laver flere beregninger
4)automatisk viderestilling til side nr 3
5)…men du kan sætte maximum execution time i php.ini iirc.
24/05/2006 kl. 14:38 #2http://dk.php.net/set_time_limit
Jeg er altid frisk på en diskussion. Vi kan starte med at tage udgangspunkt i det du mener - jeg mener så det modsatte!
24/05/2006 kl. 15:25 #3#1
Det har jeg også gjort i den udstrækning det er muligt. Men det er stadig muligt for brugeren at konfigurere sig ud i nogle store beregninger som skal kunne være på den samme side. Desværre. Ellers er det også den mest hensigtsmæssige måde.
#2
Det var godt nok ikke det jeg havde forestillet mig, men det kan også gå.Planter er fascinerende
24/05/2006 kl. 15:35 #4#2
Det svarer jo ikke på hans spørgsmål, det er for et helt script.#0
Er du sikker på at du ikke har fat i det forkerte medie? Du burde måske flytte dine beregninger til noget andet, det lyder ikke som typisk “websideadfærd” at udføre tunge beregninger. Det er jo trods alt bare et scriptsprog. Hvad er det du skal lave?24/05/2006 kl. 15:52 #5Det ser ikke ud til, at man i php kan fange fatal errors – hvilket din fejl jo er
Så enten er du nød til at give mere tid til dine scripts – eller at fintune/optimere dem, så de ikke tager så lang tid.
Nu koder jeg ikke selv php – men asp – så det bedste jeg har fundet frem er denne side:
http://www.php.net/manual/en/ref.errorfunc.php
Hvis du er super haj – og det kører på din egen server kan du måske lave en windows service, som kun lytter efter fatal error exceptionen og overtager derfra
Jeg er altid frisk på en diskussion. Vi kan starte med at tage udgangspunkt i det du mener - jeg mener så det modsatte!
24/05/2006 kl. 15:59 #6#4
Jeg arbejder med nogle store inet (nogle kalder dem scopes. Et eksempel kunne være 10.0.0.0/12).
Dele af inettet kan være optaget og jeg skal lave noget funktionalitet der kan lave en liste over hvad der er optaget og hvad der er ledigt. Problemet opstår hvis eksempelvis 10.0.1.0/30 er taget. Så er det mange checks der skal løbes igennem, idet inet’et kun dækker over 4 ipadresser. Når der så er omkring 10.000 eller flere ip-adresser i det inet der skal checkes bliver hurtigt nogle store beregninger.
#5
Det lyder heller ikke optimalt at skulle recover fra en fatal error. Jeg er mere og mere tilbøjelig til at redesigne beregningerne, og se om jeg enten ikke kan tvinge det ud over flere sider, eller simpelthen optimere på selve beregningerne.Planter er fascinerende
24/05/2006 kl. 16:07 #7Det lyder som noget der kan løses med et broadcast ping, eller et ping til hver IP adresse. Kan du ikke bare køre det i tråde så du ikke forlænger eksekveringstiden drastisk?
"Everybody wants to laugh but nobody wants to cry, Everybody wants to go to heaven... but nobody wants to die!"--Larry Howard
24/05/2006 kl. 16:09 #8#7
well. SNMP er ofte deaktiveret i de dele af netværket og en firewall lukker ofte også af for ping. Så det duer ikke rigtig.Tråde? På hvilken måde? Det er da ikke muligt manuelt at starte tråde op i PHP?
Planter er fascinerende
24/05/2006 kl. 16:22 #9#8
PHP er så også et oplgat dårligt valg til den slags ting, som det også er nævnt før.Skift over til noget som er lidt stærkere med netværksfunktionalitet. C, Java, Perl eller hvad der nu lige ligge på en standard unix box
"Everybody wants to laugh but nobody wants to cry, Everybody wants to go to heaven... but nobody wants to die!"--Larry Howard
24/05/2006 kl. 16:24 #10#7+8
Hmm, fjollet ide:Du kunne måske lave en mellemside der detekterede hvor stort et range du skulle undersøge, som så sendte videre til din udregnings/visningsside. Udregningssiden kunne så være et frameset alt efter rangets størrelse, ville hver side i de enkelte frames så ikke køre i hver sin tråd?
Det er en mysti-fystisk løsning jeg ikke selv ville vælge, men jeg laver heller ikke PHP
Kan du ikke nøjes med at finde de første X adresser der kan bruges?
24/05/2006 kl. 16:32 #11Alternativt kunne du sætte et javascript op på modtagersiden som hentede resultatet for hver enkelt IP via xmlhttprequest. Så laver php kun en forespørgsel ad gangen.
Ganske vist vil dette nok forlænge kørselstiden en anelse.
"Everybody wants to laugh but nobody wants to cry, Everybody wants to go to heaven... but nobody wants to die!"--Larry Howard
24/05/2006 kl. 16:56 #12#11
En forlængelse duer ikke rigtig. Det kan sgu heller ikke passe at den ikke kan nå at lave checkene på max 30 sekunder. Jeg må kunne lave noget refactoring.
Planter er fascinerende
27/05/2006 kl. 22:41 #13#7
Tak for dit input. Det gav mig en ide til en løsning som viste sig at være langt hurtigere, og beregningerne kan nu snildt laves på under 30 sekunder.
Planter er fascinerende
- ForfatterKommentarer
- Du skal være logget ind for at kommentere på dette indlæg.
























