IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 2021-09-10 - PHP - 功能代码片段/代码弹药库 - 收集 -> 正文阅读

[PHP知识库]2021-09-10 - PHP - 功能代码片段/代码弹药库 - 收集

1.应用场景

主要用于快速实现功能,提高工作效率。

2.学习/操作

查看源图像?

1.文档阅读

PHP 生成UUID_william_n的博客-CSDN博客_php 生成uuid? // PHP中生成UUID

2.整理输出

1. 获取访问者IP

public static function get_ip()
{
? ? $ip = '';
? ? if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
? ? ? ? $ip = $_SERVER['HTTP_CLIENT_IP'];
? ? }
// ? ? ? ?elseif (!empty($_SERVER['HTTP_X_REAL_IP'])) {
// ? ? ? ? ? ?$ip = $_SERVER['HTTP_X_REAL_IP'];
// ? ? ? ?}
? ? elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
? ? ? ? $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
? ? } else {
? ? ? ? if(!empty($_SERVER['REMOTE_ADDR'])){
? ? ? ? ? ? $ip = $_SERVER['REMOTE_ADDR'];
? ? ? ? }else{
? ? ? ? ? ? if(php_sapi_name() == 'cli'){
? ? ? ? ? ? ? ? $ip = "cli";
? ? ? ? ? ? }
? ? ? ? }
? ? }

? ? //HTTP_X_FORWARDED_FOR 可能有多个ip,逗号隔开
? ? $pos = strpos($ip, ',');
? ? if ($pos > 0) {
? ? ? ? $ip = substr($ip, 0, $pos);
? ? }
? ? return $ip;
}

2. 生成GUID

public static function create_guid()
{
? ? if (function_exists('com_create_guid')) {
? ? ? ? $guid = trim(com_create_guid(), '{}');
? ? ? ? return str_replace('-', '', $guid);
? ? } else {
? ? ? ? mt_srand((double)microtime() * 10000);//optional for php 4.2.0 and up.
? ? ? ? $charid = strtoupper(md5(uniqid(rand(), true)));
? ? ? ? $hyphen = chr(45);// "-"
? ? ? ? $hyphen = '';// "-"
? ? ? ? //chr(123)// "{"
? ? ? ? $uuid = substr($charid, 0, 8) . $hyphen
? ? ? ? ? ? . substr($charid, 8, 4) . $hyphen
? ? ? ? ? ? . substr($charid, 12, 4) . $hyphen
? ? ? ? ? ? . substr($charid, 16, 4) . $hyphen
? ? ? ? ? ? . substr($charid, 20, 12);
? ? ? ? //.chr(125);// "}"
? ? ? ? return $uuid;
? ? }
}

3. 获取优先级比重

public static function ExploreWeightByTier($tier){
? ? $tierList = [
? ? ? ? 'Bronze' => 3,
? ? ? ? 'Silver' => 6,
? ? ? ? 'Gold' => 9,
? ? ? ? 'Platinum' => 12
? ? ];
? ? return isset($tierList[$tier])? $tierList[$tier]: 1;
}

//?青铜 白银 黄金 铂金

4. 关注与被关注的实现

关注关系,还是要存储到数据库,如,follow表中,user_id 与 follow_id.?

只是,在高并发下,还是要借助Redis来实现来实现某些功能逻辑~

同时可以看到使用了队列,具体过程TBD

components/FollowQueue.php

// 判断是否加入了黑名单

if (UserRedis::blockScore($user_id, $influencer_id)) return self::error("You have blocked this user.");
if (UserRedis::blockScore($influencer_id, $user_id)) return self::error("This user has blocked you.");

components/redis/UserRedis.php

...

public static function blockScore($user_id, $check_user_id) {
? ? return self::_getInstance()->zscore("block.id:" . $user_id, $check_user_id);
}

5. PHP内置的日期类,输出日期时间

/**
?* print current time and message
?*/

public static function log_time($message)
{
? ? $now = \DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
? ? echo ?$now->format("Y-m-d H:i:s.u") . "\t";
? ? print_r($message);
? ? echo "\r\n";
}

截图

6. 重新数据库? // Yii?

/**
?* 判断数据库是否正常连接,如果断线则重连
?* reconnect database when database connection drops
?*/
public static function activateDb() {
? ? // yii内置方法 Yii::$app->db->getIsActive(); not works ?没用 无法判断
? ? try{
? ? ? ? Yii::$app->db->createCommand('SELECT version()')->execute();
? ? } catch (\Exception $e) {
? ? ? ? //echo $e->getMessage();
? ? ? ? Yii::$app->db->close();
? ? ? ? Yii::$app->db->open();
? ? }
}

需要在执行过程中适时调用检测,然后抛出异常处理

// reconnect database when database connection drops

Service::activateDb();

Note:

commands 长时间运行遇到问题,mysql server has gone away

需要捕获,重连。就是上面的解决办法。

原因:

mysql的配置参数决定的,默认就是8小时。

MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0 连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向 c3p0 连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常。

将这2个参数设置为24小时(60*60*24=604800)即可。
set interactive_timeout=604800;
set wait_timeout=604800;

https://www.jb51.net/article/32284.htm

mysql - What is the difference between wait_timeout and interactive_timeout? - Server Fault

截图:

SHOW PROCESSLIST;
show variables like '%timeout%';

Variable_name? ? Value

connect_timeout?? ?10
delayed_insert_timeout?? ?300
have_statement_timeout?? ?YES
innodb_flush_log_at_timeout?? ?1
innodb_lock_wait_timeout?? ?50
innodb_rollback_on_timeout?? ?OFF
interactive_timeout?? ?28800
lock_wait_timeout?? ?31536000
mysqlx_connect_timeout?? ?30
mysqlx_idle_worker_thread_timeout?? ?60
mysqlx_interactive_timeout?? ?28800
mysqlx_port_open_timeout?? ?0
mysqlx_read_timeout?? ?30
mysqlx_wait_timeout?? ?28800
mysqlx_write_timeout?? ?60
net_read_timeout?? ?30
net_write_timeout?? ?60
replica_net_timeout?? ?60
rpl_stop_replica_timeout?? ?31536000
rpl_stop_slave_timeout?? ?31536000
slave_net_timeout?? ?60
wait_timeout?? ?28800

回到的截图

Note:

从上面可知,如果一直执行查询,操作,每次都没有超过wait_timeout 或者 interact_timeout 就不会

造成mysql关闭连接。

后续补充

...

3.问题/补充

TBD

4.参考

PHP 生成UUID_william_n的博客-CSDN博客_php 生成uuid

https://www.jb51.net/article/32284.htm

mysql - What is the difference between wait_timeout and interactive_timeout? - Server Fault

后续补充

...

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 15:48:22  更:2022-03-03 15:49:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:33:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码