我有一个似乎是一个复杂的问题。
我需要在一个数据库中查询列表,此列表包含文章ID#。一旦我获得列表,我将构建一个包含该列表中的文章的页面。
文章本身位于不同的数据库中。构建页面并将其发送给用户后,我需要将文章ID#的列表发送到第三个数据库。我不希望访问者在发送页面之前必须等待处理我的#。
我想知道的是如何发送页面然后更新。更新必须实时发生或接近发生。
为了澄清,要生成页面,我需要查询两个不同的数据库。生成页面并将其提供给访问者后,我需要将第一个查询的结果发送到第三个数据库。
更新第三个数据库的最后一步与创建页面无关,但需要在第一个查询的结果可用时完成。我只想在准备就绪后立即返回页面,而不必等待更新操作完成。
答案 0 :(得分:0)
四个想法:
编写一个命令行PHP脚本来执行日志记录操作,该操作在命令行中获取id,然后从PHP启动后台作业以使用exec或其中一个类似函数运行它
$ ids = implode(“”,$ arrayofids);
exec(“/ usr / bin / php5 /path/to/your/script.php {$ ids}&”);
其中关键是最后的&符号在后台运行作业。你的php之路可能会有所不同。
与此类似,不是命令行PHP,您可以在后台命令行cURL调用到数据库写入的页面。这意味着写入仍然发生在Web服务器的上下文中,这有时会使权限和包含正确的文件更容易。使用适当的测试或htaccess文件,您可以阻止除同一台计算机以外的任何人访问此类页面(如果重要的话)。关键是要在后台启动它,这样页面就不需要等待了。
有点类似于1:让一个守护进程连续运行(它也可以用PHP编写并在启动时启动,例如使用cron)从队列中获取ID并使用它们完成所需的操作。您的队列可以是要处理的文件的文件夹,并且网页脚本会写入文件(使用唯一的名称,有一个PHP函数来获取此类文件名),并且守护程序每隔几秒钟/每分钟扫描一次目录/消耗他们。当然,你必须编写这些文件,因此这可能不会比首先将它们写入第三个数据库快得多,不管你做什么都或多或少。
如果您不介意公开写入第三个数据库的网页的URL,您可以在最后(在< / body>之后)发出一个带有一点Javascript的用户页面在该URL上发布到第三个数据库。这意味着第三部分来自用户的浏览器而不是服务器。如果你这样做,你必须为一些垃圾邮件电话做好准备,但它实质上就是谷歌分析的工作方式。除非它是一个巨大的列表,否则id可以是URL中的参数;如果它很大,它们可以被发回。无论哪种方式,它都将是一个Ajax调用,因此jQuery使得编写比自己编写更容易。