Reputation: 1146
We currently have an error catching script for all our PHP sites. This script uses a combination of set_error_handler & register_shutdown_function to catch all errors that occur including Memory exhaustion errors then sends us an email so that we can respond and fix the error.
Unfortunately in case of memory exhaustion errors the script has no more memory and can't complete sending the email. I've tried updating the memory limit in the error handler function so the script can complete the error but this doesn't seem to work. Is there a way to force PHP to dump it's memory so that there is enough to send the error email? Or perhaps to detect and unset the largest memory items?
EDIT: I should clarify that I'm using PHPMailer to send an email. I'm looking into using just mail in the case of a memory exhaustion error.
Upvotes: 1
Views: 331
Reputation: 1146
Looks like if I check for the exhaustion error and just use mail(), and don't create any variables, at the very top of the error_handler then PHP will send an email with no issue.
I also have to be sure to preset anything that I wish to include in the email with the exception of anything passed to the error handler.
Upvotes: 0
Reputation: 522042
By definition, an out-of-memory error cannot be handled with more code. Any additional function call requires the allocation of more memory just for the function call itself, which is not possible, because you're out of memory.
The best option may be a cron job that checks the PHP error logs and mails out-of-memory errors on a regular basis.
Upvotes: 1