|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* 常用的公用方法
|
|
|
|
*/
|
|
|
|
Class Common {
|
|
|
|
public static function isCellphoneNumber($number) {
|
|
|
|
return preg_match("/^1[3456789][0-9]{9}$/", $number);
|
|
|
|
}
|
|
|
|
|
|
|
|
//朋友手机号码的末 6 位
|
|
|
|
public static function isFriendsCode($number) {
|
|
|
|
return preg_match("/^[0-9]{6}$/", $number);
|
|
|
|
}
|
|
|
|
|
|
|
|
//用户注册成功后,保存他的手机号码 6 位尾号作为邀请码
|
|
|
|
public static function saveFriendsCode($cellphone) {
|
|
|
|
$logTime = date('Y-m-d H:i:s');
|
|
|
|
$logDir = __DIR__ . '/../runtime/friendscode/';
|
|
|
|
$logFilename = substr($cellphone, -6) . '.log';
|
|
|
|
$logOk = @error_log("{$logTime} created by {$cellphone}\n", 3, "{$logDir}{$logFilename}");
|
|
|
|
if (!$logOk) { //try to mkdir
|
|
|
|
@mkdir($logDir, 0700, true);
|
|
|
|
@error_log("{$logTime} created by {$cellphone}\n", 3, "{$logDir}{$logFilename}");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//初始化用户数据目录
|
|
|
|
public static function initUserData($cellphone, $friends_code = '') {
|
|
|
|
$userDir = self::getUserDataDir($cellphone);
|
|
|
|
if (!empty($userDir)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
$rootDir = __DIR__ . '/../www/' . FSC::$app['config']['content_directory'];
|
|
|
|
$username = self::getMappedUsername($cellphone);
|
|
|
|
$userDir = "{$rootDir}{$username}";
|
|
|
|
mkdir("{$userDir}/data/", 0755, true); //分享视频目录
|
|
|
|
if (!is_dir("{$userDir}/data/")) {
|
|
|
|
throw new Exception("创建用户数据目录失败,请检查目录 www/" . FSC::$app['config']['content_directory'] . " 权限配置,允许PHP写入");
|
|
|
|
}
|
|
|
|
|
|
|
|
mkdir("{$userDir}/tags/", 0700, true); //分类目录
|
|
|
|
copy("{$rootDir}README.md", "{$userDir}/README.md");
|
|
|
|
copy("{$rootDir}README_title.txt", "{$userDir}/README_title.txt");
|
|
|
|
|
|
|
|
if (!empty($friends_code)) {
|
|
|
|
file_put_contents("{$userDir}/README_friendscode.txt", $friends_code);
|
|
|
|
}
|
|
|
|
|
|
|
|
file_put_contents("{$userDir}/README_cellphone.txt", $cellphone);
|
|
|
|
}catch(Exception $e) {
|
|
|
|
throw new Exception("创建用户数据目录失败:" . $e->getMessage());
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
//根据手机号码获取用户名ID
|
|
|
|
//规则:前6位对 97 求余数,再拼接后5位
|
|
|
|
public static function getUserId($cellphone){
|
|
|
|
$user_id = $cellphone;
|
|
|
|
|
|
|
|
$prefix = substr($cellphone, 0, 6);
|
|
|
|
$prefix = str_pad( (int)$prefix % 97, 2, '0', STR_PAD_LEFT);
|
|
|
|
$suffix = substr($cellphone, -5);
|
|
|
|
|
|
|
|
return "{$prefix}{$suffix}";
|
|
|
|
}
|
|
|
|
|
|
|
|
//根据手机号码获取映射的用户名
|
|
|
|
public static function getMappedUsername($cellphone){
|
|
|
|
$username = $cellphone;
|
|
|
|
|
|
|
|
if (!empty(FSC::$app['config']['tajia_user_map']) && !empty(FSC::$app['config']['tajia_user_map'][$username])) {
|
|
|
|
$username = FSC::$app['config']['tajia_user_map'][$username];
|
|
|
|
}else {
|
|
|
|
$username = self::getUserId($cellphone);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $username;
|
|
|
|
}
|
|
|
|
|
|
|
|
//判断用户数据目录是否存在
|
|
|
|
public static function getUserDataDir($cellphone) {
|
|
|
|
$rootDir = __DIR__ . '/../www/' . FSC::$app['config']['content_directory'];
|
|
|
|
|
|
|
|
$username = self::getMappedUsername($cellphone);
|
|
|
|
$userDir = "{$rootDir}{$username}";
|
|
|
|
return is_dir($userDir) ? $userDir : false;
|
|
|
|
}
|
|
|
|
|
|
|
|
//检查朋友的邀请码是否存在
|
|
|
|
public static function existFriendsCode($code) {
|
|
|
|
if (self::isFriendsCode($code) == false) {return false;}
|
|
|
|
|
|
|
|
if (!empty(FSC::$app['config']['default_friends_code']) && $code == FSC::$app['config']['default_friends_code']) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
$logDir = __DIR__ . '/../runtime/friendscode/';
|
|
|
|
$logFilename = "{$logDir}{$code}.log";
|
|
|
|
return file_exists($logFilename);
|
|
|
|
}
|
|
|
|
|
|
|
|
//用户注册或登录成功时保存用户信息到session
|
|
|
|
//login_time, username, friends_code
|
|
|
|
//增加账号映射支持,配置项:tajia_user_map
|
|
|
|
public static function saveUserIntoSession($cellphone, $friends_code = '') {
|
|
|
|
if(session_status() !== PHP_SESSION_ACTIVE) {
|
|
|
|
session_start();
|
|
|
|
}
|
|
|
|
|
|
|
|
$login_time = time();
|
|
|
|
$username = self::getMappedUsername($cellphone);
|
|
|
|
|
|
|
|
if (empty($friends_code) && !empty($_COOKIE['friends_code'])) {
|
|
|
|
$friends_code = $_COOKIE['friends_code'];
|
|
|
|
}
|
|
|
|
|
|
|
|
$_SESSION['login_time'] = $login_time;
|
|
|
|
$_SESSION['username'] = $username;
|
|
|
|
$_SESSION['friends_code'] = $friends_code;
|
|
|
|
|
|
|
|
//cookie保存 1 年
|
|
|
|
if (!empty($friends_code)) {
|
|
|
|
setcookie('friends_code', $friends_code, $login_time + 86400*365, '/');
|
|
|
|
}
|
|
|
|
|
|
|
|
return compact('login_time', 'username', 'friends_code');
|
|
|
|
}
|
|
|
|
|
|
|
|
//从session里获取用户数据
|
|
|
|
public static function getUserFromSession() {
|
|
|
|
if(session_status() !== PHP_SESSION_ACTIVE) {
|
|
|
|
session_start();
|
|
|
|
}
|
|
|
|
|
|
|
|
$login_time = !empty($_SESSION['login_time']) ? $_SESSION['login_time'] : 0;
|
|
|
|
$username = !empty($_SESSION['username']) ? $_SESSION['username'] : '';
|
|
|
|
$friends_code = !empty($_SESSION['friends_code']) ? $_SESSION['friends_code'] : '';
|
|
|
|
|
|
|
|
//尝试从cookie中获取
|
|
|
|
if (empty($friends_code) && !empty($_COOKIE['friends_code'])) {
|
|
|
|
$friends_code = $_COOKIE['friends_code'];
|
|
|
|
}
|
|
|
|
|
|
|
|
return compact('login_time', 'username', 'friends_code');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function logoutUserFromSession() {
|
|
|
|
if(session_status() !== PHP_SESSION_ACTIVE) {
|
|
|
|
session_start();
|
|
|
|
}
|
|
|
|
|
|
|
|
return session_destroy();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|