PHP脚本可以欺骗浏览器,使其认为该HTTP请求了吗?(Can a PHP script trick

2019-07-18 07:40发布

我首先配置我的脚本甚至可以运行后HTTP请求结束

 ignore_user_abort(true);

然后冲洗掉一些文本。

 echo "Thats all folks!";
 flush();

现在,我怎么可以欺骗浏览器,使其认为该HTTP请求了吗? 这样我就可以继续做我自己的工作,而不显示“页面加载”浏览器。

 header(??) // something like this?

Answer 1:

以下是如何做到这一点。 你告诉浏览器输出的第N个字符阅读,然后关闭连接,而你的脚本保持运行,直到它完成。

<?php
ob_end_clean();
header("Connection: close");
ignore_user_abort(true); // optional
ob_start();
echo ('Text the user will see');
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush();     // Will not work
flush();            // Unless both are called !

// At this point, the browser has closed connection to the web server

// Do processing here
echo('Text user will never see');
?>


Answer 2:

头是不行的(他们是头,所以他们来)

我不知道有什么方法来关闭而不终止该脚本的HTTP连接,虽然我想有这样做的一些模糊的方式。

告诉我们你想要的请求完成后,将帮助我们提供更好的建议做什么。

但是总体来说,我会考虑下列之一:

1)执行一些简单的命令行脚本(使用EXEC()),看起来像:

#!/bin/sh
php myscript.php <arg1> <arg2> .. <argN> &

然后踢的关从喜欢你的HTTP绑定脚本:

<?PHP
exec('/path/to/my/script.sh');
?>

要么:

2)写另一个程序(可能连续运行的后台程序,或者只是一些脚本正在不断cronned经常),并找出你的请求的代码如何传递指令。 可能您排队的工作数据库表,或试图使其与某种类型的平面文件的工作。 你也可以有你的基于Web的脚本调用,导致外的请求,你的脚本排队一些工作,一些命令行命令。

在这一天结束时,你不希望你的脚本保持HTTP请求后执行。 假设你正在使用mod_php的,这意味着,直到脚本结束,你会被占压的Apache进程。



Answer 3:

也许php.net手册页在这个特别的评论将帮助: http://www.php.net/manual/en/features.connection-handling.php#71172



Answer 4:

理论上,如果HTTP 1.1保持活动已启用,客户端接收字符的从服务器预计量,应该把它作为响应的结束和继续呈现网页(同时保持连接仍处于打开状态。)尝试发送这些报头(如果你不能让他们另一种方式):

Connection: keep-alive
Content-Length: n

其中n的是,您在响应体发送的字符数(输出缓冲可以帮你算这一点。)我很抱歉,我没有测试了这一点自己的时间。 我只是扔在的情况下,它的工作建议。



Answer 5:

做到这一点,最好的方法是使用输出缓冲。 PHP发送头当它准备好了,但如果你换你的输出到浏览器与ob_ *您可以控制头的每一步。

您可以在缓冲区举行一个渲染页面,如果你想和,直到太阳在中国出现发送头。 这种做法就是为什么你会看到很多开放的<?php标签,但现在没有结束标记。 它使脚本提前发送任何标题,因为可能存在一些包括考虑。



文章来源: Can a PHP script trick the browser into thinking the HTTP request is over?