Это старая версия документа!
Несколько PC на одну учетку
Решение данной задачи происходит путём добавления в cron на исполнение скрипта. Скрипт делает синхронизацию балансов.
Логика работы:
User User-1 User-2 User-3
У аккаунтов User-1,User-2,User-3 баланс будет такой же как у User после запуска скрипта.
Запускать скрипт по cron самостоятельно.
Пример для Centos (для других OS поменять пути):
в скрипте
/var/www/mikbill/admin/sys/scripts/mikbill_hour.sh
добавить
cd /var/www/mikbill/admin/res/balanse /usr/bin/php balanse.php
Скрипт будет запуститься каждый час.
Ещё примеры, как это работает:
Баланс будет синхронизироваться для пользователей, чьи логины будут в таком виде: userlogin, userlogin-1, userlogin-2. При выполнении скрипта пользователям userlogin-1 и userlogin-2 будет выставляться такой же баланс, как и у userlogin.
Обновленный balanse.php:
<?php #header("Content-type: text/plain"); $is_console = PHP_SAPI == 'cli' || (!isset($_SERVER['DOCUMENT_ROOT']) && !isset($_SERVER['REQUEST_URI'])); if( $is_console ) { $config_file='../../app/etc/config.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 BINARY '-[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]; } } else { if( $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 = '{$name}'"; echo "{$QUERY_GET_USER}\n"; $sql = $db->prepare($QUERY_GET_USER); $sql->execute(); $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"])) { //echo "update user: {$user}, uid: {$value["uid"]}"; # deposit $QUERY_UPDATE = "UPDATE users SET deposit={$value["deposit"]} WHERE user REGEXP BINARY '{$user}-[0-9]+$'"; # deposit + blocked //$QUERY_UPDATE = "UPDATE users SET deposit={$value["deposit"]}, blocked={$value["blocked"]} WHERE user REGEXP BINARY '{$user}-[0-9]+$'"; # deposit + credit + blocked //$QUERY_UPDATE = "UPDATE users SET deposit={$value["deposit"]}, credit={$value["credit"]}, blocked={$value["blocked"]} WHERE user REGEXP BINARY '{$user}-[0-9]+$'"; $db->exec($QUERY_UPDATE); } else { //echo "main user not found \n"; } } } else { //echo "No users found \n"; } } else { echo "Script must be running from console!"; }