Avatar billede jette1 Nybegynder
21. maj 2008 - 15:58 Der er 15 kommentarer og
1 løsning

set_time_limit() har ingen effekt

Jeg har et stykke kode der benytter funktionen checkdnsrr().. problemet er at checkdnsrr afvikler i 180 sekunder, før den timer ud.

Jeg har forsøgt at sætte set_time_limit(10) i toppen af scriptet, men det virker ikke (safe_mode er 'Off').

Det undrer mig at en funktion som checkdnsrr ikke har en timeout parameter, men bortset fra det, findes der andre metoder til at aborte et script der tager for lang tid?
Avatar billede coderdk Praktikant
21. maj 2008 - 20:21 #1
set_time_limit(10) får scriptet til at time ud på 10 sekunder... Er målet at matche checkdnrrr() ? Så er det jo bare set_time_limit(180); eller lidt over ;P
Avatar billede coderdk Praktikant
21. maj 2008 - 20:23 #2
Men du kan jo prøve at bruge PEAR's Net_DNS klasse i stedet: http://pear.php.net/package/Net_DNS ?
Avatar billede jette1 Nybegynder
21. maj 2008 - 21:25 #3
Målet er at få afvikling af scriptet ned i tid... dvs. scriptet må max køre 10 sekunder. Men uanset hvad jeg sætter limit til, så kører den i 2 minutter, hvis domænet der checkes ikke eksisterer... og 2 minutter er for lang tid. Jeg ser helst at den stopper hvis den ikke har fundet noget i løbet af 10 sekunder.

Alle funktioner der kommunikerer over netværket, bør have en timeout funktion... Det går over min forstand at checkdnsrr ikke har en sådan... især hvis set_time_limit ikke respekteres.
Avatar billede olebole Juniormester
23. maj 2008 - 17:36 #4
<ole>

Jeg tror, det skyldes, I begge misforstår set_time_limit's virkemåde. Den sætter ikke maksimal time-limit til det tal der står i parentesen ... den forlænger som udgangspunkt den begrænsning, der står i php.ini med det tal, der står i parentesen  ;o)

Står der 180 i php.ini vil set_time_limit(10) altså give en maksimal eksekveringstid på 190 sekunder!

Skriver man set_time_limit(0), betyder det dog 'ingen tidsbegrænsning'.

/mvh
</bole>
Avatar billede olebole Juniormester
23. maj 2008 - 17:38 #5
- og jeg mener i øvrigt, at 30 sekunder er default i php.ini  =)
Avatar billede coderdk Praktikant
23. maj 2008 - 17:59 #6
olebole, Du har vist misforstået set_time_limits virkemåde :P Hvis PHP som default er 30 sek, og du kalder set_time_limit(30) inde i et script hvor den har kørt i 25 sekunder, ender du rigtignok op med at scriptet kører i 55 sekunder. Sætter du set_time_limit(30) i starten af scriptet, kører den kun 30 sek. Jf. http://dk2.php.net/set_time_limit

"Set the number of seconds a script is allowed to run. If this is reached, the script returns a fatal error. The default limit is 30 seconds or, if it exists, the max_execution_time value defined in the php.ini.

When called, set_time_limit() restarts the timeout counter from zero. In other words, if the timeout is the default 30 seconds, and 25 seconds into script execution a call such as set_time_limit(20) is made, the script will run for a total of 45 seconds before timing out."
Avatar billede olebole Juniormester
23. maj 2008 - 18:47 #7
Coder >> Du har helt ret! Jeg havde glemt 'detaljen', at det kun gælder, hvis funktionen kaldes på et senere tidspunkt  ;D
Avatar billede coderdk Praktikant
23. maj 2008 - 18:59 #8
olebole, Yep :) Det kan man nemt blive forvirret over, hvis man ikke er klar over det! :)
Avatar billede jette1 Nybegynder
23. maj 2008 - 19:39 #9
Jeg kalder set_time_limit(10) i toppen af dokumentet (allerførste linie), og så bør den ikke køre i mere end 10 sekunder vel?

Under alle omstændigheder så er min default limit 30, så 40 sekunder burde være maks, men den kører altså stadig i 2 minutter.
Avatar billede erikjacobsen Ekspert
23. maj 2008 - 19:42 #10
Jeg tror ikke PHP checker timelimit, når den er inde i en af sine funktioner, fx en netværksfunktion, der venter på noget. Det ville tage en hel del arbejde for maskinen.
Avatar billede jette1 Nybegynder
23. maj 2008 - 19:53 #11
Nej, det var også det svar jeg frygtede at få... Netop derfor ville det også være rart med en timeout parameter til sådan en funktion (ligesom fsockopen() har).
Avatar billede erikjacobsen Ekspert
23. maj 2008 - 19:55 #12
Jeg mener at http://pear.php.net/package/Net_DNS har tilsvarende funktioner, men jeg er ikke klar over om du kan sætte timeout på dem - læs selv ;)
Avatar billede coderdk Praktikant
23. maj 2008 - 20:25 #13
som erik er inde på, så er chkdnsrr sikkert blocking, så "gælder" time limit ikke...
Avatar billede jette1 Nybegynder
25. maj 2008 - 11:51 #14
coderdk, jeg vil gerne give dig point, da ud var den første til at nævne Net_DNS.... smid et svar...
Avatar billede coderdk Praktikant
25. maj 2008 - 19:07 #15
Ok, var det noget du kunne bruge? :)
Avatar billede jette1 Nybegynder
12. juni 2008 - 16:05 #16
Min arbejdsgiver har været på nakken af mig med andre ting, så jeg har ikke afprøvet det endnu... men det var det eneste reelle forslag jeg fik ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester