PHP调用外部脚本

标签 php mysql

我正在使用 PHP 为个人创建一个事件源,然后我将继续创建组源。

所以我有表格

表:组名 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 数据库,而正如您所见,对于群组提要,当成员数量增加时,循环会呈指数增长。

我正在考虑使用单独的 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
}

关于PHP调用外部脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42193476/

相关文章:

php - 将 MySQL 查询结果显示为每行的 HTML 表

Mysql要检查的两个点是否在矩形内

php - 我的标记技术是否正确?

php - 为什么我的 PHP/MYSQL 代码导致增量为 2,而不是 1?

php - 将数据从html文件发送到php并存储在数据库中

PHP 回显所有子文件夹图像

php - 在 5 个月的时间跨度内,只应将 3 个用户插入数据库

mysql - 2 个 MySQL 安装(现在丢失了一个)

Python Mysql 类错误

php - MySQL多对多关系结构(a可以有多个b,但b也可以有多个a)