mikbill:настройки:несколько_pc_на_одну_учетку

Несколько PC на одну учетку

Аккаунтов будет много, но баланс и доступ в инет будет единый

Решение данной задачи происходит путём добавления в cron на исполнение скрипта. Скрипт делает синхронизацию балансов.

Логика работы:

User
User-1
User-2
User-3

У аккаунтов User-1,User-2,User-3 баланс будет такой же как у User после запуска скрипта.

Запускать скрипт по cron самостоятельно.
Пример записи для cron:

0 * * * * /usr/bin/php /var/mikbill/custom_scripts/balance/balanse.php

Скрипт будет запуститься каждый час.

Ещё примеры, как это работает:
Баланс будет синхронизироваться для пользователей, чьи логины будут в таком виде: userlogin, userlogin-1, userlogin-2. При выполнении скрипта пользователям userlogin-1 и userlogin-2 будет выставляться такой же баланс, как и у userlogin.

Обновленный balanse.php:

<?php

# 1 - только блокировка
# 2 - только баланс
# 3 - баланс и кредит
# 4 - баланс и блокировку
# 5 - кредит и блокировку
# 6 - баланс, кредит и блокировку
$sync_type = 1;

$is_console = PHP_SAPI == 'cli' || (!isset($_SERVER['DOCUMENT_ROOT']) && !isset($_SERVER['REQUEST_URI']));
if( $is_console ) {
    $config_file='/var/mikbill/prod/config/admin.xml';
    if (file_exists($config_file)) {
        $xml = simplexml_load_file($config_file);
        $TIME_ZONE           = (string) $xml->parameters->timezone;
        $CONF_MYSQL_HOST     = (string) $xml->parameters->mysql->host;
        $CONF_MYSQL_USERNAME = (string) $xml->parameters->mysql->username;
        $CONF_MYSQL_PASSWORD = (string) $xml->parameters->mysql->password;
        $CONF_MYSQL_DBNAME   = (string) $xml->parameters->mysql->dbname;

    } else {
        die("config not found");
    }

    if(isset($TIME_ZONE))
        date_default_timezone_set($TIME_ZONE);
    else
        date_default_timezone_set('Europe/Kiev');

    $db = new PDO( "mysql:host={$CONF_MYSQL_HOST};dbname={$CONF_MYSQL_DBNAME}", $CONF_MYSQL_USERNAME, $CONF_MYSQL_PASSWORD,
        array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES koi8r") );

    $users_list=array();
    $QUERY_GET_USERS="SELECT uid, user FROM users WHERE user REGEXP '-[0-9]+$'";
    $sql = $db->prepare($QUERY_GET_USERS); $sql->execute();
    $res = $sql->fetchAll(PDO::FETCH_ASSOC);
    if ($sql->rowCount() > 0) {
        foreach ($res as $value) {
            $name = null;
            $name_tmp=explode("-", $value["user"]);
            $len = count($name_tmp);

            if( $len == 2 ) {
                if( is_numeric($name_tmp[1]) ) {
                    $name = $name_tmp[0];
                }
            } elseif( $len > 2 ) {
                foreach( $name_tmp as $t ) {
                    if ($t === end($name_tmp)) {
                        break;
                    }

                    if( $t === reset($name_tmp) ) {
                        $name .= $t;
                    } else {
                        $name .= "-" . $t;
                    }
                }
            } else {
                # len = 1 ?
            }
            
            $QUERY_GET_USER="SELECT uid, deposit, credit, blocked FROM users WHERE user = :user";
            $sql = $db->prepare($QUERY_GET_USER); $sql->execute(['user' => $name]);
            $req = $sql->fetchAll(PDO::FETCH_ASSOC);
            if ($sql->rowCount() > 0) {
                foreach ($req as $eq) {
                    $users_list[$name]["uid"] = $eq["uid"];
                    $users_list[$name]["deposit"] = $eq["deposit"];
                    $users_list[$name]["credit"] = $eq["credit"];
                    $users_list[$name]["blocked"] = $eq["blocked"];
                }
            }
        }

        foreach ($users_list as $user=>$value) {
            if(isset($value["uid"])) {
                if( $sync_type == 1 ) {
                    # blocked
                    $QUERY_UPDATE = "UPDATE users SET blocked=:blocked WHERE user REGEXP :user";
                    $stmt = $db->prepare($QUERY_UPDATE); $stmt->execute(['blocked' => $value["blocked"], 'user' => "{$user}-[0-9]+$"]);
                } elseif( $sync_type == 2 ) {
                    # deposit
                    $QUERY_UPDATE = "UPDATE users SET deposit=:deposit WHERE user REGEXP :user";
                    $stmt = $db->prepare($QUERY_UPDATE); $stmt->execute(['deposit' => $value["deposit"], 'user' => "{$user}-[0-9]+$"]);
                } elseif( $sync_type == 3 ) {
                    # deposit + credit
                    $QUERY_UPDATE = "UPDATE users SET credit=:credit, deposit=:deposit WHERE user REGEXP :user";
                    $stmt = $db->prepare($QUERY_UPDATE); $stmt->execute(['credit' => $value["credit"], 'deposit' => $value["deposit"], 'user' => "{$user}-[0-9]+$"]);
                } elseif( $sync_type == 4 ) {
                    # deposit + blocked
                    $QUERY_UPDATE = "UPDATE users SET blocked=:blocked, deposit=:deposit WHERE user REGEXP :user";
                    $stmt = $db->prepare($QUERY_UPDATE); $stmt->execute(['blocked' => $value["blocked"], 'deposit' => $value["deposit"], 'user' => "{$user}-[0-9]+$"]);
                } elseif( $sync_type == 5 ) {
                    # credit + blocked
                    $QUERY_UPDATE = "UPDATE users SET blocked=:blocked, credit=:credit WHERE user REGEXP :user";
                    $stmt = $db->prepare($QUERY_UPDATE); $stmt->execute(['blocked' => $value["blocked"], 'credit' => $value["credit"], 'user' => "{$user}-[0-9]+$"]);
                } elseif( $sync_type == 6 ) {
                    # deposit + credit + blocked
                    $QUERY_UPDATE = "UPDATE users SET blocked=:blocked, credit=:credit, deposit=:deposit WHERE user REGEXP :user";
                    $stmt = $db->prepare($QUERY_UPDATE); $stmt->execute(['blocked' => $value["blocked"], 'credit' => $value["credit"], 'deposit' => $value["deposit"], 'user' => "{$user}-[0-9]+$"]);
                }
            } else {
                #echo "main user not found \n";
            }
        }
    } else {
        #echo "No users found \n";
    }
} else {
    echo "Script must be running from console!";
}
  • mikbill/настройки/несколько_pc_на_одну_учетку.txt
  • Последнее изменение: 3 нед. назад
  • alexd