registershutdown函数在index.php的开头被调用


register shutdown function is called at the beginning of index.php

我正试图在用户关闭浏览器窗口后生成一个文件。当index.php开始运行时,会调用register_shutdown_function("shutdown"),并将文件生成为单独的shutdown()。但是一旦窗口关闭,函数shutdown()将不会被调用。为什么一开始就调用shutdown()?为什么它不会在关闭时被调用
index.php

     <?php
      session_start();
      register_shutdown_function('shutdown');
      ignore_user_abort(TRUE);
      function shutdown(){
         $handle = fopen('ABORT.txt', 'a');
         fwrite($handle, "file content");
         fclose($handle);
    }
 ?>

我想知道这是否是我必须在php.ini中更改的内容。如果有任何帮助,我将不胜感激
更新
我可以使用connection_abored()来知道用户何时断开连接吗?正如你所看到的,我是PHP的新手。我需要删除用户创建的一些文件,一旦它们断开连接,并且没有正确注销(例如断电)。

    <?php
      session_start();
      if(connection_aborted())
         shutdown();
      ignore_user_abort(TRUE);
      function shutdown(){
         $handle = fopen('ABORT.txt', 'a');
         fwrite($handle, "file content");
         fclose($handle);
    }
 ?>

您需要订阅卸载事件,或者可能订阅beforeunload事件:https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload

您需要的是在服务器上用PHP编写一个AJAX端点来捕获您需要的信息,并在客户端上使用javascript在卸载时发送给它。卸载事件可以用来可靠地触发ajax请求吗?

您不能断开与PHP的连接。HTTP是一个无状态协议,您不需要保持连接的打开状态。你向PHP请求一个页面,它会给你这个页面,然后连接就关闭了。如果您想要另一个页面,请打开另一个连接。每个请求都是独立的。所以,不,你不能使用connection_aborted。这样做的目的是检测在传输过程中连接是否断开。

如果您的意图是检测到浏览器在传输过程中关闭,然后继续工作,那么您可以使用ignore_user_abort来防止脚本被取消,然后在服务器端进行自己的清理。http://php.net/manual/en/features.connection-handling.php是你需要阅读的地方。