Php 结束卷曲请求

Php 结束卷曲请求,php,curl,http-headers,Php,Curl,Http Headers,我正在尝试制作一种PHP机器人。其思想是必须创建名为a.php和b.php的php文件。a、 php做了一些事情,然后休眠30秒,调用b.php,b.php结束Http请求,进行一些处理,然后调用a.php结束Http请求,依此类推 现在唯一的问题是如何结束使用cURL进行的HTTPReqest。我尝试了以下代码: <?php ob_end_clean(); header("Connection: close"); ignore_user_abort(); // optional ob_s

我正在尝试制作一种PHP机器人。其思想是必须创建名为a.php和b.php的php文件。a、 php做了一些事情,然后休眠30秒,调用b.php,b.php结束Http请求,进行一些处理,然后调用a.php结束Http请求,依此类推

现在唯一的问题是如何结束使用cURL进行的HTTPReqest。我尝试了以下代码:

<?php
ob_end_clean();
header("Connection: close");
ignore_user_abort(); // 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');

基于对您的问题的新理解。您正在创建一个系统,该系统每30秒检查一个远程URL,以监视内容片段。为此,我推荐一个CRON,它可以是基于服务器的:如果主机不允许,也可以是基于web的:(例如)。

在这种情况下,如果web服务器请求,PHP脚本将在上下文中运行,因此您不能停止与web连接的对话,然后继续执行操作,这就是我认为你试图在连接关闭时所做的

您在脚本末尾看到输出的原因是,在脚本末尾,PHP将调用隐式刷新(请参阅手册中的ob_implicit_flush),但您可以通过结束PHP脚本来关闭与浏览器的连接

解决方法:

您可以使用set_time_limit来扩展执行限制。不要使用零。在后处理脚本上说“花你所需要的所有时间”很有诱惑力,但这种方式存在疯狂和痛苦的系统管理员,另外请记住,你仍然在使用curl的timeout stopwatch(尽管你可以将其扩展为一个选项)。设置时间限制(5)会给你更多的5秒钟,所以周期性地这样做可以让你进行后期处理,但如果你小心的话,仍然可以保护你免受无限循环的影响。在apache请求上下文中没有执行限制的Infinite循环也可能使您不受系统管理员的欢迎

您可以在应用程序中构建一个shell脚本,将其保存到磁盘,在后台执行该脚本,然后将其自身删除。这样,它将在web请求上下文之外运行,如果下次执行请求时脚本仍然存在,则可以知道其他处理仍在进行。对于可能需要比执行间隔更长时间的事情,要非常小心,因为那样会导致悲伤和更痛苦的系统管理员。不过,如果你没有先和我谈一下,就这样做了,那么你就会被我的托管环境甩了,因为这是一个可怕的黑客行为,可能会有很多安全问题


但是,您似乎试图在一个系统上运行常规的批处理过程,而他们不希望您这样做——或者他们会让您访问cron——因此,您最好、最可靠的方法是找到一个真正支持您尝试执行的操作的主机。

我不知道cURL涉及到什么。此外,如果您的主机发现您正在使两个PHP脚本在一个循环中相互调用,它将非常不高兴。我不知道为什么要在
时关闭连接。此时,浏览器已关闭与web服务器的连接。现在我重读了你的问题,为什么不尝试关闭连接,将数据放入数据库,并让一个单独的线程(脚本)执行作业。asp.net是我比较擅长的。糟糕的是,在脚本之间发送请求时使用了phpcURL。我不允许在服务器上执行脚本。退出关闭脚本。我要做的是结束两个脚本之间的连接,这样一个脚本就不必等待另一个脚本完成,否则我将创建一个无限循环。我不想关闭脚本,只是结束它的输出,让浏览器知道在脚本继续处理时关闭它的连接。我也不能使用无限while循环/goto循环,php脚本有一个由我的主机设置的30秒超时限制。我在使用Google App Engine时遇到了类似的问题,它只有30秒的窗口。现在,从一个脚本到另一个脚本的转换可能会被计算在同一个请求中。您是否考虑过使用:在脚本之间导航。嗯,这需要某种类型的客户端来运行它,时不时地重新加载页面。我正在尝试创建一个自动化系统,每30秒自动记录一个站点上包含的数字,仅从我的服务器记录。因此,您每30秒抓取一个数字(并存储它?)。您需要一个CRON作业,无论是在服务器上还是在基于web的服务上。这正是我需要的。基于web的cron服务。谢谢你的帮助。好主意。我一定会调查所有的。