Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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 在“中运行函数”;背景“; 物体: 实物买卖 n对象用户将参与对象销售 每个用户都可以创建一个对象代理 每个代理将为对象销售生成n个对象许可证(有时,在某些条件下) 目标:_Php - Fatal编程技术网

Php 在“中运行函数”;背景“; 物体: 实物买卖 n对象用户将参与对象销售 每个用户都可以创建一个对象代理 每个代理将为对象销售生成n个对象许可证(有时,在某些条件下) 目标:

Php 在“中运行函数”;背景“; 物体: 实物买卖 n对象用户将参与对象销售 每个用户都可以创建一个对象代理 每个代理将为对象销售生成n个对象许可证(有时,在某些条件下) 目标:,php,Php,创建一个功能,当销售只剩下5秒结束时,将检查此销售的所有代理,并发布未对此销售进行许可最长时间的代理的许可 这是需要持续运行的东西,因为该代理将负责替换发布许可证的用户,允许他们在拍卖期间离开 我的问题 更新(我的问题不够清楚): 在销售的索引页面,我有一个javascript脚本,用于计算销售剩余的时间,这样我就可以知道销售何时应该调用该函数来检查代理并进行出价,但我的新手问题是:如果我在该页面调用该函数,这是否只有在用户打开该页面时才起作用?或者如果他关闭了这个函数就不会被调用了?因为我需要

创建一个功能,当销售只剩下5秒结束时,将检查此销售的所有代理,并发布未对此销售进行许可最长时间的代理的许可


这是需要持续运行的东西,因为该代理将负责替换发布许可证的用户,允许他们在拍卖期间离开

我的问题 更新(我的问题不够清楚):

在销售的索引页面,我有一个javascript脚本,用于计算销售剩余的时间,这样我就可以知道销售何时应该调用该函数来检查代理并进行出价,但我的新手问题是:如果我在该页面调用该函数,这是否只有在用户打开该页面时才起作用?或者如果他关闭了这个函数就不会被调用了?因为我需要这仍然工作,即使用户关闭网页。 DaMacc已经回答说这不起作用

更新(2010年1月5日)

我已经创建了这个函数。该功能将查找距离结束还有5秒的所有销售,然后搜索所有代理,然后从最长未对所选销售进行许可的代理处出价。现在我需要每秒调用这个函数。我本来打算使用cron,但是cron有1分钟的边界。我需要这个函数在服务器上运行,而不依赖于拥有代理的用户

有什么建议吗

附言:有些拍卖网站有我正在尝试做的这种投标代理,我可以参考一个作为例子。。。但我不确定我是否被允许在这里这样做…:


谢谢。

创建您的普通函数,以执行您需要执行的任何操作,然后使用类似的方法将其设置为每X时间运行一次的任务

编辑以展开评论

在这种情况下,您最好结合一些解决方案。如中所述,我建议您使用cron每分钟调用一个脚本,并在该脚本中以循环方式运行流程

需要考虑的一些事项:

  • 每次执行需要多长时间
  • 您是否需要将_sleep_计时到每个循环结束,或者您的脚本运行时间是否超过1秒,在这种情况下,您需要从cron多次调用脚本
  • 确保跟踪脚本已经运行了多长时间,因为您不希望出现这样的情况:由于称为“前一分钟”的脚本尚未完成,每一分钟都占用越来越多的资源
在脚本开始时,记下当前时间,然后在每个循环开始时,检查脚本开始后是否已经过了一分钟,如果已经过了,请退出脚本(由于cron的作用,现在将有另一个脚本接管)


希望这有帮助。如果这没有多大意义,请告诉我,我会尝试澄清一下。

你有没有考虑过使用Javascript来解决这个问题?如果您有某些事件触发了运行此检查的需要,那么这可能是一种方法

您可以在每个页面上编写一个js函数,该函数使用
setInterval/clearInterval
javascript函数每隔几秒钟向服务器发送一个AJAX请求,并根据是否满足条件向浏览器发送不同的响应。(不过,带宽可能是一个问题)


为此,我建议研究并使用它的AJAX函数。

使用队列,如Zend_队列:。只需运行一个(或两个)无限循环并发送从web应用程序发送的消息

我想知道这是否就是您要寻找的:

function execInBackground($cmd) {
    if (substr(php_uname(), 0, 7) == "Windows") {
        pclose(popen("start /B ". $cmd, "r"));
    } else {
        exec($cmd . " > /dev/null &");
    }
}
然后,您可以使用以下方法在后台启动php进程:

execInBackground("php path/to/file.php " . $param01 . " " . $param02);
// where $param01 and $param02 are optional values that you may want to
// send to the page. Equivalent to GET parameters of URL.
// You can include as many parameter values as you want.

//Example:
execInBackground("php automation/bidChecker.php daniel 53.25");
// automation/bidChecker.php is the file to be executed
// daniel can be the username
// 53.25 can be the bid value
$param01 = $argv[1]; // assigns daniel as value
$param02 = $argv[2]; // assigns 53.25 as value
在后台运行的PHP文件中,可以使用以下方法访问参数值:

execInBackground("php path/to/file.php " . $param01 . " " . $param02);
// where $param01 and $param02 are optional values that you may want to
// send to the page. Equivalent to GET parameters of URL.
// You can include as many parameter values as you want.

//Example:
execInBackground("php automation/bidChecker.php daniel 53.25");
// automation/bidChecker.php is the file to be executed
// daniel can be the username
// 53.25 can be the bid value
$param01 = $argv[1]; // assigns daniel as value
$param02 = $argv[2]; // assigns 53.25 as value
当用户执行某些操作时,可以从脚本运行中启动此过程。即使用户离开页面,它也会继续运行,直到您通过编程中断操作为止


我真的不知道这是否是你想要的。如果是这样,您现在就知道了。

但我的大问题是,我不知道需要调用函数的频率。只有在以下情况下,每个代理对象才会调用此函数:最后一个对销售进行许可的用户不是创建此代理的用户,并且对象销售的当前时间和限制日期之间的差异等于5秒。由于php没有多线程或恒定的后台进程,因此这是正确的方法。只需将您的objects sales放入数据库并运行一个特殊的程序,该程序将在数据库中查询X天内到期的所有项目并处理信息。你可以每分钟运行一次脚本,如果没有需要处理的对象,它将什么也不做。这是一个需要持续运行的东西,因为这个网站的目标将是一个拍卖网站,而这个代理将负责替换用户进行竞价,允许他们在拍卖期间离开。会有很多商品在出售,哪一个有不同的时间结束,所以每分钟运行一个脚本是不起作用的:然后每秒钟运行一次?下面的问题可能会让你感兴趣:它确实只会在用户打开页面时起作用,所以scythah的答案就是你的解决方案。依靠客户来完成这样的基本任务是一个错误。@gnud,你是对的。在他更新问题之前,我回答了这个问题。我当时不太清楚他想干什么