2-9
Monday
标签
梦涛笔记

关于理财

投资 发布时间:2026-01-29 18:32:05
  • 每个人都要学些理财知识,以获取资产的保值及复利的增长、资金的被动收入;
  • 剩余的现金都可以存入灵活固收类的货币基金,如天天盈、灵活宝等。即不影响使用,又可以稳定获取安全收益;
  • 股票基金属于高风险投资,别被高收益蒙蔽而忽略了分险。记住金融市场上是没有绝对概率,任何风险都有可能产生的,只是概率高低而已,作出每笔投资时,都要想好最坏的可能性是什么,自己是否可以承受,如不行就不能做;
  • 可能获取长期复利增长的金融资产就是宽基,相信中国国运就买中证A500,相信美国国运就买标普500或纳指100。宽基的复利增长是相对于长期,短期也是会有很大波动的,所以最佳的投资方式的定投(如每月固定买入)并长期持有;
  • 何为长期?长期持有即时间跨度是10-30年,也就是说当你想长期投资时,在买入时就要想好这笔钱至少是10年以上不会用才可以买入,否则就不要。通常的建议是拿出每个月收入的10%做为长期投资,也相当强制储蓄,又可以获取资金复利增长;
  • 记住不要炒股:想通过短期炒作股票涨跌来获取收益,亏损的概率是超过90%,记住是超过90%,基本不可为。投资股票的本质就是投资公司,如果想这笔投资要在短期内就获取回报,那无非就是指望另一个另傻的人用更高的价格从你手上买走,这就是投机,基本不可为。投资公司获取回报肯定是公司在生产经营当中获取利润达到回报投资者,那必定是需要时间的。也就是说可以投资的公司必须是会赚钱的,且是会长期赚钱的,并且现在的估值不高的,而且还需持有时间至少要三五年以上,才能获取丰厚的回报。
  • 所谓的价值投资:找到伟大的公司,在合适的价格买入并长期持有;

PHP 发力 AI !PHP 官方 MCP SDK 正式发布

PHP AI 发布时间:2026-01-14 10:00:41
  • PHP 官方 MCP SDK 正式发布

PHP Foundation、Anthropic MCP 团队和 Symfony 正在合作开发 PHP 官方 MCP SDK。该项目的目标是为 PHP 生态提供一个跨框架、可用于生产环境的标准实现。

Symfony 团队将负责主要维护工作,社区也会参与贡献,包括 Kyrian Obikwelu PHP-MCP 项目作者。

这次合作将之前的各种实现整合成一个统一、可信的官方版本——

modelcontextprotocol/php-sdk,先从服务端开始,后续扩展到客户端功能。

composer require mcp/sdk


  • 什么是 MCP,为什么重要

Model Context Protocol (MCP) 是 Anthropic 推出的开放协议,让 AI 应用能够连接和使用外部工具及数据源,就像为 AI 系统提供标准化的"USB-C 接口"。

为了简化 MCP 服务器开发,社区提供了各种 SDK——这些轻量级框架处理协议细节,让开发者专注于应用逻辑。

已经有多种编程语言的官方 SDK,但一直没有 PHP 官方 SDK,虽然社区有一些实现。

这就是 PHP Foundation 出面协调开发和维护 PHP 官方 MCP SDK 的原因。

这带来两个重要好处:

  • 为开发者提供可信的标准实现
  • 让 PHP 在 AI 开发生态中更有存在感


  • 具体进展

PHP Foundation 已经与 Anthropic MCP 团队和 Symfony 团队建立合作,开发 PHP 官方 MCP SDK。

Symfony 团队将担任 SDK 的主要维护者,他们在构建高质量、跨框架组件方面有丰富经验,PHP 生态的很多项目都依赖他们的组件。

另外,Kyrian Obikwelu 加入了维护团队,带来他在 MCP 库方面的经验。其他 PHP MCP SDK 作者也欢迎参与。

路线图(概要):

  • 服务端构建模块(首次发布)
  • 客户端功能和其他传输方式(随规范发展)
  • 文档、示例和稳定性改进(基于实际使用反馈)

该实现将保持跨框架特性,确保它在任何平台、老项目和自定义技术栈中都能正常工作。社区适配器和示例会与核心包一起提供。


  • 如何参与

试用:安装 SDK,搭建一个小型 MCP 服务器,开放一两个安全的工具。

贡献:欢迎提交 issue、文档和 PR——特别是测试和实际应用示例。

框架集成:团队希望为 Laravel、WordPress、Drupal、Laminas 等提供一流集成。仓库中也会维护集成列表。

从这里开始:

  • SDK 仓库:modelcontextprotocol/php-sdk
  • Composer 包:https://packagist.org/packages/mcp/sdk
  • MCP 规范和生态:https://modelcontextprotocol.io/
  • ⭐ 欢迎 Star 仓库,试用功能,提交 issue 和 PR,参与讨论。


  • 其他优秀的 PHP AI 扩展

除了官方 MCP SDK,社区还有一些不错的 AI 相关扩展值得关注:

  • symfony/ai - Symfony 官方 AI 组件,提供统一的 AI 服务接口
  • inspector-apm/neuron-ai - PHP AI Agent 开发框架,支持多个 AI 提供商,提供强类型系统和生产级监控功能
  • laravel/boost - Laravel AI 辅助开发工具,提供 MCP 服务器和 15+ 专用工具,包含 Laravel 生态的 AI 编程指南和文档 API
  • prism-php/prism - Laravel 生态的 LLM 集成库,支持 OpenAI、Anthropic、Ollama 等多个 AI 提供商,提供统一接口和工具系统

这些扩展为 PHP 开发者提供了不同的 AI 集成方案,可以根据项目需求选择合适的工具。


使用openssl自行签发私有SSL证书

发布时间:2025-07-03 16:49:53

签发自有证书:

openssl req -newkey rsa:2048 -nodes -keyout domain.key -subj "/CN=domain.com" -addext "subjectAltName=DNS:domain.com"  -x509 -days 365 -out domain.crt

签发自有受信任证书:

# 生成自由根证书
openssl genrsa -out rootCA.key 4096
openssl req -new -x509 -days 3650 -key rootCA.key -out rootCA.crt -subj "/C=CN/O=My Organization/CN=My Self-Signed Root CA"

把rootCA.crt下载下来,导入到电脑受信任的根证书中颁发机构中

然后就可以使用此根证书签发受信任的SSL证书了

openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr -subj "/CN=domain.com"
openssl x509 -req -days 365 -in domain.csr -CA rootCA.crt -CAkey rootCA.key  -CAcreateserial -out domain.crt -extfile <(echo -e "subjectAltName=DNS:domain.com")

在线签发SSL证书

https://www.zhisg.com/dev/ssl.php

curl命令直接获取证书 (参数domain修改实际域名)

# 获取 private.key
curl -o private.key "https://www.zhisg.com/dev/ssl.php?domain=domain.com&act=key"
# 获取 cert.pem
curl -o cert.pem "https://www.zhisg.com/dev/ssl.php?domain=domain.com&act=cert"


ROS通过aliyun域名解析实现DDNS脚本

ROS 发布时间:2025-06-02 00:03:12

优化获取地址方式,以及设置地址相同时不触发解析请求,避免频繁多余请求接口。


:local id "key"
:local secret "secret"
:local domain "your.domain.com"

:global GIPV4
:global GIPV6

# 定义拨号接口名称
:local interfaceName "pppoe-out1"

# 获取接口的IP地址
:local ipAddress [/ip address get [/ip address find interface=$interfaceName] address]

# 检查是否获取到IP地址
:if ($ipAddress != "") do={
    :set ipAddress [:pick $ipAddress 0 ([len $ipAddress] -3)]
  :if ($ipAddress != $GIPV4) do={
    :global GIPV4 $ipAddress
    :log info ("IP Address of $interfaceName: " . $ipAddress)

    :local result [/tool fetch url="https://www.zhisg.com/route.php/ddns/ali/set\?id=$id&secret=$secret&domain=$domain&ip=$ipAddress" as-value output=user];
    :log info $result;

  }
} else={
    :log error ("Failed to get IP address for $interfaceName")
}


# 定义IPV6地址接口名称
:local ipv6Interface "bridge1"
# 定义IPV6前缀地址池
:local ipv6Pool "TELEv6"

:local ipv6Addr [/ipv6 address get [/ipv6 address find interface=$ipv6Interface from-pool=$ipv6Pool] address ]
:local ipv6Prefix [ /ipv6 pool get [/ipv6 pool find name=$ipv6Pool] prefix ]

# 检查是否获取到IP地址
:if ($ipv6Addr != "") do={
    :set ipv6Addr [:pick $ipv6Addr 0 ([len $ipv6Addr] -3)]
  :if ($ipv6Addr != $GIPV6) do={
    :global GIPV6 $ipv6Addr
    :log info ("IPv6 Address of $ipv6Interface: " . $ipv6Addr)
    :log info ("IPv6 Prefix of $ipv6Pool: " . $ipv6Prefix)


    :local result [/tool fetch url="https://www.zhisg.com/route.php/ddns/ali/set\?id=$id&secret=$secret&domain=$domain&ip=$ipv6Addr&type=AAAA" as-value output=user];
    :log info $result;

  }
} else={
    :log error ("Failed to get IPv6 address for $ipv6Interface")
}

:log info "DDNS FINISHED"


Centos7/Redhat7升级OpenSSL

CentOS 发布时间:2025-05-30 10:49:50

原来的OpenSSL默认版本是1.0.2k

升级到最新版的OpenSSL步骤如下

下载官网最新的软件  https://openssl-library.org/source/

wget  https://github.com/openssl/openssl/releases/download/openssl-3.5.0/openssl-3.5.0.tar.gz

解压OpenSSL,并切换至包目录

tar zxvf openssl-3.5.0.tar.gz
cd openssl-3.5.0

安装编译所需依赖

yum install perl-IPC-Cmd perl-Data-Dumper gcc gcc-c++ perl perl-devel

预编译命令

./Configure --prefix=/usr/local/openssl/

编译和编译安装命令

make && make install

备份旧的OpenSSL,链接新OpenSSL的库文件

mv /usr/bin/openssl{,.bak}

ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl

检查OpenSSL,看看依赖是否正常

ldd /usr/bin/openssl

若有缺失项,libssl.so.3 => not found  libcrypto.so.3=> not found

则/etc/ld.so.conf.d/openssl.conf 添加配置

echo "/usr/local/openssl/lib64/" > /etc/ld.so.conf.d/openssl.conf

激活路径

ldconfig -v

再次检查可以看到前面缺失的库已经装载到内存了,OpenSSL可以使用了

检查OpenSSL的版本,确认升级成功

openssl version

使用acme.sh自动化脚本自动签发Let's Encrypt 证书

CentOS 发布时间:2025-05-29 17:31:15

安装命令:

curl https://get.acme.sh | sh -s email=my@example.com

安装过程不会污染已有的系统任何功能和文件,所有的修改都限制在安装目录中: ~/.acme.sh/

注意:如果安装完成后提示 -bash: acme.sh: command not found,需要手动执行 source ~/.bashrc

升级 acme.sh 到最新版:

acme.sh --upgrade

如果你不想手动升级,可以开启自动升级:

acme.sh --upgrade --auto-upgrade

修改默认 CA

acme.sh 脚本默认 CA 服务器是 ZeroSSL,把 CA 服务器改成 Let's Encrypt:

acme.sh --set-default-ca --server letsencrypt


手动验证DNS

acme.sh --issue --dns -d example.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

自动验证(DNS API)以Aliyun为例

export Ali_Key="--key--"
export Ali_Secret="--sercert--"

签发通配符证书:

acme.sh --issue --dns dns_ali -d example.com -d *.example.com
更详细的 DNS API 用法: https://github.com/acmesh-official/acme.sh/wiki/dnsapi

继签证书:

acme.sh --renew -d example.com

安装复制证书

Apache 示例:

acme.sh --install-cert -d example.com --cert-file /path/to/certfile/in/apache/cert.pem --key-file /path/to/keyfile/in/apache/key.pem --fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem --reloadcmd "systemctl reload httpd"

Nginx 示例:

acme.sh --install-cert -d example.com --key-file /path/to/keyfile/in/nginx/key.pem  --fullchain-file /path/to/fullchain/nginx/cert.pem --reloadcmd  "systemctl reload nginx"

注意:reloadcmd 非常重要。证书会自动申请续签,但是如果没有正确的 reloadcmd 命令,证书可能无法被重新应用到 Apache 或者 Nginx,因为配置没有被重载。

查看已安装证书信息

acme.sh --info -d example.com

查看所有安装的证书

acme.sh --list

删除一条安装的证书

acme.sh --remove -d example.com

由ECIES加密算法引发编写了RSAIES加密方法

PHP 发布时间:2025-05-28 20:54:36

ECDSA (Elliptic Curve Digital Signature Algorithm,椭圆曲线数字签名算法)

相比RSA算法密钥更短安全性更高,验签速度也更快,使用场景也得到广泛应用。

因为ECDSA算法只能做签名,不能做加解密,所以产生了ECIES(Elliptic Curve Integrated Encryption Scheme,椭圆曲线集成加密方案)。

ECIES 其中用到的 ECDH算法生成共享密钥,因平台兼容问题一些旧系统还无法支持。

所以依照ECIES的加密思路设计了自己的RSAIES加密方法:

RSAIES 加密方式详解
  • 生成随机AES密钥,使用 RSA 加密方法对其加密
  • 生成随机AES密钥iv值
  • 用随机AES密钥对数据进行AES-128-CFB加密,参数 OPENSSL_RAW_DATA
  • 密文和iv值进行base64处理(支持HEX)
  • 使用SHA256计算哈希值(mac),用于接收者验证数据完整性
  • 把 加密的随机AES密钥 cipher 向量 iv 编码方式 code 密文哈希值 mac 加密类型 RSAIES 放入 encryption 字段
RSAIES 解密方式详解
  • 把接收到的密文使用SHA256计算哈希值,验证mac值是否相同,判定数据是否完整
  • 把接收到的 加密的随机AES密钥 cipher 编码还原 base64_decode 后,使用 RSA 解密方法对其解密得到AES密钥原文
  • 用得到的随机AES密钥和收到的向量 iv 采用 aes-128-cfb 进行解密, 参数 OPENSSL_RAW_DATA
  • 得到原文


示例代码: https://github.com/unntech/encrypt/blob/main/src/RSA.php
    /**
     * RASIES加密
     * 生成随机AES密钥,使用 RSA 加密方法对其加密
     * 使用AES-128-CFB加密文本,参数选 OPENSSL_RAW_DATA
     * @param string $plaintext 明文数据
     * @param string $code 密文编码支持 base64 | hex | bin
     * @return false | array 
     *     [ 'cipher' => '加密的AES密钥', 
     *       'iv'     => 'iv',  
     *       'code'   => 'base64', 
     *       'ciphertext' => '密文', 
     *       'mac'    => '密文SHA256哈希' 
     *     ]
     * 
     */
    public function encrypt_ies(string $plaintext, string $code = 'base64', int $padding = OPENSSL_PKCS1_PADDING )
    {
        $publicKey = $this->third_public_key;
        // 生成随机对称密钥
        $cipher_method = 'aes-128-cfb';
        $symmetricKey = openssl_random_pseudo_bytes(16); // 使用 AES-128 密钥长度
        $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher_method));
        // 使用公钥加密对称密钥(使用 RASIES 过程)
        openssl_public_encrypt( $symmetricKey, $encryptedKey, $publicKey, $padding );
        // 使用对称密钥加密消息(AES-128-CFB)
        $encryptedMessage = openssl_encrypt($plaintext, $cipher_method, $symmetricKey, OPENSSL_RAW_DATA, $iv);
        $ciphertext = Encode::encode($encryptedMessage, $code );
        //使用SHA256计算密文哈希值
        $mac = strtoupper(hash("sha256", $ciphertext));

        // AES密钥cipher、向量iv、密文及哈希值
        return [
            'cipher_method' => $cipher_method,
            'cipher'        => Encode::encode($encryptedKey, $code),
            'iv'            => Encode::encode($iv, $code),
            'code'          => $code,
            'ciphertext'    => $ciphertext,
            'mac'           => $mac,
        ];
    }

    /**
     * RASIES 解密
     * 使用RSA解密方法对 $cipher 解密,得到AES密钥
     * 使用AES-128-CFB解密密文,参数选 OPENSSL_RAW_DATA,得到明文
     * @param string $ciphertext 密文
     * @param string $cipher 加密的AES密钥
     * @param string $iv AES加密向量
     * @param string|null $mac 密文哈希值
     * @param string $code 编码
     * @param int $padding 填充方式(OPENSSL_PKCS1_PADDING / OPENSSL_NO_PADDING)
     * @return string|null
     */
    public function decrypt_ies(string $ciphertext, string $cipher = '', string $iv = '', ?string $mac = null, string $code = 'base64', int $padding = OPENSSL_PKCS1_PADDING): ?string
    {
        // 解密对称密钥
        openssl_private_decrypt(Encode::decode($cipher, $code), $symmetricKey, $this->private_key, $padding);
        if(empty($symmetricKey)){
            return null;
        }
        // 2. 验证 MAC
        if(!is_null($mac)){
            $_mac = strtoupper(hash("sha256", $ciphertext));
            if($mac != $_mac){
                return null;
            }
        }
        // 3. 解密密文
        $plaintext = openssl_decrypt(Encode::decode($ciphertext, $code), 'aes-128-cfb', $symmetricKey, OPENSSL_RAW_DATA, Encode::decode($iv, $code));

        return $plaintext;
    }


RSAIES Integrated Encryption Scheme)RSA集成加密方案,采取了RSA使用广泛及跨平台兼容性高的优点,方案中只用RSA加解密随机AES密钥。

然后用AES进行对称加密数据,相比RSA加密快,又不用处理长文本RSA加密复杂的缺点。


Libsodium 加密库

PHP 发布时间:2025-05-26 10:38:36

Libsodium 是一个现代化、易用且高度安全的密码学库,旨在简化加密操作并避免常见的安全错误。它是 NaCl(Networking and Cryptography Library)的一个分支,由 Frank Denis 和社区维护。

安全设计哲学

  • 无脑安全默认配置:所有 API 默认使用当前最安全的算法和参数组合(如 XChaCha20-Poly1305、Argon2)。
  • 防误用设计:避免开发者因组合错误算法导致漏洞(如用 ECB 模式或弱哈希)。

现代密码学算法

  • 加密:XChaCha20-Poly1305, AES-GCM
  • 密钥交换:X25519(椭圆曲线 Diffie-Hellman)
  • 签名:Ed25519(EdDSA 签名)
  • 哈希:BLAKE2b
  • 密码哈希:Argon2(抗 GPU/ASIC 攻击)

跨平台支持

   提供 C 库及多种语言绑定(如 PHP、Python、Java)。

活跃维护与审计

   代码经过多次独立安全审计,社区活跃,及时修复漏洞。

PHP 7.2+ 已内置 Sodium 扩展(无需额外安装),通过函数前缀 sodium_* 调用。

官方文档: https://www.php.net/manual/zh/book.sodium.php

Libsodium 是开发者的“密码学瑞士军刀”,强烈推荐在安全敏感项目中替代 OpenSSL 等传统库。其设计目标正是让安全变得简单,让开发者专注于业务逻辑而非密码学细节。


配置mpdf导出PDF支持中文

PHP 发布时间:2025-05-19 18:14:03

修改配置文件:vendor/mpdf/mpdf/src/Config/ConfigVariables.php

'useAdobeCJK' => true,
'autoScriptToLang' => true,
'autoLangToFont' => true,
'useSubstitutions' => true,


Composer常用配置优化

PHP 发布时间:2025-05-16 10:34:31
  • 全局配置:作用范围:对所有项目生效;
  • 文件路径:~/.composer/config.json(Linux/macOS)或%APPDATA%\Composer\config.json(Windows)
composer config --global 配置项 值
  • 项目级配置:作用范围:仅对当前项目生效;
  • 文件路径:项目根目录下的composer.json
composer config 配置项 值
  • 修改包源(国内镜像源加速)
composer config --global repo.packagist composer https://mirrors.aliyun.com/composer/
  • 恢复官方源
composer config --global --unset repos.packagist
  • 修改缓存路径:解决网络盘和下载慢,已下载的库缓存至本地
composer config --global cache-dir /本地路径/cache
  • 查看当前缓存路径
composer config cache-dir
  • 查看当前配置
composer config --list --global    # 查看全局配置
composer config --list                  
# 查看项目级配置
  • 重置配置项
composer config --global --unset 配置项   # 删除全局配置项
  • ---