Source code of filesite.io. https://filesite.io
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

151 lines
5.4 KiB

<?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');
}
}