dcarbone / tns-parser
使用 PHP 编写的 Oracle tnsnames.ora 文件/字符串解析器
    0.3.0
    2018-01-04 22:59 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: @stable
This package is auto-updated.
Last update: 2024-09-17 10:17:21 UTC
README
使用 PHP 编写的 Oracle tnsnames.ora 文件/字符串解析器
安装
此库设计为使用 Composer 安装。
需求条目
"dcarbone/tns-parser": "0.1.*"
此说明假定您了解 Composer 自动加载。
功能列表
- 能够解析来自文件或传递的字符串的输入
- 多行和注释不可见
- 支持多条目项(例如多地址条目)
- 允许搜索
- 允许基于条目标名的简单排序
- 实现了以下接口
- 能够将条目导出为- 原始
- 字母顺序排列的 tnsnames.ora 文件
- JSON 表示
 
示例用法
给定以下 TNS 条目
$tns = <<<STRING AWESOME.MYSELF.DATABASE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = me.db.myself.net) (PORT = 12345) ) ) (CONNECT_DATA = (SID = AWESOME) (SERVER = dedicated) ) ) #-------------------------------------------------- AWESOME2.MYSELF.DATABASE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = me2.db.myself.net) (PORT = 12345) ) (ADDRESS = (PROTOCOL = TCP) (HOST = me25.db.myself.net) (PORT = 12345) ) (LOAD_BALANCE = on) (FAILOVER = on) (ENABLE = broken) ) (CONNECT_DATA = (SID = AWESOME2) (SERVER = dedicated) (FAILOVER_MODE = (TYPE = select) (METHOD = basic) (RETRIES = 120) (DELAY = 2) ) ) ) STRING;
您将初始化解析器的实例
$parser = new \DCarbone\TNSParser();
然后,如果以上内容包含在文件中
$parser->parseFile('path-to-file');
或者只是一个字符串
$parser->parseString($tns);
这样就完成了!
搜索
在输入解析期间,给定 TNS 条目的所有属性都存储在多维数组中,以便进行搜索
$matched = $parser->search('awesome');
搜索结果是一个包含任何匹配条目标名的数组。在这种情况下,结果将是
var_export($matched); /* array ( 0 => 'AWESOME.MYSELF.DATABASE', 1 => 'AWESOME2.MYSELF.DATABASE', ) */
您可以根据需要具体到什么程度
$matched = $parser->search('me2.db.myself'); var_export($matched): /* array ( 0 => 'AWESOME2.MYSELF.DATABASE', ) */
然后您可以使用匹配的名称来检索条目
// Using the 2nd match statement... $entries = array(); foreach($matched as $name) { $entries = $parser[$name]; } var_export($entries); /* array ( 'DESCRIPTION' => array ( 'ADDRESS_LIST' => array ( 'ADDRESS' => array ( 0 => array ( 'PROTOCOL' => 'TCP', 'HOST' => 'me2.db.myself.net', 'PORT' => '12345', ), 1 => array ( 'PROTOCOL' => 'TCP', 'HOST' => 'me25.db.myself.net', 'PORT' => '12345', ), ), 'LOAD_BALANCE' => 'on', 'FAILOVER' => 'on', 'ENABLE' => 'broken', ), 'CONNECT_DATA' => array ( 'SID' => 'AWESOME2', 'SERVER' => 'dedicated', 'FAILOVER_MODE' => array ( 'TYPE' => 'select', 'METHOD' => 'basic', 'RETRIES' => '120', 'DELAY' => '2', ), ), ), ) */
... 或者获取一个有效的 TNS 条目版本作为字符串
$entry = $parser->getTNSEntryString($matched[0]); var_export($entry); /* 'AWESOME2.MYSELF.DATABASE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = me2.db.myself.net) (PORT = 12345) ) (ADDRESS = (PROTOCOL = TCP) (HOST = me25.db.myself.net) (PORT = 12345) ) (LOAD_BALANCE = on) (FAILOVER = on) (ENABLE = broken) ) (CONNECT_DATA = (SID = AWESOME2) (SERVER = dedicated) (FAILOVER_MODE = (TYPE = select) (METHOD = basic) (RETRIES = 120) (DELAY = 2) ) ) )' */
在幕后,搜索系统使用 preg_match,默认结构为 '{%s}S',其中 %s 被您的输入替换。
如果您想进行大小写敏感搜索,请在执行 search() 时将 true 作为第二个参数传递。
排序
目前,搜索仅限于按条目标名字母顺序,并在幕后使用 ksort。
$parser->sort();
建议?
目前,此库满足我的需求,但如果任何使用此库的人想要看到一些改进/修改,请告诉我!
测试
进行中。