I know Nginx has nothing to do with the PHP-FPM process, but I would much prefer if the PHP-FPM process died if a user aborts so it doesn't continue doing needless things or wasting resources. For PHP-FPM/Nginx the trigger_error
will happen regardless of user abort:
<?php
sleep(30);
trigger_error('Still happened?');
?>
How can I do user aborts for PHP-FPM? (if possible)
According to PHP Manual : Connection Handling
To set this behavior use
ignore_user_abort
ignore_user_abort(FALSE);
will abort running of PHP script after client disconnect.ignore_user_abort(TRUE);
will ignore the client disconnect and continues to run the script.In the second case, you may also want to use
set_time_limit
based on your needs to give your script enough time to accomplish the task.This setting has been tested in a
PHP-FPM/nginx
environment successfully.This is not implemented by php-fpm, more info here.
Setting
ignore_user_abort(FALSE)
only works when PHP sends data over the socket, not when it is busy calculating a response.Ideally, it should be implemented in php-fpm, but I don't think it will be very easy, given that PHP is mostly single threaded.
In emergency situations, you could kill all php-fpm processes with a broken connection. Assuming you have php-fpm listening on localhost:9000, this would work:
The settings linked by @YAAK don't always work with
nginx
. In my actual case it is not possible to stop the script, regardless what you do on PHP side.Playing on the nginx fastcgi parameter
fastcgi_ignore_client_abort
(default set tooff
) could help.Additionally, a manual solution (just for development environment) is to execute (on Linux):
sudo service php5-fpm restart
, so that the script will be blocked.