Re: Make set_time_limit() timeout a catchable fatal error
| From: | Ferenc Kovacs | Date: | Wed, 09 Mar 2011 14:39:54 +0000 |
| Subject: | Re: Make set_time_limit() timeout a catchable fatal error | ||
| References: | 1 2 3 4 5 6 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-51635@lists.php.net to get a copy of this message | ||
no, it only means that you cant return to the original scope and continue
the execution of your script.
as you can't throw exceptions also, because your code is running without a
stack frame.
you can check out the https://github.com/Tyrael/php-error-handler
its a
little class which operates with register_shutdown_function to allow
handling non-recoverable errors before halting.
there are too many case in the php src where non-recoverable errors are
triggered for non fatal problems.
that should be changed, so open a bugreport if you think you found one,
where isn't neccessary to halt the execution.
Tyrael
On Wed, Mar 9, 2011 at 3:30 PM, Hannes Landeholm <landeholm@gmail.com>wrote:
> You mean the shutdown function is called and 1 nanosecond later PHP crashes
> so you don't have time to do anything?
>
> ~Hannes
>
> On 9 March 2011 15:27, David Muir <davidkmuir@gmail.com> wrote:
>
> > Hmm, I think I worded that poorly.
> > A function registered with register_shutdown_function does execute when
> > the max_execution_time is exceeded.
> > What it doesn't let you do is to recover in the same way an error
> > handler would let you.
> >
> > David
> >
> > On 09/03/11 22:56, Hannes Landeholm wrote:
> > > I second making time limit reached catchable. All non catchable fatal
> > errors
> > > are a problem for me. I need to handle problems gracefully to ensure
> the
> > > stability of production systems instead of PHP just killing itself
> > without
> > > warning. I just reported a similar issue:
> > > http://bugs.php.net/bug.php?id=54195
> > >
> > > A simple way to implement this would be to register a function that
> would
> > be
> > > called N seconds before the script would timeout.
> > >
> > > register_timeout_handler(2, function() { die("PHP timed out."); });
> > >
> > > It would be called just as a shutdown function - in fact I'd like to
> use
> > the
> > > same function as my shutdown function and get the error with
> > > error_get_last(). Of course set_time_limit(0) could be used in this
> > function
> > > to prevent the timeout of the timeout handler. This does not "prevent"
> > > timeout since set_time_limit could have been called by the script
> before
> > the
> > > timeout anyway.
> > >
> > > On that note I also miss a function which returns the time the script
> can
> > > keep running for. If that calculate needs to be calculated to
> implemented
> > to
> > > implement this, why not make the value available to the PHP script?
> > >
> > > ~Hannes
> > >
> > > On 9 March 2011 02:30, David Muir <davidkmuir@gmail.com> wrote:
> > >
> > >> Although it doesn't let you recover from a timeout, you could use
> > >> register_shutdown_function to gracefully exit after a fatal error.
> > >>
> > >> register_shutdown_function(function(){
> > >> $error = error_get_last();
> > >> if($error && $error['type'] === E_ERROR){
> > >> echo 'PHAIL! Oh noes, something went wrong!';
> > >> // do whatever else you need to do before quitting
> > >> }
> > >> });
> > >>
> > >> Cheers,
> > >> David
> > >>
> > >> On 08/03/11 22:39, Pierre Joye wrote:
> > >>> hi,
> > >>>
> > >>> is not the goal of this setting to prevent that a script runs longer
> > >>> than a given time? A catchable error will prevent that to happen.
> > >>>
> > >>> On Tue, Mar 8, 2011 at 2:05 PM, Sebastian Bergmann <
> sebastian@php.net>
> > >> wrote:
> > >>>> Could set_time_limit() be changed in such a way that it triggers a
> > >>>> catchable fatal error instead of a fatal error? Thanks!
> > >>>>
> > >>>> --
> > >>>> Sebastian Bergmann Co-Founder and Principal
> > >> Consultant
> > >>>> http://sebastian-bergmann.de/
> > >> http://thePHP.cc/
> > >>>> --
> > >>>> PHP Internals - PHP Runtime Development Mailing List
> > >>>> To unsubscribe, visit:
> > >>>> http://www.php.net/unsub.php
> > >>>>
> > >>>>
> > >>>
> > >>
> > >> --
> > >> PHP Internals - PHP Runtime Development Mailing List
> > >> To unsubscribe, visit:
> > >> http://www.php.net/unsub.php
> > >>
> > >>
> >
> >
> > --
> > PHP Internals - PHP Runtime Development Mailing List
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> >
>