Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 忽略卷曲反应?_Php - Fatal编程技术网

Php 忽略卷曲反应?

Php 忽略卷曲反应?,php,Php,我有一个登录脚本,它将数据传递给另一个脚本进行处理。处理与登录脚本无关,但它会进行一些数据检查和日志记录,以进行内部分析 我使用cURL传递数据,但是cURL正在等待响应。我不想等待响应,因为这会导致用户必须等待分析完成后才能登录 我知道这个请求可能会失败,但我并不过分担心 我基本上希望它像一个多线程应用程序一样工作,其中cURL被用来派生一个进程。有没有办法做到这一点 我的代码如下: // Log user in $ch = curl_init(); curl_setopt($ch, CUR

我有一个登录脚本,它将数据传递给另一个脚本进行处理。处理与登录脚本无关,但它会进行一些数据检查和日志记录,以进行内部分析

我使用cURL传递数据,但是cURL正在等待响应。我不想等待响应,因为这会导致用户必须等待分析完成后才能登录

我知道这个请求可能会失败,但我并不过分担心

我基本上希望它像一个多线程应用程序一样工作,其中cURL被用来派生一个进程。有没有办法做到这一点

我的代码如下:

// Log user in

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://site.com/userdata.php?e=' . $email);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

// Redirect user to their home page
这就是它的全部功能。但目前它必须等待cURL请求得到响应


有没有办法发出get请求而不等待响应?

您不需要curl。只需打开一个套接字并发出一个手动HTTP请求,然后关闭该套接字。这也很有用,因为您可以使用自定义的用户代理,这样就不会扭曲日志记录

有关示例,请参见


显然,这不是“真正的”异步/分叉,但它应该足够快。

我最喜欢Matt的想法,不过为了加速您的请求,您可以 a) 只需提出一个头部请求(CURLOPT_NOBODY),速度明显更快(无响应体) 或
b) 只需将requesttime限制设置得非常低,但是我想您应该测试请求的中止是否真的比仅标题更快另一种可能性:既然显然不需要立即进行分析,为什么要立即进行分析?如果您的提供者允许cron作业,只需让curl调用的脚本将传递的数据快速存储在数据库或文件中,并让cron作业每分钟、每小时或每天执行一次处理脚本即可。或者,如果您不能做到这一点,请设置您自己的本地计算机,以便定期运行一个脚本,该脚本调用处理存储数据的远程计算机。

我突然想到,您所描述的是一个队列。您希望启动一系列脱机处理作业,并独立于用户交互进行处理。有很多系统可以做到这一点,尽管我特别推荐在PHP中使用。它比cron作业更可靠、更可控(例如,在出现故障时管理重试),而且在多台服务器之间分配处理也非常容易

调用URL并忽略响应的等效方法是在“tube”中创建新作业。它解决了您的特定问题,因为它或多或少会立即返回,并且没有响应体

在处理端,您不需要exec—在无限循环中运行CLI脚本,从队列请求作业并对其进行处理

你也可以看看

总的来说,这和GZipp的建议没有什么不同,它只是使用了一个专门为这种操作模式设计的系统


如果您有一个限制性的ISP,不允许您运行其他软件,那么可能是时候找一个新的ISP了-Amazon AWS将为您提供一年的免费EC2微实例。

您需要使用curl吗?
userdata.php
是否在同一台服务器上运行?如果是,那么在PHP命令行上调用后台PHP进程不是更好的选择吗?我的宿主提供程序不允许exec()