Edit report at https://bugs.php.net/bug.php?id=27297&edit=1

 ID:                 27297
 Comment by:         bedemiralp at gmail dot com
 Reported by:        jason at thinkingman dot org
 Summary:            set_time_limit() & register_shutdown_function()
 Status:             Open
 Type:               Feature/Change Request
 Package:            *General Issues
 Operating System:   *
 PHP Version:        *
 Block user comment: N
 Private report:     N

 New Comment:

I would like to propose another way to achieve same functionality:
Set_time_limit may throw an exception and we may catch it with a user defined 
exception handler (set_exception_handler)


Previous Comments:
------------------------------------------------------------------------
[2004-02-17 20:00:41] jason at thinkingman dot org

Description:
------------
Hi

I'd like to propose a modification to the SET_TIME_LIMIT() and/or the 
REGISTER_SHUTDOWN_FUNCTION() or perhaps, the creation of a related new function.

Currently when a page goes to timeout, all buffers get flushed, and all headers 
get sent.  In the interest of handling timeouts better; it would be ** GREAT ** 
if instead of all this flushing and finalization occuring, if one could also 
choose to not have the current script flush and finalize; but to remain in the 
script as if no timeout occurred at all.

This way, when a timeout occurs one can (for example) do redirects, or choose 
to manually flush and clear buffers, allowing for cleaner INCLUDE 
implimentations, and so on.

I'm thinking something like the following could be implimented:

set_time_limit(300, true);

Where 'true' means; don't end script; just kick event off stating that timeout 
has occurred; allowing register_shutdown_function() to be called, if defined... 
and continuing normal operation of script.

void set_time_limit ( int seconds, [bool: event notify only]); default = false.

// code example:

<?
      set_time_limit(300, true);

      define("NORMAL", 0);
      define("ABORTED", 1);
      define("TIMEOUT", 2);

      function onShutdownEvent() {
         switch(connection_status()) {
            case NORMAL:
               // code normal exit.
            break;
            case ABORTED:
               // code aborted exit.
            break;
            case TIMEOUT:
               header("location: http://timeout.php";);
               exit;
            break;
          }
      }
      
      register_shutdown_function('onShutdownEvent');

      while(1);
?>

Another example of the TIMEOUT switch might be:

case TIMEOUT:
   while(ob_get_level) ob_end_clean();
   if($dblink) mysql_close($dblink);

   include('./header.html');
   include('error.php');
   include('./footer.html');
   exit;
break;

Thanks,
Jason




------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=27297&edit=1

Reply via email to