gpt4 book ai didi

php - 如果一段时间内没有新请求,有没有办法执行 PHP 脚本?

转载 作者:可可西里 更新时间:2023-11-01 13:01:12 44 4
gpt4 key购买 nike

如果在 1 秒内没有新请求,PHP 是否有办法采取一些行动(例如 mysql 插入)?

我想要实现的是确定从 IP 摄像机发送的图像序列的开始和结束。相机在检测到运动时发送一系列图像,并在运动停止时停止发送。我知道相机每秒拍摄 5 张图像(每 200 毫秒)。当超过 1 秒没有新图像时,我想将最后一张图像标记为序列的结尾,在 mysql 中插入一条记录,将 img 放在适当的文件夹中(同一序列中的所有其他 img 都已写入)并指示应用程序在该文件夹中制作图像的 MJPEG 剪辑。

现在我可以使用 Alternative PHP cash 确定序列中的第一张图像从上一个请求中保存引用时间,但问题是因为下一个图像序列可能会在数小时后发生,如果一段时间内没有请求,我无法指示 PHP 关闭序列,只有当新序列的第一个请求到达时。

我真的需要这方面的帮助。我的 PHP 几乎和我的英语一样烂...:)

我的问题的伪代码:

<?php
if(isset($headers["Content-Disposition"]))
{
$frame_time = microtime(true);
if(preg_match('/.*filename=[\'\"]([^\'\"]+)/', $headers["Content-Disposition"], $matches))
{ $filename = $matches[1]; }
else if(preg_match("/.*filename=([^ ]+)/", $headers["Content-Disposition"], $matches))
{ $filename = $matches[1]; }
}
preg_match("/(anpr[1-9])/", $filename, $anprs);
$anpr = $anprs[1];
$apc_key = $anpr."_last_time"; //there are several cameras so I have to distinguish those
$last = apc_fetch($apc_key);
if (($frame_time - $last)>1)
{
$stream = "START"; //New sequence starts
} else {
$stream = "-->"; //Streaming
};
$file = fopen('php://input', 'r');
$temp = fopen("test/".$filename, 'w');
$imageSize = stream_copy_to_stream($file, $temp); //save image file on the file system
fclose($temp);
fclose($file);

apc_store($apc_key, $frame_time); //replace cashed time with this frame time in APC

// here goes mysql stuff...

/* Now... if there is no new requests for 1 second $stream = "END";
calling app with exec() or similar to grab all images in the particular folder and make
MJPEG... if new request arrives cancel timer or whatever and execute script again. */

?>

最佳答案

您能否让每个请求在退出前休眠 1.5 秒,并作为最后一步检查序列时间戳是否已更新?如果是,退出并且什么都不做。如果没有,将序列保存到mysql。 (这将需要互斥量,因为每个 http 请求都将检查并尝试保存序列,但必须只允许一个。)

这种方法会将子文件/脚本合并到 php 代码中(单一代码库,更易于维护),但它可能会增加内存使用量(每个请求将在内存中停留 1.5 秒,这对于一个服务器繁忙)。

另一种方法是将子文件/脚本变成本地主机 http 服务器上的环回请求,可能占用的内存要小得多。每个帧都会触发一个请求以完成序列(再次类似地,使用互斥体)。

或者创建一个单独的服务调用来检查并保存所有序列,并让一个 cron 作业每隔几秒 ping 一次。或者让每个框架 ping 它,如果第二个请求可以检测到该服务已经在运行,它可以退出。 (在 APC 缓存中共享状态)

编辑:我想我只是建议了上面所说的 bytesized。

关于php - 如果一段时间内没有新请求,有没有办法执行 PHP 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27096547/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com