<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[刚子博客]]></title> 
<atom:link href="https://www.gangzi.net/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[玩转互联网]]></description>
<link>https://www.gangzi.net/</link>
<language>zh-cn</language>
<generator>www.emlog.net</generator>
<item>
    <title>CHROME浏览器定时刷新拓展</title>
    <link>https://www.gangzi.net/post-108.html</link>
    <description><![CDATA[<p>名称：Auto Refresh Plus<br />
下载地址：<a href="https://www.chajianmi.com/xiazai/ffejlioijcokmblckiijnjcmfidjppdn">https://www.chajianmi.com/xiazai/ffejlioijcokmblckiijnjcmfidjppdn</a><br />
<a href="https://www.gangzi.net/content/uploadfile/202605/e4a71779641208.zip">www.chajianmi.com_ff...</a></p>]]></description>
    <pubDate>Mon, 25 May 2026 00:45:00 +0800</pubDate>
    <dc:creator>刚子</dc:creator>
    <guid>https://www.gangzi.net/post-108.html</guid>
</item>
<item>
    <title>简单PHP文件锁</title>
    <link>https://www.gangzi.net/post-107.html</link>
    <description><![CDATA[<p>PHP在做一些定时器任务的时候，为了防止上一次任务没执行完毕，下一次任务就被执行了，再非必要使用数据库字段做标记的情况下，最简单的办法就是使用文件锁。<br />
他的原理就是当一个进程执行该文件时，其他进程执行的时候会自动退出。顶部的超时秒数要跟定时任务间隔时间保持一致。</p>
<pre><code class="language-scala">&lt;?php
// 设置脚本最大执行时间
set_time_limit(10); 

$lock_file = __DIR__ . '/cron_order.lock';
$fp = null; // 初始化变量，防止未定义警告

try {
    // 1. 打开锁文件
    $fp = fopen($lock_file, 'c+');
    if (!$fp) {
        throw new Exception("无法打开锁文件");
    }

    // 2. 尝试获取独占锁
    if (!flock($fp, LOCK_EX | LOCK_NB)) {
        fclose($fp);
        exit("已有任务在运行，本次跳过\n");
    }

    // 3. 注册兜底释放函数
    register_shutdown_function(function() use ($fp) {
        // 增加判断：确保文件句柄存在再操作
        if (is_resource($fp)) {
            flock($fp, LOCK_UN);
            fclose($fp);
        }
    });

    // --- 正式业务代码 ---

    // 模拟一个耗时操作
    // sleep(15); // 如果解开注释，脚本会在10秒时被杀死，但锁依然会通过 shutdown_function 释放

} catch (Exception $e) {
    error_log("Task Error: " . $e-&gt;getMessage());
}
// 脚本结束，shutdown_function 自动接管善后工作
?&gt;</code></pre>]]></description>
    <pubDate>Fri, 17 Apr 2026 02:14:00 +0800</pubDate>
    <dc:creator>刚子</dc:creator>
    <guid>https://www.gangzi.net/post-107.html</guid>
</item>
<item>
    <title>获取浏览器所有XHR请求的完整响应</title>
    <link>https://www.gangzi.net/post-106.html</link>
    <description><![CDATA[<p>就这么一个获取浏览器所有XHR请求的完整响应折腾了一个小时，chrome没有搞定，转战火狐搞定。<br />
首先火狐F12打开持续记录，切到网络-XHR，任意一条记录上面右键选择所有内容另存为HAR，然后把HAR文件拖到我的py文件上，自动把响应提取出来。</p>
<pre><code class="language-python">import sys
import json
import os

# ===================== 拖拽自动获取文件路径 =====================
if len(sys.argv) &lt; 2:
    print("请把 HAR 文件 拖到我这个脚本上运行！")
    os.system("pause")
    sys.exit()

har_path = sys.argv[1]

# 输出文件和 HAR 同目录
out_path = os.path.splitext(har_path)[0] + "_响应结果.txt"

# ===================== 读取并提取 response.text =====================
try:
    with open(har_path, "r", encoding="utf-8") as f:
        har = json.load(f)
except Exception as e:
    print(f"读取HAR失败：{e}")
    os.system("pause")
    sys.exit()

results = []

for entry in har.get("log", {}).get("entries", []):
    try:
        text = entry["response"]["content"]["text"]
        if text.strip():
            results.append(text)
    except:
        continue

# ===================== 写入结果 =====================
with open(out_path, "w", encoding="utf-8") as f:
    for i, content in enumerate(results, 1):
        f.write(f"===== 第 {i} 条响应 =====\n")
        f.write(content + "\n\n")

print(f"✅ 提取完成！共 {len(results)} 条响应")
print(f"📄 已保存到：{out_path}")
os.system("pause")</code></pre>]]></description>
    <pubDate>Wed, 15 Apr 2026 00:24:00 +0800</pubDate>
    <dc:creator>刚子</dc:creator>
    <guid>https://www.gangzi.net/post-106.html</guid>
</item>
<item>
    <title>360优化加速 绿色版 管理启动项</title>
    <link>https://www.gangzi.net/post-105.html</link>
    <description><![CDATA[<p>下载地址：<a href="https://wwbxt.lanzoul.com/iODPJ3m539ve">https://wwbxt.lanzoul.com/iODPJ3m539ve</a></p>]]></description>
    <pubDate>Wed, 01 Apr 2026 21:28:00 +0800</pubDate>
    <dc:creator>刚子</dc:creator>
    <guid>https://www.gangzi.net/post-105.html</guid>
</item>
<item>
    <title>gmail邮箱无限变体</title>
    <link>https://www.gangzi.net/post-104.html</link>
    <description><![CDATA[<p>利用这3种规则可以生成无限个别名，加号规则部分网站不支持。<br />
简单总结如下：<br />
核心公式<br />
假设原邮箱是：name@gmail.com<br />
表格<br />
规则编号    规则名称    操作方法    示例  特点<br />
1   加点规则    在名字任意位置加 .  n.ame@gmail.com<br />
n.a.m.e@gmail.com   谷歌无视点号，视为同一人。可无限组合。<br />
2   加号规则    在名字后加 + 和任意字符   name+1@gmail.com<br />
name+vip@gmail.com  谷歌忽略 + 后面的内容，视为同一人。最适合分类。<br />
3   域名切换    将 @gmail.com 改为 @googlemail.com name@googlemail.com 部分账号通用，视为同一人。</p>]]></description>
    <pubDate>Wed, 25 Mar 2026 14:37:00 +0800</pubDate>
    <dc:creator>刚子</dc:creator>
    <guid>https://www.gangzi.net/post-104.html</guid>
</item>
<item>
    <title>PHP查询消耗资源最高的SQL语句</title>
    <link>https://www.gangzi.net/post-103.html</link>
    <description><![CDATA[<p>慢日志可以记录执行时间大于指定数值的SQL，但是有些时候并非单条SQL长时间执行造成的，也有可能是一条执行速度比较快，但是执行及其频繁造成的，这种情况下慢日志完全失效。可以使用Performance Schema来查看。<br />
语句如下：</p>
<pre><code class="language-sql">    -- 查看最近执行时间最长、或等待事件最多的语句
    SELECT 
        DIGEST_TEXT AS query_template, -- 参数化后的SQL模板
        COUNT_STAR AS exec_count,      -- 执行次数
        SUM_TIMER_WAIT / 1000000000000 AS total_latency_sec, -- 总耗时(秒)
        AVG_TIMER_WAIT / 1000000000000 AS avg_latency_sec,   -- 平均耗时
        SCHEMA_NAME,
        LAST_SEEN -- 最后一次执行时间
    FROM performance_schema.events_statements_summary_by_digest
    ORDER BY SUM_TIMER_WAIT DESC
    LIMIT 10;</code></pre>
<p>Performance Schema是记录在内存中的，清空Performance Schema数据重新开始统计的命令如下：</p>
<pre><code class="language-sql">-- 清空所有 SQL 语句性能统计（CPU、耗时、次数全部清零）
TRUNCATE TABLE performance_schema.events_statements_summary_by_digest;</code></pre>
<p>查看当前运行的所有SQL状态</p>
<pre><code class="language-sql">SHOW FULL PROCESSLIST;</code></pre>]]></description>
    <pubDate>Thu, 19 Mar 2026 20:31:00 +0800</pubDate>
    <dc:creator>刚子</dc:creator>
    <guid>https://www.gangzi.net/post-103.html</guid>
</item>
<item>
    <title>txt大文件打开工具 LogViewer Pro</title>
    <link>https://www.gangzi.net/post-102.html</link>
    <description><![CDATA[<p><a href="https://www.gangzi.net/content/uploadfile/202603/fc751772786758.zip">LogViewerPro.zip</a></p>]]></description>
    <pubDate>Fri, 06 Mar 2026 16:44:00 +0800</pubDate>
    <dc:creator>刚子</dc:creator>
    <guid>https://www.gangzi.net/post-102.html</guid>
</item>
<item>
    <title>Windows10 64位 精简版</title>
    <link>https://www.gangzi.net/post-101.html</link>
    <description><![CDATA[<p>系统采用微软官方最新 Windows 10 22H2 19045.6456 64位 专业版离线制作，集成 Microsoft .NET Framework 3.5 和 Microsoft Visual C++ 2005-2022，集成万能驱动，更新系统补丁到 2025.10.15，是 Win10 系统的最终版本，系统分区占用 11.1 GB。<br />
链接：<a href="https://www.123865.com/s/P7Ycjv-ukbad">https://www.123865.com/s/P7Ycjv-ukbad</a></p>]]></description>
    <pubDate>Wed, 18 Feb 2026 12:24:00 +0800</pubDate>
    <dc:creator>刚子</dc:creator>
    <guid>https://www.gangzi.net/post-101.html</guid>
</item>
<item>
    <title>免费图片变高清工具</title>
    <link>https://www.gangzi.net/post-100.html</link>
    <description><![CDATA[<p><a href="https://letsenhance.io/zh-CN/">https://letsenhance.io/zh-CN/</a><br />
<a href="https://www.upscale.media/zh">https://www.upscale.media/zh</a></p>]]></description>
    <pubDate>Sat, 17 Jan 2026 03:55:00 +0800</pubDate>
    <dc:creator>刚子</dc:creator>
    <guid>https://www.gangzi.net/post-100.html</guid>
</item>
<item>
    <title>chrome 视频批量下载拓展</title>
    <link>https://www.gangzi.net/post-99.html</link>
    <description><![CDATA[<p>测试了很多插件，发现最好用的是vidhelper，官网是：<a href="https://vidhelper.app/">https://vidhelper.app/</a><br />
跟他类似的是videoplus，<a href="https://videoplus.app/">https://videoplus.app/</a><br />
大部分的插件都是需要在浏览器播放这个视频才能检测到资源，而这两个插件比如你页面有10个视频，只播放了一个，其他也都能检测出来。</p>]]></description>
    <pubDate>Tue, 06 Jan 2026 21:29:00 +0800</pubDate>
    <dc:creator>刚子</dc:creator>
    <guid>https://www.gangzi.net/post-99.html</guid>
</item></channel>
</rss>