lørdag, januar 23, 2021

Maximum Execution Time Error i PHP

Daily Rush Debat Programmering Maximum Execution Time Error i PHP

  • Forfatter
    Emne
  • #0

    hausner
    Moderator
    17.187 indlæg
    Offline

    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

Viser 13 kommentarer - 1 til 13 (af 13 i alt)
  • Forfatter
    Kommentarer
  • #1

    Krissam
    Bruger
    2.009 indlæg
    Offline

    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.

    #2

    Barnebarn
    Bruger
    2.075 indlæg
    Offline

    http://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!

    #3

    hausner
    Moderator
    17.187 indlæg
    Offline

    #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

    #4

    Ni
    Bruger
    1.070 indlæg
    Offline

    #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?

    #5

    Barnebarn
    Bruger
    2.075 indlæg
    Offline

    Det 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!

    #6

    hausner
    Moderator
    17.187 indlæg
    Offline

    #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

    #7

    Munter
    Bruger
    2.473 indlæg
    Offline

    Det 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

    #8

    hausner
    Moderator
    17.187 indlæg
    Offline

    #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

    #9

    Munter
    Bruger
    2.473 indlæg
    Offline

    #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

    #10

    Ni
    Bruger
    1.070 indlæg
    Offline

    #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?

    #11

    Munter
    Bruger
    2.473 indlæg
    Offline

    Alternativt 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

    #12

    hausner
    Moderator
    17.187 indlæg
    Offline

    #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

    #13

    hausner
    Moderator
    17.187 indlæg
    Offline

    #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

Viser 13 kommentarer - 1 til 13 (af 13 i alt)
  • Du skal være logget ind for at kommentere på dette indlæg.