Avatar billede cronck Nybegynder
20. juli 2011 - 12:04 Der er 5 kommentarer og
1 løsning

oci_execute bliver ikke stoppet af set_time_limit

Jeg har oprettet en function ved navnet shutdown() som bl.a. lukker forbindelsen til en Oracle database.
Jeg har registreret denne med register_shutdown_function('shutdown').

Funktionen logger i en fil inden jeg starter en query mod min database, med det samme bagefter den er afviklet, og når shutdown funktionen bliver kaldt.

Mit problem er at jeg kan se i min log-fil at min shutdown funktion først bliver kaldt, op til efter 30 sekunder efter min query er sat igang, på trods af at set_time_limit for eks. er sat til 5.

Hvordan får jeg PHP's "max execution time" til at stoppe oci_execute hvis den tager for lang tid, og ikke først stoppe scriptet når den query er kørt færdig?
Avatar billede olebole Juniormester
20. juli 2011 - 18:25 #1
<ole>

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.

http://ee.php.net/manual/en/function.set-time-limit.php

/mvh
</bole>
Avatar billede olebole Juniormester
20. juli 2011 - 18:28 #2
Det kommer altså an på, hvornår du kalder set_time_limit - og serveren må ikke være sat i safe_mode
Avatar billede cronck Nybegynder
03. august 2011 - 19:14 #3
Serveren er ikke i safe_mode, og kalder time limit i starten af min kode.

shutdown bliver først kaldt af time_limit når oci_execute er kørt færdig - Om så den tager 40 eller 400 sekunder.

Det ødelægger lidt meningen med det, da jeg netop vil "dræbe" en forbindelse til oracle-databasen, hvis det tager for lang tid at køre den query.

Beklager det sene svar - Har været på ferie. :)
Avatar billede olebole Juniormester
03. august 2011 - 23:53 #4
Måske, det bare er mig, men jeg kan stadig ikke få hovede eller hale på, hvad det præcist er, du gør - og/eller i hvilken rækkefølge
Avatar billede cronck Nybegynder
24. august 2011 - 09:03 #5
Starten af min kode
-----------------------

set_time_limit(30);

***********************
Midt i min kode - Tager typisk 0.3 til 0.5 sek. at komme til dette punkt
-----------------------

$stid = oci_parse($conn, $oQuery);
oci_execute($stid);

while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
  // Rækkerne bliver parset
  $oRowCount++;
}

debugLog('Query ended.');

***********************
Hvis oci_execute($stid) tager mere end for 30 sekunder, stopper Apachen ikke afviklingen af scriptet før denne er kørt, selvom det tager for eks. 900 sekunder for Oracle DB'en af afvikle den query.
Istedet vælger Apachen at stoppe scriptet umiddelbart lige efter oci_execute, altså, lige inden while løkken. :)
Avatar billede cronck Nybegynder
02. september 2011 - 09:49 #6
Jeg har mere eller mindre opgivet dette. Lukker spørgsmålet. :)
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