php抓取网页匹配url(1.介绍的TFUMS项目的配置文件格式的效率不高)
优采云 发布时间: 2022-02-04 14:11php抓取网页匹配url(1.介绍的TFUMS项目的配置文件格式的效率不高)
1. 简介
1.1 简介
富哥的TFUMS项目的配置文件其实是一个PHP程序文件。虽然使用PHP程序文件作为项目的配置文件更加灵活,但感觉还是差了一点。
Java 项目使用 XML 作为项目的配置文件。XML格式可以容纳更复杂的配置参数,读起来很清晰。但是,PHP 对 XML 格式的文档的读取天生就有点不足,并且无法将 XML 格式转换为 PHP 数组,而且 PHP 解析 XML 格式的效率也不是很高。
PHP语言解析器的配置文件为INI格式。INI格式不如XML格式,能适应更复杂的配置参数,但用起来也够用了。最重要的是PHP解析INI格式非常方便。一个 parse_ini_file 函数 您可以将 INI 文档中的配置参数转换为 PHP 数组。既然是保证效率的内置函数,就这样吧~~
2. PHP格式配置文件
付哥首先给出了当前TFUMS项目的配置文件,这是一个标准的PHP程序文件,通过TFConfig对象设置项目参数。
2.1个配置文件
use TFPHP\Database\SQL\TFDO;
use TFPHP\System\TFLog;
use TFPHP\System\TFConfig;
TFConfig::set("default", array(
'driver'=>TFDO::T_MYSQL,
'host'=>"mysql",
'port'=>3306,
'user'=>"tfums",
'pass'=>"abcdef",
'db'=>"tfums",
'charset'=>"utf8",
), "TFDO");
TFConfig::set("default", array(
'host'=>"redis",
'port'=>6379,
'pass'=>"tongfu.net",
'db'=>"tfums",
), "TFRedis");
TFConfig::set("default", array(
'host'=>"elasticsearch",
'port'=>9200,
'db'=>"tfums"
), "TFElasticsearch");
TFConfig::set("charset", "UTF-8", "system");
TFConfig::set("domain", "192.168.1.168", "system");
TFConfig::set("apiUrl", "http://php-nginx-tfums/api/", "system");
TFConfig::set("outUrl", "http://192.168.1.168/tfums/", "system");
TFConfig::set("baseUri", "/", "system");
TFConfig::set("systemLogLevel", TFLog::T_INFO, "system");
TFConfig::set("projectAESPK", md5("福哥的TFUMS系统基于TFPHP框架"), "system");
TFConfig::set("SMTPArgs", array(
'host'=>"smtp.tongfu.net",
'port'=>25,
'user'=>"tfums@tongfu.net",
'pwd'=>"cba321",
'email'=>"tfums@tongfu.net"
), "system");
TFConfig::set("imageDirArgs", array(
"dirs"=>array(
"img3"=>array(
"path"=>"/tongfu.net/web/TFHomeImg3/",
"requestUri"=>"/img3/"
)
),
"default"=>"img3"
), "system");
TFConfig::set("defaultUserImages", array(
'icon'=>"/images/usericon.jpg",
'style'=>"/images/userstyle.jpg",
), "system");
TFConfig::set("bindEmailTemplateArgs", array(
'subject'=>"亲爱的{userName},请激活你的TFUMS系统账号的绑定邮箱",
'body'=>"亲爱的{userName},你好!
请点击下面的链接完成邮箱绑定操作!
{link}</a>
TFUMS
tfums@tongfu.net
"
), "system");
2.2 数据源
这里面有3个数据源,分别是MySQL数据源、Redis数据源和ES数据源,都是数组的形式。
TFConfig::set("default", array(
'driver'=>TFDO::T_MYSQL,
'host'=>"mysql",
'port'=>3306,
'user'=>"tfums",
'pass'=>"abcdef",
'db'=>"tfums",
'charset'=>"utf8",
), "TFDO");
TFConfig::set("default", array(
'host'=>"redis",
'port'=>6379,
'pass'=>"tongfu.net",
'db'=>"tfums",
), "TFRedis");
TFConfig::set("default", array(
'host'=>"elasticsearch",
'port'=>9200,
'db'=>"tfums"
), "TFElasticsearch");
2.3 环境参数
这里是一个系统环境参数,都是简单的字符串参数。
TFConfig::set("charset", "UTF-8", "system");
TFConfig::set("domain", "192.168.1.168", "system");
TFConfig::set("apiUrl", "http://php-nginx-tfums/api/", "system");
TFConfig::set("outUrl", "http://192.168.1.168/tfums/", "system");
TFConfig::set("baseUri", "/", "system");
TFConfig::set("systemLogLevel", TFLog::T_INFO, "system");
TFConfig::set("projectAESPK", md5("福哥的TFUMS系统基于TFPHP框架"), "system");
2.4 函数参数
函数参数所针对的一些系统函数的参数一般是数组类型的参数,甚至是多级参数。
TFConfig::set("SMTPArgs", array(
'host'=>"smtp.tongfu.net",
'port'=>25,
'user'=>"tfums@tongfu.net",
'pwd'=>"cba321",
'email'=>"tfums@tongfu.net"
), "system");
TFConfig::set("imageDirArgs", array(
"dirs"=>array(
"img3"=>array(
"path"=>"/tongfu.net/web/TFHomeImg3/",
"requestUri"=>"/img3/"
)
),
"default"=>"img3"
), "system");
TFConfig::set("defaultUserImages", array(
'icon'=>"/images/usericon.jpg",
'style'=>"/images/userstyle.jpg",
), "system");
TFConfig::set("bindEmailTemplateArgs", array(
'subject'=>"亲爱的{userName},请激活你的TFUMS系统账号的绑定邮箱",
'body'=>"亲爱的{userName},你好!
请点击下面的链接完成邮箱绑定操作!
{link}</a>
TFUMS
tfums@tongfu.net
"
), "system");
3. INI 格式配置文件
虽然INI格式也可以通过section、key、value实现二维数组结构,但INI格式毕竟没有PHP语言的自由度。所以 Fugo 需要一些技巧来将 TFUMS 项目的配置文件转换为 INI 格式。
3.1 配置文件
[TFDO]
default[driver] = MySQL
default[host] = mysql
default[port] = 3306
default[user] = root
default[pass] = abcdef
default[db] = tfums
default[charset] = utf8
[TFRedis]
default[host] = redis
default[port] = 6379
default[pass] = tongfu.net
default[db] = tfums
[TFElasticsearch]
default[host] = elasticsearch
default[port] = 9200
default[db] = tfums
[system]
charset = UTF-8
domain = 192.168.1.168
apiUrl = http://php-nginx-tfums/api/
outUrl = http://192.168.1.168/tfums/
baseUri = /
systemLogLevel = info
projectAESPK = 86fbd7cec5a89700760c167e85acdab8
imageDirsPath[img3] = /tongfu.net/web/TFHomeImg3/
imageDirsRequestURI[img3] = /img3/
imageDirDefault = img3
SMTP[host] = smtp.tongfu.net
SMTP[port] = 25
SMTP[user] = tfums@tongfu.net
SMTP[pwd] = cba321
SMTP[email] = tfums@tongfu.net
defaultUserImages[icon] = /images/usericon.jpg
defaultUserImages[style] = /images/userstyle.jpg
bindEmailTemplate[subject] = 亲爱的{userName},请激活你的TFUMS系统账号的绑定邮箱
bindEmailTemplate[body] = "亲爱的{userName},你好!
请点击下面的链接完成邮箱绑定操作!
{link}</a>
tfums
tfums@tongfu.net
"
3.2 数据源
INI文档可以通过section和key实现二维数组结构,和PHP的group+array格式一致,没问题!
INI 文档的键也可以使用方括号格式化为数组,parse_ini_file 函数将其转换为数组参数。
[TFDO]
default[driver] = MySQL
default[host] = mysql
default[port] = 3306
default[user] = root
default[pass] = abcdef
default[db] = tfums
default[charset] = utf8
[TFRedis]
default[host] = redis
default[port] = 6379
default[pass] = tongfu.net
default[db] = tfums
[TFElasticsearch]
default[host] = elasticsearch
default[port] = 9200
default[db] = tfums
3.3 环境参数
环境参数 大部分参数都是字符串,可以直接设置。另外 imageDirArgs 是一个多数组,这个 INI 格式不能固定。
富哥的解决方案是将多维数组拆分成多个参数。当然,相应项目中的程序也必须改变。
charset = UTF-8
domain = 192.168.1.168
apiUrl = http://php-nginx-tfums/api/
outUrl = http://192.168.1.168/tfums/
baseUri = /
systemLogLevel = info
projectAESPK = 86fbd7cec5a89700760c167e85acdab8
imageDirArgsPath[img3] = /tongfu.net/web/TFHomeImg3/
imageDirArgsRequestURI[img3] = /img3/
imageDirArgsDefault = img3
3.4 函数参数
函数参数都是一一对应的数组,也可以直接转换。
这里有一种特殊情况,就是邮件模板正文中的多行字符串,需要用双引号括起来,内容中的双引号需要转义。
SMTP[host] = smtp.tongfu.net
SMTP[port] = 25
SMTP[user] = tfums@tongfu.net
SMTP[pwd] = cba321
SMTP[email] = tfums@tongfu.net
defaultUserImages[icon] = /images/usericon.jpg
defaultUserImages[style] = /images/userstyle.jpg
bindEmailTemplate[subject] = 亲爱的{userName},请激活你的TFUMS系统账号的绑定邮箱
bindEmailTemplate[body] = "亲爱的{userName},你好!
请点击下面的链接完成邮箱绑定操作!
{link}</a>
tfums
tfums@tongfu.net
"
3.5 INI 到 PHP 数组
这个比较简单,就是一行代码的事情。
$webIniArr = parse_ini_file(WEB_INF_ROOT_PATH. 'Conf/web.ini', true);
转换后的 PHP 数组的结构如下。
4. 摘要
今天,富哥带着童鞋们,将TFUMS项目的配置文件从PHP格式的程序文件转换为INI格式的文档。使用INI文件后的配置文件看起来更像是一个配置文件。INI 文件更独立,可读性更好。