- PHP Captcha实现图片验证码生成及识别(附源码)
mayday1102
PHPphpcaptcha
目录什么是Captchacomposer安装思路修改Captcha.php源码调用什么是CaptchaCAPTCHA(CompletelyAutomatedPublicTuringTesttoTellComputersandHumansApart)是区分计算机和人类的一种程序算法。composer安装composerrequirephp-quickorm/captcha思路由于原扩展基于sessi
- 关于解决shell脚本中无法用cd命令,在指定文件下运行指定文件的解决方法分享
Ramphastos1101
phplinux服务器bash
本人以编写shell脚本,一键安装配置php7.3为例前提:本脚本在Linux/opt/目录下运行首先解压php压缩包######配置nginx,带lua支持#################################################tar-zxvf/opt/php-7.3.30.tar.gzif[$?-eq0];thenecho`date"+%y-%m-%d%H:%M:%S
- PHP For 循环
web13688565871
面试学习路线阿里巴巴phpandroidjava
基本概念For循环的结构在PHP编程中,for循环是一种强大的控制结构,用于重复执行特定代码块。其语法结构由三个关键部分组成:初始化表达式、条件表达式和更新表达式。这种结构设计使得for循环特别适合处理已知迭代次数的任务。for循环的基本语法如下:for(初始化表达式;条件表达式;更新表达式){//循环体}初始化表达式初始化表达式在循环开始前执行一次,通常用于设置循环计数器或其他必要的变量。例如:
- 大模型WebUI:Gradio全解12——LangChain原理、架构和组件(3)
龙焰智能
LangChain架构Integration包LangGraphLangGraph平台LangSmithLangfuse
大模型WebUI:Gradio全解12——LangChain原理、架构和组件(3)前言本篇摘要12.LangChain原理及agents构建GradioUI12.3LangChain架构12.3.1LangChain12.3.2IntegrationPackages1.概念2.示例12.3.3LangGraph1.概念2.示例12.3.4LangGraphPlatform1.概览2.优势分析12.
- PHP 5 Math 函数
宇哥资料
phpphp开发语言
PHPMath简介Math函数能处理integer和float范围内的值。安装PHPMath函数是PHP核心的组成部分。无需安装即可使用这些函数。PHP5Math函数函数描述abs()返回一个数的绝对值。acos()返回一个数的反余弦。acosh()返回一个数的反双曲余弦。asin()返回一个数的反正弦。asinh()返回一个数的反双曲正弦。atan()返回一个数的反正切。atan2()返回两个变
- 英语学习课程
西部驯兽师
项目管理学习
根据国内工程领域职场新人的特点,结合阿联酋工程项目管理实际需求,制定以下系统性英语学习方案(以12个月为周期):一、基础构建阶段(第1-3个月)学习内容:工程英语词汇体系使用《BEC中高级词汇手册》,重点掌握300个工程管理核心术语(如:BillofQuantities工程量清单、VariationOrder变更令)通过PingCode研发管理系统英文界面,每日记录10个工作中实际接触的工程术语商
- PHP 杂项 函数
宇哥资料
phpphpandroid开发语言
PHP杂项函数简介我们把不属于其他类别的函数归纳到杂项函数类别。安装杂项函数是PHP核心的组成部分。无需安装即可使用这些函数。Runtime配置杂项函数的行为受php.ini文件中的设置的影响。杂项配置选项:名称默认描述可更改ignore_user_abort"0"FALSE指示只要脚本在客户机终止连接后尝试进行输出,脚本将被终止。PHP_INI_ALLhighlight.string"#DD00
- 攻防世界web新手第四题easyphp
安全小王子
前端android
6000000&&strlen($a)2022){if(is_array(@$c["n"])&&count($c["n"])==2&&is_array($c["n"][0])){$d=array_search("DGGJ",$c["n"]);$d===false?die("no..."):NULL;foreach($c["n"]as$key=>$val){$val==="DGGJ"?die("no
- 攻防世界-web- easyphp
32进制
ctfweb攻防世界CTFphp开发语言
#攻防世界-web-easyphp依次构造a、b、c的值!";break;}$i++;}//$c=array("m",2022,array("n","DGGJ","DGGJ"));//echojson_encode($c);//$c=json_encode($c);//shic={"m":"12345a","n":[[0,1,2],0]}$c=array("m",2022,array("n","D
- 高性能PHP框架webman爬虫引擎插件,如何爬取数据
Ai 编码
php教程php爬虫开发语言
文章精选推荐1JetBrainsAiassistant编程工具让你的工作效率翻倍2ExtraIcons:JetBrainsIDE的图标增强神器3IDEA插件推荐-SequenceDiagram,自动生成时序图4BashSupportPro这个ides插件主要是用来干嘛的?5IDEA必装的插件:SpringBootHelper的使用与功能特点6Aiassistant,又是一个写代码神器7Cursor
- 使用Dockerfile搭建ubuntu20.04 + php8.2镜像
编写Dockerfile最近在部署项目事,想做一个基于ubuntu20.04,搭建nginx+php8.*的镜像。但是在制作的过程中遇到了很多坑,记录下来供后续参考学习。修改镜像过程大概分为了6个模块:模块一:对ubuntu20.04官方镜像重新构造。模块二:在基础镜像添加php8.*的源模块三:安装nginx、php以及相关依赖。模块四:设置nginx、php配置文件模块五:编写nginx、ph
- HW基线检查
kui954
HWlinux运维威胁分析HW面试
windows,Linux的敏感文件Windows系统:C:\boot.ini//查看系统版本C:\windows\system32\SAM//账号密码文件C:\windows\php.ini//php配置信息C:\windows\my.ini//数据库配置文件Linux:/etc/passwd//账户信息/etc/shadow//账户密码文件/etc/my.conf//mysql配置文件Linu
- 全新租赁小程序系统源码 基于ThinkPHP+UniApp开发的租赁商城小程序
专业软件系统开发
源码下载小程序租赁商城小程序源码租赁商城小程序租赁小程序系统源码
内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍全新租赁小程序系统源码基于thinkphp+uniapp开发的租赁商城小程序基于thinkphp+uniapp开发的租赁商城小程序,提供用户物品租赁服务的应用程序方便客户搭建各种类型的租赁场景服务。通过小程序端多角色进行平台管理用户租赁商品缴纳租金及押金,员工端可操作商品出库和归还功能特性:1、装修模块可根据用户
- wordpress使用CorePress主题设置项总结
linlinlove2
wordpress二次开发wordpress主题开发
宝塔面板设置软件商店中安装的软件有:(宝塔网站加速3.1)(Nginx1.18.0)(MySql5.6.50)(PHP-5.6)(phpMyAdmin4.4)(Python项目管理器1.9)(又拍云存储4.5)(Linux工具箱1.4)(宝塔SSH终端1.0)(Nginx免费防火墙5.3)网站:首次添加站点选择自动创建数据库网站–>SSL:申请免费Let’sEncrypt证书,并开启强制https
- AI大模型-提示工程学习笔记21-图提示 (Graph Prompting)
9命怪猫
AI人工智能学习大模型aiprompt
目录1.图提示的核心思想(1)传统提示的局限性(2)GraphPrompting的解决方案2.GraphPrompting的工作流程(1)图构建(2)图选择/子图提取(3)图编码(4)提示构建(5)LLM推理与生成3.GraphPrompting的关键组件(1)大语言模型(LLM)(2)图数据库(GraphDatabase)(3)图编码器(GraphEncoder)(4)提示模板(PromptTe
- PHP部署时的几个服务器配置修改说明
TpCode
php服务器开发语言
在PHP应用程序的部署过程中,正确配置服务器是至关重要的。下面将介绍几个常见的服务器配置修改,以确保PHP应用程序能够正常运行。以下是对应的配置修改和相应的源代码示例:修改php.ini配置文件php.ini是PHP的主要配置文件,我们可以通过修改该文件来调整PHP的行为。以下是一些常见的配置项及其说明:a.修改错误报告级别错误报告级别控制PHP是否显示和报告错误。在开发环境中,建议将错误报告级别
- PHP序列化与反序列化:serialize()和unserialize()函数
MdlForward
phpandroid开发语言
PHP中的serialize()和unserialize()函数是用于将数据序列化和反序列化的重要工具。序列化是将PHP数据结构转换为字符串的过程,以便在存储或传输时使用。反序列化则是将序列化的字符串重新转换为PHP数据结构的过程。这两个函数在处理对象、数组和复杂数据结构时非常有用,可以轻松地将它们转换为可存储或传输的格式。序列化数据:serialize()serialize()函数将PHP数据结
- php序列化与反序列化
lally.
phpandroid开发语言
文章目录基础知识魔术方法:在序列化和反序列化过程中自动调用的方法什么是`__destruct()`方法?何时触发`__destruct()`方法?用途:语法示例:反序列化漏洞利用前提条件一些绕过策略绕过__wakeup函数绕过正则匹配绕过相等逻辑判断利用大S的ascll码绕过反序列化字符逃逸高级反序列化phar反序列化什么是PHAR文件?特点session反序列化基础知识序列化:将对象转化为一个可
- python-个人笔记
尘叶风凌
个人笔记python
入门python运行Python简单教程Python综述python是什么Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。Python是一种解释型语言:这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。Python是交互式语
- Golang 1.18 中泛型的使用
戴国进
goLanggolang服务器开发语言
Golang在2022-03-15发布了V1.18正式版,里面包含了对泛型的支持,那么最新版本的泛型如何使用呢?有哪些坑呢?本文全面且详细的带你了解泛型在Golang中的使用。一、什么是泛型说起泛型这个词,可能有些人比较陌生,特别是PHP或者JavaScript这类弱语言的开发者,尤其陌生。因为在这些弱语言中,语法本身就是支持不同类型的变量调用的。可以说无形之中早已把泛型融入语言的DNA中了,以至
- PHP与web页面交互
pipasound
phphtml前端
目录1,表单1,创建表单2,表单元素2,获取表单的两种方法POST和GETpostget3,PHP传递的常用办法4,在web页中嵌入PHP脚本5,在PHP中获取表单数据1,获取文本框,密码域,隐藏域,按钮,文本域(隐藏域type="hidden")2,获取单选按钮的值3,获取复选框的值4,获取下拉列表框/菜单列表框的值(往上看)5,获取文件域的值1,表单web表单主要用来在网页中发送数据到服务器1
- php 与 html 的混合编程
hjjdebug
#php
所谓混合编程,实际上是php文件输出html内容的过程,看起来像html文件包含php语句,但实际上是php文件输出html内容.结合一个小例子,体会一下php是如何把非php语句原样输出或不输出的.cat3.php,有如下代码显示.注意:文件后缀必须是.php文件,不能是.html文件,因为php文件可以输出html内容,而html文件却不能包含php语言,这是因为html是firefox等前端
- 如何设置HTTPOnly和Secure Cookie标志?
涔溪
HTTPOnlySecureCookie
设置HttpOnly和Secure标志于Cookie中是增强Web应用安全性的重要措施。这两个标志帮助防止跨站脚本攻击(XSS)和中间人攻击(MitM)。下面是关于如何设置这些标志的具体步骤:设置方法在服务器端设置根据你的服务器端技术栈不同,设置方法也会有所差异。以下是一些常见的服务器端语言和框架的例子。PHP:在发送cookie时使用setcookie()函数,并添加HttpOnly和Secur
- CSS实现图片缺角效果
凉风听雪
CSS炫酷使用css前端css3html
效果:源码:123body{margin:0;padding:0;background:#f9f9f9;display:flex;align-items:center;justify-content:center;height:100vh;}.row{display:flex;padding:30px;gap:30px;flex-wrap:wrap;background:inherit;}.box
- php事务基本要素,ACID数据库事务正确执行的四个基本要素
不懂就承认
php事务基本要素
ACID数据库事务正确执行的四个基本要素ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有这四种特性ACID——数据库事务正确执行的四个基本要素ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原
- 前端杂学录(七)
真的不想学习啦
前端前端html5javascriptcss
1.响应式布局方案1.媒体查询特点媒体查询是CSS的一部分,可以根据设备的特性(如宽度、高度、分辨率等)应用不同的样式。示例body{font-size:16px;}@media(max-width:768px){body{font-size:14px;}}@media(max-width:480px){body{font-size:12px;}}2.弹性布局(Flexbox)特点Flexbox是
- 用DeepSeek做副业,月入过万不是梦!手把手教你AI创作变现秘籍
kang_deepsk
人工智能AI写作ai
一、[开篇引言]副业新风口:AI创作变现数据揭示:2023年,超过40%的职场人尝试副业,其中AI创作工具成为热门选择。用户痛点:不知道如何开始缺乏高效工具支持变现路径不清晰DeepSeek的解决方案:通过AI技术,帮你从内容创作到变现,全程高效操作。二、[DeepSeek副业指南]手把手教学1.选择副业方向:找到你的创作领域步骤1:输入兴趣关键词示例:输入“科技”“教育”“生活技巧”步骤2:AI
- Docker下梦织CMS的部署
Coffee的小窝
linux实操dockerlinuxcentos
摘要:Docker的广泛应用相对于传统的虚拟机而言提高了资源的利用率,推广后docker的影响不容忽视,在启动速度、硬盘、内存、运行密度、性能、隔离性和迁移性方面都有很大的提高。本次在centos7下使用不同容器搭建lamp环境后部署开源的CMS。分别在两个容器里用yum下载httpd、mysql,并在httpd内安装PHP7.1版本。测试apache通过后下载CMS镜像并部署。关键词:Docke
- 清华大学发布最新版DeepSeek学习教程,完整版pdf合集,速收藏。
大器晚成667
pdf人工智能深度学习学习AI写作
资料链接:https://pan.quark.cn/s/bb6ebf0e9b4d前日,清华发布的《DeepSeek从入门到精通》长达104页,还没学完,清华大学又发布了几个重磅教程!清华大学《DeepSeek+DeepResearch:让科研像聊天一样简单》,《普通人如何抓住DeepSeek红利》,《DeepSeek如何赋能职场应用》等等,这些教程将学习的受众群体从新手小白扩展到了科研人员,职场人
- php 读取excel大文件,php 如何读大excel
特大号豆腐
php读取excel大文件
phper需要处理excel的时候基本上都会考虑PhpSpreadsheet,但是用过这个库的人都知道,这个库所需要的内存很大,关键是随着文件的增大,所需要的内存不断增大。测试过,导入2M的文excel文件,get_memory_usage显示消耗了128M。那么对于较大文件的excel该如何处理呢,本文试着给出一个解决方案(前提:你的业务允许你分行处理文件,如果不允许,可以不用往下看了)。为什么
- java杨辉三角
3213213333332132
java基础
package com.algorithm;
/**
* @Description 杨辉三角
* @author FuJianyong
* 2015-1-22上午10:10:59
*/
public class YangHui {
public static void main(String[] args) {
//初始化二维数组长度
int[][] y
- 《大话重构》之大布局的辛酸历史
白糖_
重构
《大话重构》中提到“大布局你伤不起”,如果企图重构一个陈旧的大型系统是有非常大的风险,重构不是想象中那么简单。我目前所在公司正好对产品做了一次“大布局重构”,下面我就分享这个“大布局”项目经验给大家。
背景
公司专注于企业级管理产品软件,企业有大中小之分,在2000年初公司用JSP/Servlet开发了一套针对中
- 电驴链接在线视频播放源码
dubinwei
源码电驴播放器视频ed2k
本项目是个搜索电驴(ed2k)链接的应用,借助于磁力视频播放器(官网:
http://loveandroid.duapp.com/ 开放平台),可以实现在线播放视频,也可以用迅雷或者其他下载工具下载。
项目源码:
http://git.oschina.net/svo/Emule,动态更新。也可从附件中下载。
项目源码依赖于两个库项目,库项目一链接:
http://git.oschina.
- Javascript中函数的toString()方法
周凡杨
JavaScriptjstoStringfunctionobject
简述
The toString() method returns a string representing the source code of the function.
简译之,Javascript的toString()方法返回一个代表函数源代码的字符串。
句法
function.
- struts处理自定义异常
g21121
struts
很多时候我们会用到自定义异常来表示特定的错误情况,自定义异常比较简单,只要分清是运行时异常还是非运行时异常即可,运行时异常不需要捕获,继承自RuntimeException,是由容器自己抛出,例如空指针异常。
非运行时异常继承自Exception,在抛出后需要捕获,例如文件未找到异常。
此处我们用的是非运行时异常,首先定义一个异常LoginException:
/**
* 类描述:登录相
- Linux中find常见用法示例
510888780
linux
Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;
find命令的参数;
- SpringMVC的各种参数绑定方式
Harry642
springMVC绑定表单
1. 基本数据类型(以int为例,其他类似):
Controller代码:
@RequestMapping("saysth.do")
public void test(int count) {
}
表单代码:
<form action="saysth.do" method="post&q
- Java 获取Oracle ROWID
aijuans
javaoracle
A ROWID is an identification tag unique for each row of an Oracle Database table. The ROWID can be thought of as a virtual column, containing the ID for each row.
The oracle.sql.ROWID class i
- java获取方法的参数名
antlove
javajdkparametermethodreflect
reflect.ClassInformationUtil.java
package reflect;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.bytecode.CodeAtt
- JAVA正则表达式匹配 查找 替换 提取操作
百合不是茶
java正则表达式替换提取查找
正则表达式的查找;主要是用到String类中的split();
String str;
str.split();方法中传入按照什么规则截取,返回一个String数组
常见的截取规则:
str.split("\\.")按照.来截取
str.
- Java中equals()与hashCode()方法详解
bijian1013
javasetequals()hashCode()
一.equals()方法详解
equals()方法在object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、I
- 精通Oracle10编程SQL(4)使用SQL语句
bijian1013
oracle数据库plsql
--工资级别表
create table SALGRADE
(
GRADE NUMBER(10),
LOSAL NUMBER(10,2),
HISAL NUMBER(10,2)
)
insert into SALGRADE values(1,0,100);
insert into SALGRADE values(2,100,200);
inser
- 【Nginx二】Nginx作为静态文件HTTP服务器
bit1129
HTTP服务器
Nginx作为静态文件HTTP服务器
在本地系统中创建/data/www目录,存放html文件(包括index.html)
创建/data/images目录,存放imags图片
在主配置文件中添加http指令
http {
server {
listen 80;
server_name
- kafka获得最新partition offset
blackproof
kafkapartitionoffset最新
kafka获得partition下标,需要用到kafka的simpleconsumer
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.
- centos 7安装docker两种方式
ronin47
第一种是采用yum 方式
yum install -y docker
 
- java-60-在O(1)时间删除链表结点
bylijinnan
java
public class DeleteNode_O1_Time {
/**
* Q 60 在O(1)时间删除链表结点
* 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点
*
* Assume the list is:
* head->...->nodeToDelete->mNode->nNode->..
- nginx利用proxy_cache来缓存文件
cfyme
cache
user zhangy users;
worker_processes 10;
error_log /var/vlogs/nginx_error.log crit;
pid /var/vlogs/nginx.pid;
#Specifies the value for ma
- [JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题
comsci
嵌入式
假如我们需要用JWFD的语法分析模块定义一个带负号的方程式,直接在方程式之前添加负号是不正确的,而必须这样做:
string str01 = "a=3.14;b=2.71;c=0;c-((a*a)+(b*b))"
定义一个0整数c,然后用这个整数c去
- 如何集成支付宝官方文档
dai_lm
android
官方文档下载地址
https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash
集成的必要条件
1. 需要有自己的Server接收支付宝的消息
2. 需要先制作app,然后提交支付宝审核,通过后才能集成
调试的时候估计会真的扣款,请注意
- 应该在什么时候使用Hadoop
datamachine
hadoop
原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html
存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。
--------------------------------------------万能的分割线--------------------------------
有人问我,“你在大数据和Hado
- 在GridView中对于有外键的字段使用关联模型进行搜索和排序
dcj3sjt126com
yii
在GridView中使用关联模型进行搜索和排序
首先我们有两个模型它们直接有关联:
class Author extends CActiveRecord {
...
}
class Post extends CActiveRecord {
...
function relations() {
return array(
'
- 使用NSString 的格式化大全
dcj3sjt126com
Objective-C
格式定义The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you c
- 使用activeX插件对象object滚动有重影
蕃薯耀
activeX插件滚动有重影
使用activeX插件对象object滚动有重影 <object style="width:0;" id="abc" classid="CLSID:D3E3970F-2927-9680-BBB4-5D0889909DF6" codebase="activex/OAX339.CAB#
- SpringMVC4零配置
hanqunfeng
springmvc4
基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论。
项目说明如下:
1.db.sql是项目中用到的表,数据库使用的是oracle11g
2.该项目使用mvn进行管理,私服为自搭建nexus,项目只用到一个第三方 jar,就是oracle的驱动;
3.默认项目为零配置启动,如果需要更改启动方式,请
- 《开源框架那点事儿16》:缓存相关代码的演变
j2eetop
开源框架
问题引入
上次我参与某个大型项目的优化工作,由于系统要求有比较高的TPS,因此就免不了要使用缓冲。
该项目中用的缓冲比较多,有MemCache,有Redis,有的还需要提供二级缓冲,也就是说应用服务器这层也可以设置一些缓冲。
当然去看相关实现代代码的时候,大致是下面的样子。
[java]
view plain
copy
print
?
public vo
- AngularJS浅析
kvhur
JavaScript
概念
AngularJS is a structural framework for dynamic web apps.
了解更多详情请见原文链接:http://www.gbtags.com/gb/share/5726.htm
Directive
扩展html,给html添加声明语句,以便实现自己的需求。对于页面中html元素以ng为前缀的属性名称,ng是angular的命名空间
- 架构师之jdk的bug排查(一)---------------split的点号陷阱
nannan408
split
1.前言.
jdk1.6的lang包的split方法是有bug的,它不能有效识别A.b.c这种类型,导致截取长度始终是0.而对于其他字符,则无此问题.不知道官方有没有修复这个bug.
2.代码
String[] paths = "object.object2.prop11".split("'");
System.ou
- 如何对10亿数据量级的mongoDB作高效的全表扫描
quentinXXZ
mongodb
本文链接:
http://quentinXXZ.iteye.com/blog/2149440
一、正常情况下,不应该有这种需求
首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提出来。要知道,对于一般较大数据量的数据库,全表查询,这种操作一般情况下是不应该出现的,在做正常查询的时候,如果是范围查询,你至少应该要加上limit。
说一下,
- C语言算法之水仙花数
qiufeihu
c算法
/**
* 水仙花数
*/
#include <stdio.h>
#define N 10
int main()
{
int x,y,z;
for(x=1;x<=N;x++)
for(y=0;y<=N;y++)
for(z=0;z<=N;z++)
if(x*100+y*10+z == x*x*x
- JSP指令
wyzuomumu
jsp
jsp指令的一般语法格式: <%@ 指令名 属性 =”值 ” %>
常用的三种指令: page,include,taglib
page指令语法形式: <%@ page 属性 1=”值 1” 属性 2=”值 2”%>
include指令语法形式: <%@include file=”relative url”%> (jsp可以通过 include