PHP调用外部脚本
问题描述:
我正在用PHP为个人创建一个活动提要,并且我正在创建组提要。PHP调用外部脚本
所以我的表
表:组名称 1.组1 2.组2 3.组3
表:会员 1.组1>成员1,成员2会员3,会员4,会员5 2.第2组>会员3,会员4,会员5,会员5 ....
有些团体有成千上万的会员。 所以当我发布饲料时,我正在做类似下面的事情。
$result = $this->db->query('SELECT member_id FROM members WHERE group_id = 1');
$members = $result->fetchAll();
foreach ($members as $member) {
$query = $this->db->prepare('INSERT INTO activity_feed (user_id, activity) VALUES(:user_id, :activity);
if ($result = $query->execute(array(
':user_id' => $member['member_id'],
':activity' => $activity
))) {
//do something
$pusher->push(activity) //socket push notification
}
}
插入个人饲料只需要一个MySQL数据库插入,whereelse正如你所看到的,对于组喂循环获取成倍放大,当成员数量的增加。
我正在考虑使用单独的PHP文件填充活动提要,并在活动发生时执行它。 如何调用单独的PHP文件?
有没有更好的主意来解决这个问题?
如果不是每次有人向该组发送消息,或者上传图像到该组,然后PHP文件需要一段时间才能执行,则必须经过该循环。
答
你可以把你的PHP代码到一个单独的文件,说dbnotify.php
,然后使用exec()
称之为:
<?php
$group = 1;
$activity = "foo";
exec("/path/to/dbnotify.php $group $activity &");
注意&
的命令后,该把它放在后台,并立即返回。
现在,在您的外部脚本中,您需要读取在命令行上传递的值并将它们放入查询中。另外,通过插入单个查询,您可能会大大提高数据库性能:
#!/usr/bin/php
<?php
$groupid = $argv[1];
$activity = $argv[2];
$query = $this->db->prepare("INSERT INTO activity_feed (user_id, activity) SELECT member_id, :activity FROM members WHERE group_id = :group_id");
$result = $query->execute(array(":activity"=>$activity, ":group_id"=>$groupid));
$result = $this->db->query('SELECT member_id FROM members WHERE group_id = 1');
$members = $result->fetchAll();
foreach ($members as $member) {
$pusher->push(activity); //socket push notification
}
+0
确切地说,即时通讯寻找和感谢你的改进MySQL插入提示。 –
我认为您要查找的是cron作业。另外,不要在foreach循环中准备查询。这违反了使用准备好的声明的一半目的。准备一次,执行很多次。 – miken32
[如何在服务器端计划PHP脚本的执行?]可能的重复(http://stackoverflow.com/questions/1194857/how-to-schedule-the-execution-of-a-php-script在服务器端) – miken32
@ miken32我了解cron工作,但cron工作意味着我无法在事件发生时立即通知成员。 –