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
#header("Content-type: text/plain");

$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];
				}
			} 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 '{$user}-[0-9]+$'";
					# deposit + blocked
					//$QUERY_UPDATE = "UPDATE users SET deposit={$value["deposit"]}, blocked={$value["blocked"]} WHERE user REGEXP '{$user}-[0-9]+$'";
					# deposit + credit + blocked
					//$QUERY_UPDATE = "UPDATE users SET deposit={$value["deposit"]}, credit={$value["credit"]}, blocked={$value["blocked"]} WHERE user REGEXP '{$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!";
}
  • mikbill/настройки/несколько_pc_на_одну_учетку.txt
  • Последнее изменение: 22 мес. назад
  • alexd