php 中断请求,如果HTTP请求被取消/关闭,PHP将自动杀死脚本

小编典典

正如@metadings指出的那样,php确实具有一个函数来检查连接中止,该连接名为connection_aborted()。如果连接终止,它将返回1,否则返回0。

在漫长的服务器端过程中,用户可能需要了解客户端是否与服务器断开连接或他已经关闭了浏览器,然后服务器才能安全地关闭该过程。

尤其是在应用程序使用php会话的情况下,如果即使客户端断开连接后,我们仍保持长时间运行,则服务器将对此会话无响应。来自同一客户端的任何其他请求都将等待,直到之前的进程完全执行。这种情况的原因是,进程运行时会话文件被锁定。但是,您可以专心地调用session_write_close()方法将其解锁。但这并非在所有情况下都是可行的,可能是需要在过程结束时向会话写一些东西。

现在,如果我们仅在循环中调用connection_aborted(),则无论连接是否关闭,它将始终返回0。

0表示连接不会中断。这是误导。但是,经过重新研究和实验,如果发现php 中的 输出缓冲区 是原因。

首先,为了检查是否中止,循环中的开发人员必须通过回显一些文本将一些输出发送到客户端。例如:

print " ";

由于该进程仍在运行,因此不会将输出发送到客户端。现在,要发送输出,我们需要刷新输出缓冲区。

flush ();

ob_flush ();

然后,如果我们检查是否中止,它将给出正确的结果。

if (connection_aborted () != 0) {

die();

}

以下是工作示例,即使您正在使用PHP会话,这也将起作用:

session_start ();

ignore_user_abort ( TRUE );

file_put_contents ( "con-status.txt", "Process started..\n\n" );

for($i = 1; $i <= 15; $i ++) {

print " ";

file_put_contents ( "con-status.txt", "Running process unit $i \n", FILE_APPEND );

sleep ( 1 );

// Send output to client

flush ();

ob_flush ();

// Check for connection abort

if (connection_aborted () != 0) {

file_put_contents ( "con-status.txt", "\nUser terminated the process", FILE_APPEND );

die ();

}

}

file_put_contents ( "con-status.txt", "\nAll units completed.", FILE_APPEND );

编辑07-APR-2017

如果有人在Windows上使用Fast-Cgi,则当使用以下代码终止连接时,他实际上可以从内存中终止CGI线程:

if (connection_aborted () != 0) { apache_child_terminate(); exit; }

2020-07-26

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过GET请求方式访问URL执行PHP点赞脚本,你可以按照以下步骤进行操作: 1. 创建一个PHP脚本,例如 `like.php`,将点赞逻辑添加到该脚本中。以下是一个示例代码: ```php <?php // 连接数据库 require_once 'path/to/your/db_connect.php'; // 获取文章ID和用户ID $articleId = $_GET['article_id']; $userId = $_GET['user_id']; // 检查文章ID和用户ID是否存在 if (!empty($articleId) && !empty($userId)) { // 执行点赞逻辑 // ... // 插入点赞数据 // ... // 更新文章的点赞用户数字段 // ... // 返回成功响应 echo '点赞成功'; } else { // 返回错误响应 echo '参数错误'; } ``` 2. 在上述代码中,你需要根据你的实际需求编写点赞逻辑,并执行插入数据和更新数据的操作。确保在代码中引入数据库连接文件或配置文件。 3. 将 `like.php` 文件上传到你的网站服务器的公开目录中,例如网站的根目录或一个子目录。 4. 使用浏览器或其他HTTP工具,访问该脚本的URL,并传递所需的参数。URL的格式通常为 `http://yourdomain.com/path/to/like.php?article_id=7056&user_id=123`,其中 `yourdomain.com` 是你的域名,`path/to/like.php` 是脚本的路径,`article_id` 和 `user_id` 是参数名,`7056` 和 `123` 是对应的参数值。 这样,当你访问该URL时,服务器将执行 `like.php` 脚本,并根据传递的参数执行相应的点赞逻辑。 请注意,通过公开访问URL执行脚本可能存在安全风险。确保只允许受信任的用户或IP地址访问该URL,并对代码进行适当的验证和过滤,以防止潜在的安全漏洞。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值