PHP调用外部脚本

时间:2017-02-12 21:27:53

标签: php mysql

我正在为个人创建一个PHP活动源,我正在继续创建组源。

所以我有

表:组名 1.第1组 2.第2组 3.第3组

表:成员 1.第1组>会员1,会员2,会员3,会员4,会员5 2.第2组>会员3,会员4,会员5,会员5 ....

有些团体有数千名成员。 因此,当我发布一个feed时,我会做类似以下的事情。

$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数据库插入,其中如您所见,对于组订阅源,当成员数量增加时,循环会呈指数级增长。

我在考虑使用单独的PHP文件填充活动源,并在活动发生时执行它。 如何调用单独的PHP文件?

有没有更好的办法解决这个问题?

如果不是,每当有人向群组发帖子,或者将图片上传到群组,然后PHP文件需要花时间执行时,我必须经历循环。

1 个答案:

答案 0 :(得分:3)

您可以将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
}