关于php:PHP设计模式之建造者模式

建造者模式,也能够叫做生成器模式,builder这个词的原意就蕴含了建筑者、开发者、创建者的含意。很显著,这个模式又是一个创立型的模式,用来创建对象。那么它的特点是什么呢?从修建上来说,盖房子不是一下子就马上能把一个房子盖好的,而是通过一砖一瓦搭建进去的。一个房子不仅有砖瓦,还有各种管道,各种电线等等,由它们各个不局部独特组成了一栋房子。能够说,建造者模式就是这样十分形象的由各种部件来组成一个对象(房子)的过程。 Gof类图及解释GoF定义:将一个简单对象的构建与它的示意拆散,使得同样的构建过程能够创立不同的示意 GoF类图 代码实现class Product{ private $parts = []; public function Add(String $part): void { $this->parts[] = $part; } public function Show(): void { echo PHP_EOL . '产品创立 ----', PHP_EOL; foreach ($this->parts as $part) { echo $part, PHP_EOL; } }}产品类,你能够把它设想成咱们要建造的房子。这时的房子还没有任何内容,咱们须要给它添砖加瓦。 interface Builder{ public function BuildPartA(): void; public function BuildPartB(): void; public function GetResult(): Product;}class ConcreteBuilder1 implements Builder{ private $product; public function __construct() { $this->product = new Product(); } public function BuildPartA(): void { $this->product->Add('部件A'); } public function BuildPartB(): void { $this->product->Add('部件B'); } public function GetResult(): Product { return $this->product; }}class ConcreteBuilder2 implements Builder{ private $product; public function __construct() { $this->product = new Product(); } public function BuildPartA(): void { $this->product->Add('部件X'); } public function BuildPartB(): void { $this->product->Add('部件Y'); } public function GetResult(): Product { return $this->product; }}建造者形象及其实现。不同的开发商总会选用不同的品牌资料,这里咱们有了两个不同的开发商,但他们的目标统一,都是为了去盖房子(Product)。 ...

December 29, 2020 · 2 min · jiezi

关于php:写给换编程语言的你

在大学里,你可能学的是c,c++,java....到社会上工作后,你有可能换成其它语言了,这没方法,毕竟决定权不在咱们手上,饭碗规定要用go,要用rust你都会马上去学习,就算饭碗决定你用asp你也得上,毕竟人在江湖人不禁已,尽管有时候咱们会听到某某语言天下第一,某某语言如何如何,有时候甚至跟他人吵一架,然而他人的饭碗有可能就是用这个语言的。在咱们每个人的心中都可能感觉本人的货色才是最好的,他人的货色不行。 不过你在用什么语言,什么工具,反正只有能糊口,保住饭碗就是好语言,工作数年后,咱们用的语言可能很多,然而咱们的我的项目大部分都是运行在最风行的操作系统之上Linux,Linux零碎源码,工作多年的敌人也晓得整个零碎90%以上都是c源码写成,咱们的程序都要在下面运行,尽管咱们用着各种编程语言,php,python,java,c++,c,rust,go,nodejs,lua,ruby...等,尽管咱们每天都在为哪个语言最好,哪个框架最好,哪个库最好而争吵没有达成大家心中的想法,然而大家是否想过,咱们的程序写好的源码最终是要在用c编写而成的Linux零碎上运行!linux 提供的零碎api接口都是一样的,特地是外围接口,咱们的程序最终都要用零碎提供的零碎调用函数API。只不过下层语言做了各种封装造成了各种写法开公布而成的利用,包含咱们的各种编译器,汇编器,各种开发库。 大学的敌人多少也撸过c,也晓得撸好了须要编译,如果大学里的是间接在win上开始学的话,可能你四年都没有装过编译器,如果你在linux上或是其它嵌入式芯片,那么编译器品种特地多,有PC的,有ARM的,avr单片机的等,这些编译器最终会把咱们写的各种源码会解释成汇编,这个时候它只有连贯一下一些重要的库,特地是零碎重要的库函数就能够启动了。 c,c++,java,go,嵌入式c等都须要编译器解决输入指标文件,而这个指标文件含有大量的数据,并且会分门别类的存储好。在linux零碎中如go 大家也知道,当我输出./go run xx.go文件后它就能够运行了 同样看java 同样看python 再看php 我置信大家应该看到共同点了,尽管大家用的编程语言不同,然而没有关系,咱们还是有独特的话题,如果你感兴趣且不在乎什么语言的话 大家能够看出 它们是ELF文件它们的标识是LEF 64-bit LSB它们都要依赖/lib64/ld-linux-x86-64.so.2 当然linux发行版本不同也没有什么关系,你多少也能看出共同点。 我置信大家必定听过动静库和动态库的概念,而下面的.so文件其实就是一个动静库文件,我画线的呢是它们java,go,python,php运行时会加载起来,它能够作为程序的一部分进行映射,你能够当作一个函数库,加载进来当前,咱们就能够调用它提供的函数了,而这些函数是Linux操作系统提供的比拟重要的一些函数了,这些.so文件它们也是ELF文件的一种 咱们能够通过nm命令能够查看它提供了哪些函数 大家能够看我有线画进去了,右边是函数的地址,左边是函数的名称,当咱们加载此库后,能够调用execve函数,我置信做Android,ios开发的搭档应该用过.so文件【c++,c这些敌人是十分相熟了】 那么接下来,咱们运行一下各种编程语言写的程序并跟踪零碎调用System call 看看go语言这go语言啊语法是长这样的,语法规定,写法是由开发的那一批人规定的,毕竟人家的编译器就是专门辨认这种写法,如果大家有相应的实力开发本人的编译器,那么我置信你,本人折腾一套编程语言也没有问题【我晓得有的搭档大学就撸过了,然而不闻名^_^】 当初我运行一下 大家能够看到,咱们调用了linux提供的execve函数,它在libc.so库中,这个库是Linux给咱们提供的 它会去关上这个动静库,当然了c,c++程序员调用它提供的函数也是非常简单不便大家能够看到go这个ELF文件,它自身是把Linux提供的libc.so中提供的execve做为启动时运行的第一个函数【我并没有提bash过程接管命令后的进一步零碎调用,大家有趣味能够关注我,具体聊】 它关上了demo.go文件做了什么解决,当然它晓得^_^ 好当初咱们来看java的程序 同样要调用execve 好咱们再看php 那么残余的python情理一样。 看完下面的演示,我置信大家应该有一个意识,尽管语言写法不同,然而它们的零碎调用都是一样的,大家应该往深的方向看,不要局限于外表的编程语言,脚本语言。 咱们晓得这些语言的写法形形色色,这些语言的函数,构建起来的利用都在是用Linux 提供的API,这些API都是c定义的API,咱们能够十分不便的查阅它,相同Win提供的零碎API查起来麻烦,写法也简单。函数名长的要命。 大家一起这函数,就十分清晰的晓得,哦原来是依据文件filename执行它,并且把argv当做参数传递给它,这样咱们就晓得原来我执行php,java,go,python它们会执行这个才加载我写的程序的。 我置信大家不论学什么编程语言,都会遇到多过程,多线程,网络编程方面的内容,除非靠着这些语言撸好的框架进行crud 工作,当然我也是这样以前。它们的写法用法不同,然而低层的货色是雷同的。大家不要蛊惑于语言的外表用法。 如果大家感觉有意义或是有必要,对这方面,多过程编程,网络编程感兴趣的敌人能够watch my video video link:https://edu.51cto.com/course/...

December 28, 2020 · 1 min · jiezi

关于php:simpsmqtt-v112-版本发布首个支持-MQTT-v50-协议的-PHP-library

在此版本中反对了 auth 类型和上个版本中未反对属性,这也意味着 MQTT v5.0 的协定曾经反对结束,前面的版本也就剩下 Bug 修复和代码优化了 大部分的场景都是间接在 connect 时进行验证,所以没有用到 auth 类型 因为 auth 类型没有适合的场景进行测试,如果在应用时遇到问题能够向我反馈同时移除了自定义的 timeout 配置项,间接应用 Swoole 提供的配置项,在应用时能够间接在 Client 的第二个参数中设置,如: $swooleConfig = [ 'open_mqtt_protocol' => true, 'package_max_length' => 2 * 1024 * 1024, 'timeout' => 0.5,//总超时,包含连贯、发送、接管所有超时 'connect_timeout' => 1.0,//连贯超时,会笼罩第一个总的 timeout 'write_timeout' => 5.0,//发送超时,会笼罩第一个总的 timeout 'read_timeout' => 0.5,//接管超时,会笼罩第一个总的 timeout];$client = new Simps\MQTT\Client($config, $swooleConfig);更新日志加强反对 auth 类型 (8478e48) (5c5e031)减少 QoS ReasonPhrases (16f28aa)减少 Client 的 auth 办法 (84bf394)增加单元测试 (#18)增加类型申明 (#19)优化反复代码 (#20) (7868504)修复修复 MQTT v5.0 SUBACK type 谬误 (f06d0c9)移除移除自定义的 timeout 配置项 (#21)对于 simps/mqtt实用于 PHP 的 MQTT 协定解析和协程客户端,首个反对 MQTT v5.0 协定的 PHP library ...

December 28, 2020 · 1 min · jiezi

关于php:PHP设计模式之中介者模式

上回说道,咱们在外打工的常常会和一类人有很深的接触,那就是房产中介。大学毕业后马上就能在喜爱的城市买到房子的X二代不在咱们的思考范畴内哈。既然须要长期的租房,那么因为工作或者生存的变动,不可避免的一两年或者三五年就要和房产中介打一次交道。有的时候,咱们租房并不一定会晓得房主的信息,房主也不必晓得咱们的信息,全副都由中介来进行解决。在这里,中介就成为了咱们沟通的桥梁,这种状况其实就像是房主出国了或者在当地有事儿而将房子齐全的托管到了中介手中。相似于这种状况,在代码世界中,就是中介者模式的典型利用。 Gof类图及解释GoF定义:用一个中介对象来封装一系列的对象交互。 中介者使各对象不须要显式地互相援用,从而使其耦合涣散,而且能够独立地扭转它们之间的交互 GoF类图 代码实现abstract class Mediator{ abstract public function Send(String $message, Colleague $colleague);}class ConcreteMediator extends Mediator{ public $colleague1; public $colleague2; public function Send(String $message, Colleague $colleague) { if ($colleague == $this->colleague1) { $this->colleague2->Notify($message); } else { $this->colleague1->Notify($message); } }}形象进去的中介者和具体的实现,在这里,咱们假设有固定的两个共事类,让他们相互对话,所以进入的共事是1的时候,就去调用2的Notify办法,相当于是让2接管到了1发来的音讯 abstract class Colleague{ protected $mediator; public function __construct(Mediator $mediator) { $this->mediator = $mediator; }}class ConcreteColleague1 extends Colleague{ public function Send(String $message) { $this->mediator->Send($message, $this); } public function Notify(String $message) { echo "共事1失去信息:" . $message, PHP_EOL; }}class ConcreteColleague2 extends Colleague{ public function Send(String $message) { $this->mediator->Send($message, $this); } public function Notify(String $message) { echo "共事2失去信息:" . $message; }}共事类及具体的实现,这里咱们要确认的一点就是,每一个共事类,只意识中介者,并不意识另外的共事类,这就是中介者的特点,单方不必意识。 ...

December 28, 2020 · 2 min · jiezi

关于php:PHP-foreach-遍历数组时候如何使用-list

在 PHP 中,遍历一组非关联的多维数组,大部分代码是这样的: $items = array( array('var1', 'var2', 'var3'), array('var1', 'var2', 'var3'), array('var1', 'var2', 'var3'), array('var1', 'var2', 'var3'), array('var1', 'var2', 'var3'),);foreach ($items as $item){ list($var1, $var2, $var3) = $item; if ($var1 == $var2){ echo $var3; }}甚至在 foreach 外面没有用 list: foreach ($items as $item){ $var1 = $item[0]; $var2 = $item[1]; $var3 = $item[3]; if ($var1 == $var2){ echo $var3; }}其实当初能够在 foreach 外部利用 list 的赋值性能: foreach ($items as list($var1, $var2, $var3)){ if ($var1 == $var2){ echo $var3; }}在 PHP 7.1 之后,也反对关联数组了: ...

December 27, 2020 · 1 min · jiezi

关于php:PHP-中使用-int-进行类型转换时要比-intval-函数快6倍

PHP 5.6 之前是应用函数 func_num_args(),func_get_arg(),和 func_get_args() 实现传递可变参数列表 。 PHP 可变参数(...)PHP 5.6 引进了 ... 操作符,官网名称是 splat operator,或者 spread operator(数组延展操作符),也有人称为 Argument unpacking(参数解包)。 具体看 PHP 官网提供的例子就好了: 应用 ... 来拜访变量参数function sum(...$numbers) { $acc = 0; foreach ($numbers as $n) { $acc += $n; } return $acc;}echo sum(1, 2, 3, 4);输入:10 应用 ... 来传递参数function add($a, $b) { return $a + $b;}echo add(...[1, 2])."n";$a = [1, 2];echo add(...$a);下面都是输入:3 多个参数可变参数之前,还能够有别的参数,然而前面就不能有别的参数了,比方上面的例子: function display($name, ...$args){ echo '名称:'.$name; echo '其余信息:'; print_r($args);}理论利用例子咱们拿 WordPress 中判断以后用户是否有权限的函数 current_user_can() 来举例,阐明 ... 这个操作符如何改善的代码可读性的。 ...

December 27, 2020 · 1 min · jiezi

关于php:PHP设计模式之组合模式

互联网公司风行扁平化治理,也就是管理层级尽量少于或者不超过三层,作为一个底层的码农,你的CEO和你的职级也就相差3层以内。然而很多传统企业,则会有十分深的层级关系,从数据结构看,这种按职能进行分组的组织架构十分像一颗树。而咱们明天介绍的组合模式的作用就和这个企业组织架构层级的模式十分相似。 Gof类图及解释GoF定义:将对象组合成树形构造以示意“局部-整体”的层次结构。Composite使得用户对单个对象和组合对象的应用具备一致性 GoF类图 代码实现abstract class Component{ protected $name; public function __construct($name){ $this->name = $name; } abstract public function Operation(int $depth); abstract public function Add(Component $component); abstract public function Remove(Component $component);}形象进去的组合节点申明,在适当状况下实现所有类的公共接口的缺省行为,是所有子节点的父类。 class Composite extends Component{ private $componentList; public function Operation($depth) { echo str_repeat('-', $depth) . $this->name . PHP_EOL; foreach ($this->componentList as $component) { $component->Operation($depth + 2); } } public function Add(Component $component) { $this->componentList[] = $component; } public function Remove(Component $component) { $position = 0; foreach ($this->componentList as $child) { ++$position; if ($child == $component) { array_splice($this->componentList, ($position), 1); } } } public function GetChild(int $i) { return $this->componentList[$i]; }}具体的节点实现类,保留上级节点的援用,定义理论的节点行为。 ...

December 25, 2020 · 2 min · jiezi

关于php:全新官方接口php检测微信域名拦截检测微信域名被封

你的域名在微信被拦挡的3种常见状况1、域名因违规或有危险被拦挡(红色拦挡)2、相似taobao.com,douyin.com这种的歹意竞争式拦挡,淘宝、抖音等微信的竞争对手个别都是红色拦挡(红色拦挡)3、有一个两头页的拦挡,须要屡次点击按钮才能够跳转到你的域名的,多是一些新型域名后缀,例如.top .xyz .link后缀,这种状况,备案后能够解决(备案拦挡) 通过php get_headers()函数就能够剖析到后果这个下标为6是一个URL,在微信拜访后正是这个厌恶的页面! 如果切换为失常的链接的话,返回的headers是这样的 之前发过一次,然而之前的曾经不能用了当初又从新抓包,终于发现了,原来之前的接口批改了数据返回的地位,之前是返回下标为[1]的当初返回的地位下标是[6]既然这样那么代码就好写了~上面是代码,再也不必网上免费的api了 <?php// 返回JSONheader('Content-type: application/json;charset=utf-8'); // 官网API接口$api = get_headers('http://mp.weixinbridge.com/mp/wapredirect?url='.$_REQUEST['url']); // 判断是否被拦挡,次要是下标为6的节点返回的是weixin110就代表被封了if (trim(empty($_REQUEST['url']))) { $result = array( 'code' => 201, 'msg' => '请传入须要检测的URL', 'tips' => 'www.likeyun.cn' );}else if($api[6] !== 'Location: '.$_REQUEST['url'].''){ $result = array( 'code' => 202, 'msg' => '域名被拦挡', 'tips' => 'www.likeyun.cn' );}else{ $result = array( 'code' => 200, 'msg' => '域名失常', 'tips' => 'www.likeyun.cn' );} // 输入JSONecho json_encode($result,JSON_UNESCAPED_UNICODE);?>如何应用?1、新建wxcheck.php文件2、拷贝下面代码3、部署到服务器即可4、发动Get申请,URL格局如下 ...

December 23, 2020 · 1 min · jiezi

关于php:用-Composer-组建了个-PHP-框架

大概在两三年前本人就有过写个 PHP web 框架的想法,期间也尝试过来实际开发,但总是因为各种各样的起因并没有实现。 这次终于恒心下来,忙里偷闲的组建了一个本人的 PHP 微框架。前前后后零零碎碎的开发了快一个月的工夫,直到明天实现文档的编写,才向大家出现。 除了框架自身的(Coole)外围代码,还提供一个框架利用(coolephp/skeleton)模板,另外编写了一份简陋的文档, 望能给 也想写框架的人带来一点参考(大神请疏忽)。 生命周期 客户端向入口脚本 index.php 发动申请。入口脚本中创立利用,向利用中注册配置服务、外围服务、第三方服务。定义路由,载入到利用中。启动运行利用。创立申请对象。依据申请对象解析路由,创立控制器实例。动作调用模型数据,渲染到视图,生成响应对象。管道过滤响应。返回响应给客户端。终止生命周期。命令行界面 装置框架$ composer require guanguans/coole -vvv疾速开始<?phpuse Guanguans\Coole\App;use Guanguans\Coole\Facade\Router;use Symfony\Component\HttpFoundation\Request;require __DIR__.'/vendor/autoload.php';// 1. 创立利用$app = new App();$app['debug'] = true;// 2. 定义一个带中间件的路由Router::get('/', function (){ return 'This is the Coole framework.';})->setMiddleware(function (Request $request, Closure $next){ printf('Before request.<br>'); $response = $next($request); printf('<br>After request.'); return $response;});// 3. 监听运行$app->run();框架中每项性能职责所用到的组件guanguans/di - 容器(illuminate/container 的衍生版)symfony/http-kernel - HTTP 内核symfony/http-foundation - HTTP 对象管理层symfony/routing - 路由symfony/event-dispatcher - 事件调度器filp/whoops - 错误处理symfony/error-handler - 错误处理monolog/monolog - 日志mpociot/pipeline - 管道(中间件的实现)symfony/console - 命令行symfony/finder - 文件治理topthink/think-orm - ORMtwig/twig - 模板引擎vlucas/phpdotenv - envtightenco/collect - 汇合参考的文章及借鉴的框架https://symfony.com/doc/current/create_framework/index.html - 倡议浏览https://github.com/slimphp/Slim - 根本所有的内置组件都实现 PSR 的接口标准, 足够标准化。https://github.com/silexphp/Silexhttps://github.com/jadephp/jade - slince 大神本人实现了 HTTP 内核https://github.com/laravel/framework官网文档https://www.guanguans.cn/coole源码链接https://github.com/guanguans/coole - 框架外围代码https://github.com/coolephp/skeleton - 框架利用模板

December 22, 2020 · 1 min · jiezi

关于php:PHP设计模式之责任链模式

责任链模式,属于对象行为型的设计模式。 Gof类图及解释GoF定义:使多个对象都有机会解决申请,从而防止申请的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该申请,直到有一个对象解决它为止。 GoF类图 代码实现abstract class Handler{ protected $successor; public function setSuccessor($successor) { $this->successor = $successor; } abstract public function HandleRequst($request);}定义形象责任链类,应用$successor保留后继链条。 class ConcreteHandler1 extends Handler{ public function HandleRequst($request) { if (is_numeric($request)) { return '申请参数是数字:' . $request; } else { return $this->successor->HandleRequst($request); } }}class ConcreteHandler2 extends Handler{ public function HandleRequst($request) { if (is_string($request)) { return '申请参数是字符串:' . $request; } else { return $this->successor->HandleRequst($request); } }}class ConcreteHandler3 extends Handler{ public function HandleRequst($request) { return '我也不晓得申请参数是啥了,你猜猜?' . gettype($request); }}三个责任链条的具体实现,次要性能是判断传入的数据类型,如果是数字由第一个类解决,如果是字符串,则第二个类解决。如果是其余类型,第三个类对立解决。 ...

December 22, 2020 · 2 min · jiezi

关于php:simpsmqtt-v111-版本发布支持-MQTT5-中的大部分-Property

在 MQTT 5.0 协定中减少了很多属性。不同的报文类型之间,属性也会不同,一共有 27 种属性 CONNECT,CONNACK,PUBLISH,PUBACK,PUBREC,PUBREL,PUBCOMP,SUBSCRIBE,SUBACK,UNSUBSCRIBE,UNSUBACK,DISCONNECT 和 AUTH 数据包的可变报头中的最初一个字段是一组属性。在 CONNECT 数据包中,有效载荷的 Will Properties 字段中还有一组可选的 Properties 上个版本中也反对了几个属性,不过有些缺点,代码中存在大量的 if else,造成了太多的反复代码 因为具备不同标识符的属性的程序没有意义,所以此版本进行了重构,除了AUTHENTICATION_DATA(0x16)和CORRELATION_DATA(0x09)以外,反对了 25 种属性,也缩小了相干代码量 在一些理论的场景中,还须要通过后盾来给客户端公布音讯,想要间接在 fpm 中给客户端 publish 音讯的话,间接应用协程客户端是不可能的,所以在此版本中还减少了同步阻塞的客户端,用于在 fpm 中公布音讯 use Simps\MQTT\Client;/** * Support publish in fpm, need to specify clientType as Client::SYNC_CLIENT_TYPE */$client = new Client(getTestConnectConfig(), SWOOLE_MQTT_CONFIG, SWOOLE_SOCK_TCP, Client::SYNC_CLIENT_TYPE);$client->connect();$response = $client->publish('simps-mqtt/user001/update', '{"time":' . time() . '}', 1);var_dump($response);上面是残缺的更新日志 加强性能反对了在fpm中公布音讯 (#13)反对了更多的属性 (#15)增加了 ProtocolInterface (0e7c353)优化反复代码 (#12)修复修复 SOCKET_ECONNRESET (#6)对于 simps/mqtt实用于 PHP 的 MQTT 协定解析和协程客户端,第一个反对 MQTT v5.0 协定的 PHP library。 ...

December 21, 2020 · 1 min · jiezi

关于php:PHP设计模式之策略模式

策略模式,又称为政策模式,属于行为型的设计模式。 Gof类图及解释GoF定义:定义一系列的算法,把它们一个个封装起来,并且使它们能够互相替换。本模式使得算法可独立于应用它的客户而变动 。 GoF类图 代码实现interface Strategy{ function AlgorithmInterface();}class ConcreteStrategyA implements Strategy{ function AlgorithmInterface(){ echo "算法A"; }}class ConcreteStrategyB implements Strategy{ function AlgorithmInterface(){ echo "算法B"; }}class ConcreteStrategyC implements Strategy{ function AlgorithmInterface(){ echo "算法C"; }}定义算法形象及实现。 class Context{ private $strategy; function __construct(Strategy $s){ $this->strategy = $s; } function ContextInterface(){ $this->strategy->AlgorithmInterface(); }}定义执行环境上下文。 $strategyA = new ConcreteStrategyA();$context = new Context($strategyA);$context->ContextInterface();$strategyB = new ConcreteStrategyB();$context = new Context($strategyB);$context->ContextInterface();$strategyC = new ConcreteStrategyC();$context = new Context($strategyC);$context->ContextInterface();最初,在客户端按需调用适合的算法。 ...

December 21, 2020 · 1 min · jiezi

关于php:断点续传

断点续传断点续传就是使浏览器分段下载文件的一种实现形式。在 HTTP/1.1 开始反对。当咱们须要下载很大的文件时,如果一次性将文件取出而后返回给客户端,个别会导致OOM谬误。此时咱们就须要断点续传的技术将数据分批输入。 断点续传次要用到HTTP申请头中的content-range 字段,具体见下方代码注解 <?php$filesize = filesize("./logs/2020-06-09.log");header("Content-type: application/octet-stream"); // 二进制流数据header(sprintf('content-length:%u', $filesize)); // 指明文件的大小// 用于响应头,指定整个实体中的一部分的插入地位,他也批示了整个实体的长度。header(sprintf('content-range:bytes %s-%s/%s', 0, 1024, $filesize));$f = fopen("./logs/2020-06-09.log", 'r');while (!feof($f)) { echo fread($f, 1024); ob_flush();}

December 19, 2020 · 1 min · jiezi

关于php:如何使用FTP软件连接WordPress网站

本文蕴含FTP软件介绍、下载、不同主机创立FTP账号的办法、以及连贯WordPress网站的具体步骤。 本文原文首发于:https://loyseo.com/wordpress-...什么用FTP软件FTP是文件传输协定,FTP软件就是用来传输文件用的,本文将应用的收费FTP软件FileZilla。 用FTP软件连贯WordPress网站无能些啥?用FTP软件连贯WordPress网站,就是用FTP软件治理WordPress网站的文件,譬如上传文件、删除文件、批改文件、下载文件等等,利用它还能解决一些问题,譬如: 因为装置某个插件、或插件抵触、或bug、或遗记后盾地址等等,导致后盾进不去时,可进入FTP,将指定插件文件夹或插件的总文件夹(Plugins)的名字改一下,等于禁用了这个插件或所有插件,这样就能登录后盾了。装置较多或较大插件或主题时,间接能够在FTP里一次性上传如何应用FTP软件FileZilla连贯Wordpress网站Step1:下载并装置FileZilla点击FileZilla返回下载;若是无奈装置exe客户端,能够间接下载免装置的zip包,解压后间接点击文件夹内的filezilla运行。 Step2:登录网站主机商,新建或获取FTP账号及明码以外贸网站建设罕用主机SiteGround为示例,咱们接下来解说如何在SiteGround创立FTP账号。 在Siteground主机中创立FTP账号在网站的sitetools,进入Site》 FTP accounts页面输出账号及明码点击Create就能够胜利创立账号记住左边的FTP hostname和 Port,待会在FTP软件中须要输出 在Cpanel面板中创立FTP账号如果你买的主机是用的Cpanel面板(譬如Chemicloud、GreenGeeks),就依照上面的办法创立FTP账号 首先在Cpanel中找到FTP Accounts并进入 接下来输出账号信息,如下图所示,须要留神的是directory,零碎会为你默认生成内容,但你须要将它们全副删除放弃为空,或输出public\_html;如放弃为空,则这个FTP账号能拜访你的主机下所有文件夹,不限于网站文件夹,还有备份寄存的文件夹等等;若输出public\_html,则这个FTP账号能拜访你的主机下的网站文件夹。 账号创立实现后,在该页面下方会显示账号列表,其中蕴含了批改明码、查看FTP配置和下载客户端性能,如下图所示,你能够点击configure FTP client查看主机地址及端口(port:21) 在宝塔面板中创立FTP账号首先你须要确认曾经装置了下图中所示的Pure-Ftpd 1.0.49软件,若没有装置,请在软件商店中找到它并点击装置。 接下来,按如下步骤创立FTP账号 点击FTP菜单点击增加FTP按钮在弹出层中填写用户名填写明码抉择FTP须要连贯的网站的文件夹点击提交按钮即可 留神上图中,在增加FTP上方,有个以后FTP地址,其中的IP便是FTP软件中所需输出的主机地址,端口号默认是21 Step3:在FTP软件中连贯网站主机 关上FileZilla,点击左上角的主机图标在弹出层中,点击新站点设置新站点名称输出主机域名,若主机没有提供FTP域名,则输出IP;端口号默认为空即示意为21填写FTP账号的用户名和明码点击连贯按钮若连贯过程中呈现如下提醒,间接点击确定按钮即可 当连贯胜利后,你将看到如下界面,图中1是你的电脑,2是网站主机,你能够通过鼠标拖拽文件夹实现文件的下载或上传,从右侧拖拽到左侧就是下载;从左侧拖拽到右侧就是上传,留神拖拽前定好文件存储或上传的目录。 除了拖拽的办法,你也能够抉择文件后,点击右键开展操作项,譬如若是须要下载备份,按下图所示 在左侧抉择须要寄存备份的文件夹在右侧点选备份所在的文件夹在文件夹内找到备份,右键抉择下载文件正在下载并显示进度,若网络中断,也能够持续下载并抉择断点续传 本文原文由LOYSEO 公布,LOYSEO专一于WordPress外贸网站建设教程、Elementor教程。

December 19, 2020 · 1 min · jiezi

关于php:php-tp5-爬取淘宝天猫店铺的信息

淘宝店铺的信息的爬取间接上代码 //获取到传过来的链接 $link = input('link'); $content = $this->getRquest($link); //进行本义 $content = mb_convert_encoding($content, 'utf-8','GB2312'); //引入PHPquery工具 -- 寄存门路 /extend 目录下 \think\Loader::import('phpQuery.phpQuery', EXTEND_PATH); $html = \phpQuery::newDocumentFiles($link); //下载地址---https://code.google.com/archive/p/phpquery/downloads //如果下载不下来,能够间接百度寻找 或者留言邮箱 我看到后会发送 //获取店铺名 $shop_name= pq(".shop-name>a")->text(); $shop_name = mb_convert_encoding($shop_name,'ISO-8859-1','utf-8'); $shop_name = mb_convert_encoding($shop_name,'utf-8','GBK'); $shop_name = trim(str_replace("进入店铺","",$shop_name)); //获取掌柜号 preg_match_all('/<a class=\"seller-name J_TGoldlog\"[\s\S]*?target=\"_blank\">掌柜:([\s\S]* ?)<\/a><br>/',$content,$store_accounts); if (!$store_accounts[0]) { preg_match_all('/<p class=\"info-item\"[\s\S]*?"><span class="title">掌[\s\S]*?柜:<\/span>([\s\S]*?)<\/p>[\s\S]*?<span class="title">客[\s\S]*?服:/',$content,$store_accounts); } $owner = trim($store_accounts[1][0]); //此办法单纯的curl private function getRquest($url) { $headers = $this->randIp(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_ENCODING, ""); // 3. 执行并获取HTML文档内容 $output = curl_exec($ch); // 4. 开释curl句柄 curl_close($ch); return $output; } //也能够应用此办法 减少了header头 以及结构随机的ip private function getHeaderRequest($url){ //结构随机ip $ip_long = array( array('607649792', '608174079'), //36.56.0.0-36.63.255.255 array('1038614528', '1039007743'), //61.232.0.0-61.237.255.255 array('1783627776', '1784676351'), //106.80.0.0-106.95.255.255 array('2035023872', '2035154943'), //121.76.0.0-121.77.255.255 array('2078801920', '2079064063'), //123.232.0.0-123.235.255.255 array('-1950089216', '-1948778497'), //139.196.0.0-139.215.255.255 array('-1425539072', '-1425014785'), //171.8.0.0-171.15.255.255 array('-1236271104', '-1235419137'), //182.80.0.0-182.92.255.255 array('-770113536', '-768606209'), //210.25.0.0-210.47.255.255 array('-569376768', '-564133889'), //222.16.0.0-222.95.255.255 ); $rand_key = mt_rand(0, 9); $ip= long2ip(mt_rand($ip_long[$rand_key][0], $ip_long[$rand_key][1])); $ch = curl_init(); //cookie值应用本人的,能够在申请头中找到 $headers = array( "Content-type: text/xml;charset=\"utf-8\"", "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1", "Cache-Control: no-cache", "Pragma: no-cache", "cookie:lid=%E9%87%8E%E7%8B%BChy; cna=B129FQUBcC0CAXoEOzNJdBZo; ali_apache_track=c_mid=b2b-1791803016|c_lid=%E9%87%8E%E7%8B%BChy|c_ms=1; UM_distinctid=16cb31d9d5fbdc-0f653114eac331-SD; _is_show_loginId_chang-gsd6_false; __rn_alert__=false; isg=BD4-dSADSADs; l=dSD-sdSD-VC..", "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36", 'CLIENT-IP:'.$ip,'X-FORWARDED-FOR:'.$ip ); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_ENCODING, ""); // 3. 执行并获取HTML文档内容 curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); $output = curl_exec($ch); // 4. 开释curl句柄 curl_close($ch); return $output; }天猫店铺 //值获取能够依据获取到信息进行查找 $shop_name= pq("#shopExtra>.slogo>.slogo-shopname>strong")->text(); $owner = pq(".extend>ul>.shopkeeper>.right>a")->text();

December 19, 2020 · 2 min · jiezi

关于php:PHP设计模式之命令模式

命令模式,也称为动作或者事务模式,很多教材会用饭馆来举例。作为顾客的咱们是命令的下达者,服务员是这个命令的接收者,菜单是这个理论的命令,而厨师是这个命令的执行者。那么,这个模式解决了什么呢?当你要批改菜单的时候,只须要和服务员说就好了,她会转达给厨师,也就是说,咱们实现了顾客和厨师的解耦。也就是调用者与实现者的解耦。当然,很多设计模式能够做到这一点,然而命令模式可能做到的是让一个命令接收者实现多个命令(服务员下单、拿酒水、上菜),或者把一条命令转达给多个实现者(热菜厨师、凉菜厨师、主食徒弟)。这才是命令模式真正施展的中央!! Gof类图及解释GoF定义:将一个申请封装为一个对象,从而使你可用不同的申请对客户进行参数化;对申请排队或记录申请日志,以及反对可吊销的操作 GoF类图 代码实现class Invoker{ public $command; public function __construct($command) { $this->command = $command; } public function exec() { $this->command->execute(); }}首先咱们定义一个命令的接收者,或者说是命令的请求者更失当。类图中的英文定义这个单词是“期求者”。也就是由它来发动和操作命令。 abstract class Command{ protected $receiver; public function __construct(Receiver $receiver) { $this->receiver = $receiver; } abstract public function execute();}class ConcreteCommand extends Command{ public function execute() { $this->receiver->action(); }}接下来是命令,也就是咱们的“菜单”。这个命令的作用是为了定义真正的执行者是谁。 class Receiver{ public $name; public function __construct($name) { $this->name = $name; } public function action() { echo $this->name . '命令执行了!', PHP_EOL; }}接管者,也就是执行者,真正去执行命令的人。 ...

December 19, 2020 · 2 min · jiezi

关于php:重新组织代码

代码该当易于了解代码的写法该当使别人了解它所需的工夫最小化本书链接: https://www.ituring.com.cn/bo...把信息装进名字中清晰和准确比装可恶好;应用业余的词;应用具体的名字来更粗疏地形容事物;给变量名带上重要的细节;为作用域大的名字采纳更长的名字;有目的地应用大小写,下划线等;要多问本人几遍:“这个名字会被他人解读成其余的含意吗?” 要认真扫视这个名字,不会被误会的名字是最好的名字;命名极限最分明的形式是在要限度的货色前加上max_或者min_;为布尔值命名时,防止应用反义的词(例如disable_ssl);要小心用户对特定词的冀望。例如,用户会冀望get()或者size()是轻量的办法;审美统一的格调比“正确”的格调更重要;如果多个代码块做类似的事件,尝试让他们有同样的掠影;把代码按“列”对齐能够让代码更容易浏览;如果在一段代码中提到A,B,C,那么不要在另一段中说B,C,A,抉择一个有意义的秩序,并始终用这样的程序;用空行来把大块代码分成逻辑上的“段落”;正文正文的目标是尽量帮忙读者理解的和作者一样多;什么中央不须要正文: 能从代码自身中迅速地推断的事实;用来掩饰烂代码的“拐杖式正文”--应该把代码改好;你该当记录下来的想法包含: 对于为什么代码写成这样而不是那样的外在理由(“指导性批注”);代码中的缺点,应用像TODO:或者XXX:这样的标记;常量背地的故事,为什么是这个值;站在读者的立场上思考: 预料到代码中哪些局部会让读者说:“啊?” 并且给他们加上正文;为一般读者意料之外的行为加上正文;在文件/类的级别上应用“全局观”正文来解释所有的局部是如何一起工作的;用正文来总结代码块,使读者不至于迷失在细节中;正文该当有很高的信息/空间率;尽量准确地形容函数的行为;在正文中用精心筛选的输出/输入例子进行阐明;申明代码的高层次用意,而非显著的细节;用含义丰富的词来使正文简洁;控制流把条件,循环以及其余对控制流的扭转做的越“天然”越好,使用一种形式使读者不必停下来重读你的代码;绝对于谋求最小化代码行数,一个更好的度量办法是最小化人们了解它所需的工夫;当你对代码做改变时,从全新的角度扫视它,把它作为一个整体来对待;在写一个比拟时,把扭转的值写在右边并且把更稳固的值写在左边更好一些;你也能够重新排列if/else语句中的语句块,通常来讲,先解决正确的/简略的/乏味的状况;尽量不要用三目运算符;嵌套的代码块须要更加集中精力去了解,应该把它们改写成更加“线性”的代码来防止深浅套;通常来讲提前返回能够缩小嵌套并让代码整洁;表达式把你的超长表达式拆分成更容易了解的小块;要小心“智能”的小代码块--它们往往在当前会让他人读起来感到困惑;引入“解释变量”来代表较长的子表达式,这种形式有三个益处: 它把微小的表达式拆成小段;它通过用简略的名字形容子表达式来让代码文档化;它帮忙读者辨认代码中的次要概念;用德摩根定理来操作逻辑表达式--能够把布尔表达式用更整洁的形式重写(例如if(!(a&&!b))变成if(!a||b));有时须要把问题“反向”或者思考指标的对立面;变量与可读性你心愿你的共事随时都感觉是在面试吗;让你的变量对尽量少的代码行可见;操作一个变量的中央越多,越难以确定它的以后值;缩小变量,即那些障碍的变量;减小变量的作用域,越小越好,把变量移到一个有起码代码能够看到它的中央,眼不见,心不烦;只写一次的变量更好,那些只设置一次值的变量(或者const, final, 常量)使得代码更容易了解;从新组织代码把个别代码和我的项目专有的代码离开;应该把代码组织得一次只做一件事件;把想法变成代码,用自然语言形容解决方案;最好的代码就是没有代码;删除没用的代码;从我的项目中打消不必要的性能,不要适度设计;重新考虑需要,解决版本最简略的问题,只有能实现工作就行;经常性地通读规范库的整个API,放弃对他们的相熟水平 -- “不要反复造轮子”;测试测试也该当具备可读性,以便其余程序员能够难受地扭转或者减少测试;对使用者隐去不重要的细节,以便更重要的细节会更突出;让谬误音讯具备可读性;又简略又能实现工作的测试值更好;每个测试的最高一层应该越扼要越好,最好每个测试的输出/输入能够用一行代码来形容;如果测试失败了,它所收回的谬误音讯应该能让你容易跟踪并修改这个bug;应用最简略的并且可能残缺使用代码的测试输出;给测试函数取一个有残缺描述性的名字,以使每个测试所测到的货色很明确,不要应用test1(),而要应用test_<functionName>这样的名字;最重要的是,要使它易于改变和减少新的测试;

December 18, 2020 · 1 min · jiezi

关于php:从binswoft开始阅读Swoft框架源码八ConsoleProsser控制台处理器

解决办法中用到的router和cliApp都是在bean处理器初始化时生成的bean对象. public function handle(): bool{ if (!$this->application->beforeConsole()) { return false; } // 获取路由bean对象 /** @var Router $router */ $router = bean('cliRouter'); // 注册路由对象 // Register console routes CommandRegister::register($router); // 打印注册信息 CLog::info('Console command route registered (group %d, command %d)', $router->groupCount(), $router->count()); // 启动控制台app,接下来框架的工作交给控制台app接管 // Run console application if ($this->application->isStartConsole()) { bean('cliApp')->run(); } // 完结控制台处理器 return $this->application->afterConsole();}尽管路由对象和控制台app对象都是在bean处理器中初始化的,然而本章节还是有必要梳理一下这两个应用到的bean对象的初始化流程.因为bean处理器初始化bean的时候,如果bean对象有init办法,会调用init办法.所以,这两个对象的初始化咱们次要关怀两个办法:__constract和init. 先看router对象Swoft\Console\Router\Router: 因为此类没有上述两种办法,且bean配置中没有结构参数的配置,所以能够确定此对象只是单纯的new了进去放在了对象池中.没有其它的初始化动作.再看cliApp对象Swoft\Console\Application: public function __construct(array $options = []){ // 因为bean配置中没有这个bean的结构参数,所以此处的options是空数组 // 这个办法也等于没有做其它任何操作 ObjectHelper::init($this, $options);}因为没有init办法,所以cliApp的初始化简直也是什么也没干!显然,咱们在控制台输出的命令只能是在cliApp对象的run办法中得以调用了.接下来,咱们来看cliApp的run办法: ...

December 18, 2020 · 4 min · jiezi

关于php:PHP设计模式之原型模式

原型模式其实更形象的来说应该叫克隆模式。它次要的行为是对对象进行克隆,然而又把被克隆的对象称之为最后的原型,于是,这个模式就这样被命名了。说真的,从应用形式来看真的感觉叫克隆模式更贴切一些。 Gof类图及解释GoF定义:用原型实例指定创建对象的品种,并且通过拷贝这些原型创立新的对象 GoF类图 代码实现abstract class Prototype{ public $v = 'clone' . PHP_EOL; public function __construct() { echo 'create' . PHP_EOL; } abstract public function __clone();}首先咱们通过模仿的形式定义了一个原型,这里次要是模仿了__clone()这个办法。其实这是PHP自带的一个魔术办法,基本是不须要咱们去进行定义的,只须要在原型类中进行实现就能够了。当内部应用clone关键字进行对象克隆时,间接就会进入这个魔术办法中。在这个魔术办法外面咱们能够对属性进行解决,特地是针对援用属性进行一些独特的解决。在这个例子中,咱们只应用了一个值类型的变量。无奈体现出援用类型的问题,咱们将在前面的实例中演示对援用类型变量的解决。 class ConcretePrototype1 extends Prototype{ public function __clone() { }}class ConcretePrototype2 extends Prototype{ public function __clone() { }}模仿的具体实现的原型,其实就是次要去具体的实现__clone()办法。前面咱们看具体的例子时再阐明。 class Client{ public function operation() { $p1 = new ConcretePrototype1(); $p2 = clone $p1; echo $p1->v; echo $p2->v; }}$c = new Client();$c->operation();客户端应用clone来复制$p1,能够看到$p2也具备雷同的$v属性。 原型模式看似就是复制了一个雷同的对象,然而请留神,复制的时候,__construct()办法并没有被调用,也就是当你运行这段代码的时候,create只输入了一次。这也就带出了原型模式最大的一个特点——缩小创建对象时的开销。基于上述特点,咱们能够疾速的复制大量雷同的对象,比方要给一个数组中塞入大量雷同的对象时。复制进去的对象中如果都是值类型的属性,咱们能够任意批改,不会对原型产生影响。而如果有援用类型的变量,则须要在__clone()办法进行一些解决,否则批改了复制对象的援用变量中的内容,会对原型对象中的内容有影响。咱们的手机操作系统(也能够设想一下PC电脑的操作系统),都是怎么装置到设施中呢?其实都是不停的复制拷贝最后的那一套零碎。用微软的例子十分好阐明这个问题,当年微软可能成为一个帝国,其实也是因为他不停的将winodws操作系统拷贝复制到光盘中,而后卖给千家万户(当然,这里没中国什么事儿)。而中国市场呢,大量的高手破解了windows之后也是由这一份文件不停的复制拷贝才装到了咱们的电脑中。手机、智能设施等各类产品的操作系统、软件都是如此。一次开发有限拷贝正是软件行业暴利的起因。毕竟咱们的零碎也是由不少的工程师日以继夜的996在Android原生零碎的根底上开发进去的,连忙一直的复制到行将出厂的手机上吧!! 残缺代码:https://github.com/zhangyue0503/designpatterns-php/blob/master/08.prototype/source/prototype.php ...

December 18, 2020 · 1 min · jiezi

关于php:Composer-20-向下不兼容导致扩展安装出错

最近在部署服务器环境时,遇到一个由Composer 版本向下不兼容而引发的问题,记录一下。 问题形容后盾Api 利用是用ThinkPHP6.0 的多利用模式开发的,起初部署时,总是提醒找不到控制器。 过后就比拟郁闷,怎么会找不到控制器呢?这个异样通常只会在没有开启多利用模式时才会呈现,可是明明曾经开启了多利用模式,也装置了相干扩大(Composer 2.0.x 执行 composer install 没有间接抛出异样)。 正当我百思不得其解时,不经意间看到了我目前所应用的 Composer 版本是 2.0.x。 回头比照了一下我本地的版本:1.8,Google 一下才发现Composer 2.0 系列是最近才公布的,于是马上就想到了是否是 Composer 向下不兼容导致。 好家伙,真的是兼容性导致的问题: 解决办法既然是版本过高导致的兼容性问题,那就好办了,间接升高版本即可。 Composer 降级非常简单,不必从新编译装置,间接应用以下命令即可: composer self-update 1.8.0如果你不晓得有哪些版本可抉择,能够查看官网的公布历史。 参考链接ThinkPHP V6.0.5版本公布——兼容Composer2.0Composer 中文文档

December 17, 2020 · 1 min · jiezi

关于php:从binswoft开始阅读Swoft框架源码七EventProcessor事件处理器

通过Bean处理器后,咱们业务中要用到的组件大多都被放在了容器内.咱们要用到的时候能够从容器内获取这个bean对象,这让咱们的工作轻松了不少. 先看事件处理器的入口办法: public function handle(): bool{ if (!$this->application->beforeEvent()) { CLog::warning('Stop event processor by beforeEvent return false'); return false; } // 从容器内获取曾经加载的事件管理器 /** @var EventManager $eventManager */ $eventManager = bean('eventManager'); // 将ListenerRegister保留的事件监听和事件订阅实例保留到事件管理器上 // count1是监听实例的数量,count2是订阅实例的数量 [$count1, $count2] = ListenerRegister::register($eventManager); // 打印执行后果到控制台 CLog::info('Event manager initialized(%d listener, %d subscriber)', $count1, $count2); // Trigger a app init event // 触发APP初始化实现事件 Swoft::trigger(SwoftEvent::APP_INIT_COMPLETE); // 完结事件处理器工作 return $this->application->afterEvent();}总结: 因为事件管理器已被加载到bean容器中,所以以后处理器工作很少,只是将收集到的监听者和订阅者对象移交给事件管理器对立治理.另外,在事件处理器调用前要想增加事件监听,要通过Swoft\Event\ListenerRegister的addListener或addSubscriber办法来增加.事件管理器,前面可能会出独自章节进行剖析.

December 17, 2020 · 1 min · jiezi

关于php:yasd-调试器-v025-版本发布支持-PHP8-以及在-IDE-中使用调试

yasd 间隔上次公布曾经过来了十几天,当初公布到了 v0.2.5 版本,置信有许多的小伙伴曾经用上了 那么还有人记得上次公布时说过反对了哪些性能吗? 调试协程断点调试断点缓存查看调用栈单步调试上次公布之后就有小伙伴提交 issue,询问是否反对 PhpStorm 以及 VScode,那么它来了 @codinghuang 不负众望,曾经反对了 PHP8 和 IDE 调试 返回公众号观看如何在 IDE 中应用 yasd 调试器 这个版本反对的性能有: 反对 PHP8反对 IDE 调试(反对两种模式,IDE 和 cmd 调试)变量监督打印变量(反对打印对象等)不是吧不是吧?你还没有用过?快来试试 装置 yasd在编译装置之前你须要装置boost库。 macOS: brew install boostUbuntu: apt-get install libboost-all-devCentOS: yum install boost boost-devel拉取 master 分支的源码,或者从 GitHub 下载对应的release 版本 git clone https://github.com/swoole/yasd.git惯例编译流程 phpize --clean && \phpize && \./configure && \make clean && \make && \make install批改 php.ini 文件: ...

December 17, 2020 · 1 min · jiezi

关于php:从binswoft开始阅读Swoft框架源码六三BeanProcessor之bean初始化

通过后面2大节的工作,当初容器内曾经保留了残缺的bean定义对象和名称、别名映射. 本章的工作是梳理swoft如何利用bean的定义对象,生成最终可供业务应用的bean对象. 初始化bean的入口办法: private function initializeBeans(): void{ // 遍历保留的定义对象数组,失去bean名称和定义对象 /* @var ObjectDefinition $objectDefinition */ foreach ($this->objectDefinitions as $beanName => $objectDefinition) { // 获取定义对象的类型 $scope = $objectDefinition->getScope(); // 如果是request类型 // Exclude request if ($scope === Bean::REQUEST) { // 将定义对象转存到request定义对象数组 $this->requestDefinitions[$beanName] = $objectDefinition; // 从全局定义对象数组中删除这个定义对象 unset($this->objectDefinitions[$beanName]); // 跳过 continue; } // 如果类型是session // Exclude session if ($scope === Bean::SESSION) { // 转存定义对象到session定义对象数组 $this->sessionDefinitions[$beanName] = $objectDefinition; // 从全局定义对象数组中移除这个定义对象 unset($this->objectDefinitions[$beanName]); // 跳过 continue; } // 创立bean对象 // New bean $this->newBean($beanName); }}创立bean对象: ...

December 17, 2020 · 4 min · jiezi

关于php:PHP设计模式之迭代器模式

一说到这个模式,就不得不提循环语句。在《大话设计模式》中,作者说道这个模式当初的学习意义更大于实际意义,这是为什么呢?当然就是被foreach这货给整得。任何语言都有这种相似的语法能够方便快捷的对数组、对象进行遍历,从而让迭代器模式从居高临下的23大设计模式中的明星缓缓成为了路人。特地是咱们这门PHP语言,PHP的弱小之处就在于对于数组的灵便操作,自身就是hashmap的构造,天然会有各种不便的数组操作语法,而foreach也是咱们最罕用的语句,甚至比for还罕用。 Gof类图及解释GoF定义:提供一种办法程序拜访一个聚合对象中各个元素,而又不需裸露该对象的外部示意 GoF类图 代码实现interface Aggregate{ public function CreateIterator();}class ConcreteAggregate implements Aggregate{ public function CreateIterator() { $list = [ "a", "b", "c", "d", ]; return new ConcreteIterator($list); }}首先是聚合类,也就是能够进行迭代的类,这里因为我是面向对象的设计模式,所以迭代器模式针对的是对一个类的内容进行迭代。在这里,其实咱们也只是模仿了一个数组交给了迭代器。 interface MyIterator{ public function First(); public function Next(); public function IsDone(); public function CurrentItem();}class ConcreteIterator implements MyIterator{ private $list; private $index; public function __construct($list) { $this->list = $list; $this->index = 0; } public function First() { $this->index = 0; } public function Next() { $this->index++; } public function IsDone() { return $this->index >= count($this->list); } public function CurrentItem() { return $this->list[$this->index]; }}迭代器闪亮退场,次要实现了四个办法来对汇合数据进行操作。有点像学习数据结构或数据库时对游标进行的操作。用First()和Next()来挪动游标,用CurrentItem()来取得以后游标的数据内容,用IsDone()来确认是否还有下一条数据。所以,这个模式也另称为游标模式。 ...

December 17, 2020 · 2 min · jiezi

关于php:LeetCode-面试题0105一次编辑

原文链接:何晓东 博客 面试题 01.05. 一次编辑字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数断定它们是否只须要一次(或者零次)编辑。  示例 1: 输出: first = "pale"second = "ple"输入: True示例 2: 输出: first = "pales"second = "pal"输入: False起源:力扣(LeetCode)链接:https://leetcode-cn.com/probl... 解题思路 1暴力破解,都从开始到结尾查找字符,如果遇到不相等的一个,间接比拟两者残余的字符串是否统一,如果不统一,则须要大于一次的机会去更新能力保持一致。如果前面的相相等,则只有这一位不同,更新一次就能够。 代码实现: class Solution { /** * @param String $first * @param String $second * @return Boolean */ function oneEditAway($first, $second) { $fl = strlen($first); $sl = strlen($second); // 长度差 > 1 间接返回 false if (abs($fl - $sl) > 1) return false; // 为了不便接下来的判断,放弃 $first 更长 if ($sl > $fl) return $this->oneEditAway($second, $first); for ($i = 0; $i < $sl; $i++) { // 如果其中一位不统一,则比拟残余字符串是否统一 if ($first[$i] != $second[$i]) { return substr($first, $i + 1) == substr($second, $fl == $sl ? $i + 1 : $i); } } return true; }}双指针别离从头 尾查找雷同字符串,遇到不同的就进行,相当于获取了从头开始雷同字符串的最大索引值,从尾开始的最小索引值,如果他们的长度差异都 < 1 则一次编辑能够相等。 ...

December 16, 2020 · 2 min · jiezi

关于php:从binswoft开始阅读Swoft框架源码六二BeanProcessor之bean配置解析

通过上一节的注解解析后,swoft将获取到的注解对象解析成了定义对象,实现了对这些原始注解对象的梳理工作. 本大节将梳理获取到的这些定义对象的解析. 解析定义对象的入口办法: private function parseDefinitions(): void{ // 实例化解析器,将后面解析好的数据传递进去 $annotationParser = new DefinitionObjParser( $this->definitions, $this->objectDefinitions, $this->classNames, $this->aliases ); // 调用解析器的解析办法 // Collect info $definitionData = $annotationParser->parseDefinitions(); // 将返回的后果保留在容器上 [$this->definitions, $this->objectDefinitions, $this->classNames, $this->aliases] = $definitionData;}解析器的入口办法: public function parseDefinitions(): array{ // 遍历bean配置,失去bean名称和配置(定义) foreach ($this->definitions as $beanName => $definition) { // 如果曾经通过上一节的注解解析,生成了这个定义对象 if (isset($this->objectDefinitions[$beanName])) { // 获取这个定义对象 $objectDefinition = $this->objectDefinitions[$beanName]; // 重置这个定义对象 $this->resetObjectDefinition($beanName, $objectDefinition, $definition); // 持续下一个 continue; } // 否则,依据bean配置创立定义对象 $this->createObjectDefinition($beanName, $definition); } return [$this->definitions, $this->objectDefinitions, $this->classNames, $this->aliases];}重置定义对象: ...

December 16, 2020 · 3 min · jiezi

关于php:php常用类库工具组件

monolog/monologcomposer https://packagist.org/packages/monolog/monologgithubhttps://github.com/Seldaek/monologMonolog sends your logs to files, sockets, inboxes, databases and various web services。Laravel,Symfony 等php框架内置monolog作为日志服务。新版曾经实现 PSR-3 接口标准

December 16, 2020 · 1 min · jiezi

关于php:从binswoft开始阅读Swoft框架源码六一BeanProcessor之注解解析

Bean又是一个Swoft的外围概念.BeanProcessor就是能在Swoft中应用Bean的根底. 因为bean处理器全副由swoft原生实现,所以代码量较大,逻辑也比较复杂,所以bean处理器这一模块将分为三个子章节(注解对象解析、定义对象解析、初始化bean)来进行剖析. 这里先介绍一个概念(这是作者本人的了解,并非官网的解释):定义对象 首先,先看bean的概念: 1.bean对象实际上就是一个对象模版,不同的bean类型代表了如何依据这个模版对象返回对应的对象.2.bean总共有4种类型: singleton、prototype、request和session. singleton类型间接返回这个模版对象自身. prototype是将这个模版对象作为新对象的原型,返回模版对象的克隆对象. request和session是依据模版对象克隆出新的对象,而后在某一种条件下放弃单例,直至条件不满足新对象被销毁.而后基于模版这个概念,得出定义对象的概念: 用来定义返回对象类型、构造和内容的模版.仍旧先从入口办法handle动手: public function handle(): bool{ if (!$this->application->beforeBean()) { return false; } // 实例化handler $handler = new BeanHandler(); // 获取所有定义的bean配置 $definitions = $this->getDefinitions(); // 获取在注解处理器中parseOneClassAnnotation办法注册的parser对象 $parsers = AnnotationRegister::getParsers(); // 获取注解处理器注册的注解对象 $annotations = AnnotationRegister::getAnnotations(); // 将获取到的bean配置保留到bean容器中 // 这里的BeanFactory实际上是将内容又转交给了Container BeanFactory::addDefinitions($definitions); // 将获取的注解对象转交给bean容器 BeanFactory::addAnnotations($annotations); // 将获取的parser对象转交给bean容器 BeanFactory::addParsers($parsers); // 将后面实例化的handler设置为bean容器的handler BeanFactory::setHandler($handler); // bean容器初始化 // 后附初始化代码 BeanFactory::init(); $stats = BeanFactory::getStats(); CLog::info('Bean is initialized(%s)', SwoftHelper::formatStats($stats)); /* @var Config $config */ $config = BeanFactory::getBean('config'); CLog::info('Config path is %s', $config->getPath()); if ($configEnv = $config->getEnv()) { CLog::info('Config env=%s', $configEnv); } else { CLog::info('Config env is not setting'); } return $this->application->afterBean();}getDefinitions实现: ...

December 16, 2020 · 7 min · jiezi

关于php:首届HarmonyOS开发者创新大赛正式启动-一起创造无限可能

12月16日,以“一起发明有限可能”为主题的“HarmonyOS开发者翻新大赛”正式启动。本次大赛自12月16日起开启报名,将继续至2021年5月15日完结,致力于开掘优良的利用翻新人才及我的项目,通过学习HarmonyOS,创造性开发出具备全新体验、全新交互的跨终端利用,并为其链接相干生态资源,减速HarmonyOS翻新利用落地。据悉,大赛将由8位权威评审团层层提拔,20位业余导师带队领导,通过10余场线下流动培训,最终23个团队或集体将怀才不遇取得总价值150万元的现金及物质奖励。 领先体验全新开发工具链 高效开发翻新利用 在12月16日HarmonyOS 2.0手机利用开发者Beta版公布流动上,华为带来了一系列手机开发者Beta版配套降级的开发工具和接口,让开发者可能更高效便捷地开发跨端利用。 首先,HarmonyOS 2.0手机利用开发者Beta版通过分布式用户程序框架以及15000+个APls,将简单的设施间协同封装成简略的接口,实现一次开发,多端部署的个性,防止了开发者在不同设施间的反复开发。 其次,HarmonyOS 2.0手机利用开发者Beta版通过分布式UI框架,可自适应不同屏幕尺寸,开发效率倍增。针对各类不同设施有不同交互方式,HarmonyOS的归一化控件设计让开发者只需关注交互自身,助力跨端交互开发。 第三,全新版本的集成开发工具DevEco Studio 2.0 Beta3凋谢了9套手机利用模板,笼罩新闻、购物等利用场景,大大减少了代码输出的复杂度。同时,DevEco Studio还实现了多端界面预览和实时反馈,模仿仿真有限靠近真机,让利用开发者的跨端开发与调测效率大增。 在本次HarmonyOS开发者翻新大赛上,参赛团队将领先体验到这些平台工具链和生态体系。此外,得益于HarmonyOS为设施和利用开发者提供的欠缺的开发计划,参赛者能够更加专一于业务开发和翻新,打造出本人专属的翻新利用。 权威导师评委深度反对 打造翻新开发者比赛平台 本次大赛除了提供全新降级的开发工具,还邀请了蕴含中国科学技术大学物理电子和计算机双学位韦东山、UnityMarvel创始人李宁、朱老师物联网大讲堂创始人朱有鹏、金牌讲师张荣超等在内的20位业内资深开发者组成业余导师阵容,采纳翻新的导师辅导模式,帮忙开发者疾速成长,产出优质作品。开发者在参赛报名时可抉择喜爱的导师组成战队,并享受由业余导师提供的领导,包含赛道抉择、根底培训、创意与实战反对、作品宽度拓展等专业性倡议,从参赛到提交作品全周期都能失去导师的深度反对。 除了弱小的导师阵容外,大赛还邀请了8位行业权威专家组建评审团,以分布式技术个性、创新性、乏味/实用度、商业前景、性能齐备度等五大方面为参考,作为最终决赛的评判规范,全方位考查参赛者的作品,甄选优质利用。 培养优质开发者翻新土壤 HarmonyOS生态继续凋敝 经验了短短一年工夫的倒退,HarmonyOS实现了由1.0向2.0的降级,并公布了HarmonyOS 2.0 手机利用开发者Beta版,随着版本的不断完善,生态体系的搭建也迎头赶上。目前曾经和TOP1000的利用合作伙伴、 20多家出名的硬件合作伙伴开展单干,造成超过10万的人才生态圈。此外,华为还向参加HarmonyOS生态建设的开发者提供了全方位反对,包含开发者反对团队、培训课程、开发文档、开发者社区等,超过10万开发者已参加华为赋能流动,踊跃为HarmonyOS生态建设做奉献。 目前,挪动互联网的翻新还局限在手机单设施上,HarmonyOS是万物互联时代的操作系统,致力于打造全场景超级终端的体验,可能使开发者发明出超过单端的利用体验,轻松取得更多的流量入口,关上新的利用翻新之门。心愿开发者疾速进入该畛域,疾速把握基于该平台的技能,并打造出本人的超级终端利用。 12月16日起,“HarmonyOS开发者翻新大赛”已正式开启报名。退出大赛,领先博得挪动产业的下一个十年!

December 16, 2020 · 1 min · jiezi

关于php:PHP设计模式之观察者模式

观察者,貌似在很多科幻作品中都会有这个角色的呈现。比方我很喜爱的一部美剧《危机边缘》,在这个剧集中,观察者不停的穿越时空记录着各种各样的人或事。然而,设计模式中的观察者可不只是站在边上看哦,这里的观察者是针对主体产生的状态扭转来做出对应的动作。 Gof类图及解释GoF定义:定义对象间的一种一对多的依赖关系,当一个对象的状态产生扭转时,所有依赖于它的对象都失去告诉并被自动更新 GoF类图 代码实现interface Observer{ public function update(Subject $subject): void;}观察者的形象接口,没啥可说的吧,就是让你实现一个具体的Update就能够了 class ConcreteObserver implements Observer{ private $observerState = ''; function update(Subject $subject): void { $this->observerState = $subject->getState(); echo '执行观察者操作!以后状态:' . $this->observerState; }}具体的观察者,实现update()办法,这里咱们拿到了Subject类,从而能够取得其中的状态 class Subject{ private $observers = []; private $stateNow = ''; public function attach(Observer $observer): void { array_push($this->observers, $observer); } public function detach(Observer $observer): void { $position = 0; foreach ($this->observers as $ob) { if ($ob == $observer) { array_splice($this->observers, ($position), 1); } ++$position; } } public function notify(): void { foreach ($this->observers as $ob) { $ob->update($this); } }}Subject父类,保护一个观察者数组,而后有增加、删除以及循环遍历这个数组的办法,目标是可能不便的治理所有的观察者 ...

December 16, 2020 · 2 min · jiezi

关于php:Swoole-协程快速上手

最近有幸读到 daydaygo 的 swoole 协程初体验,一文从协程的执行的角度窥探 Swoole 的协程调度,并具体阐明了为什么协程会快。 文章通俗易懂,笔者在此基础上减少了一些本人的了解,以此成文。 次要从以下两个方面来理解协程: 协程的执行程序:协程调度协程为什么快:缩小IO阻塞带来的性能劣势协程执行程序依照常规,先来看一个最简略的协程代码。 <?phpgo(function () { echo "1".PHP_EOL;});echo "2".PHP_EOL;go(function () { echo "3".PHP_EOL;});在Swoole中 Swoole\Coroutine::create 等价于 go 函数(Swoole\Coroutine 前缀的类名能够映射为 Co),用于创立一个协程。 该函数承受一个回调函数作为参数,回调函数的内容就是协程须要执行的内容。 下面的代码执行后果为: 123从执行后果的角度来看,协程版的代码和传统的同步代码,看起来并无差别。但协程的理论执行过程却是: 运行下面那段协程代码,生成一个新过程当代码执行到go()局部时,会在以后协程中创立一个协程,输入1,协程退出代码持续向下执行,输入 2再次遇到go()函数,输入3协程退出,过程退出,执行实现协程调度\Co::sleep() 函数和sleep()函数差不多,然而它模仿的是 IO 期待。 <?phpgo(function () { // 只新增了一行代码 Co::sleep(1); echo "1".PHP_EOL;});echo "2".PHP_EOL;go(function () { echo "3".PHP_EOL;});执行后果如下: 231怎么不是程序执行的了?理论执行过程: 运行下面那段协程代码,生成一个新过程遇到 go(),在以后过程中创立一个协程协程向下执行遇到IO 阻塞,协程让出管制,进入协程调度队列过程持续向下执行,输入 2创立第二个协程,输入3第一个协程准备就绪,输入 1协程退出,过程退出,执行实现到这里,曾经能够看到Swoole 中协程与过程的关系,以及协程调度的过程。 上面这张图能够很清晰的看到二者区别与分割: 协程快在哪里?大家应用协程,听到最多的起因,可能就是因为协程快。那协程相比传统同步代码倒底快在哪里呢? 首先,咱们来理解一下计算机中的两类工作。 CPU密集型CPU 密集型也叫计算密集型, 特点是须要进行大量科学计算,比方计算圆周率、对视频进行高清解码,吃CPU。 IO 密集型波及到网络、磁盘IO的工作都是IO密集型工作,特点是不吃CPU,工作的大部分工夫都在期待IO操作实现,因为IO的速度远远低于CPU和内存的速度。 其次须要理解两个概念: 并行:同一时刻,同一CPU只能执行一个工作,要N个工作同时执行,就须要有多个CPU 才行。并发:同一时刻执行N 个工作。因为CPU 工作切换速度十分快,曾经快到了人类感知极限。理解了这些根底之后,对协程的能力是不是也更清晰了一些,以及协程为什么会“快”了。 ...

December 15, 2020 · 1 min · jiezi

关于php:在-Swoole-中使用-WebSocket-服务端和客户端

编写前端及服务器端代码创立一个前端页面,连贯到本地的WebSocket服务器: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>WebSocket</title> </head> <body> <input id="sendTxt" type="text"> <button id="sendBtn">发送</button> <div id="recv"></div> </body> <script type="text/javascript"> var wsServer = 'ws://127.0.0.1:8081'; var websocket = new WebSocket(wsServer); websocket.onopen = function (evt) { console.log("Connected to WebSocket server."); document.getElementById("recv").innerHTML = "Connected to WebSocket server."; }; websocket.onclose = function (evt) { console.log("Disconnected to WebSocket server."); }; websocket.onmessage = function (evt) { console.log('Retrieved data from server: ' + evt.data); document.getElementById("recv").innerHTML = 'Retrieved data from server: ' + evt.data; }; websocket.onerror = function (evt, e) { console.log('Error occured: ' + evt.data); document.getElementById("recv").innerHTML = 'Error occured: ' + evt.data; }; document.getElementById("sendBtn").onclick = function() { var txt = document.getElementById("sendTxt").value; websocket.send(txt); } </script></html>创立一个HTTP服务器文件,用来接管前端的页面申请: ...

December 15, 2020 · 2 min · jiezi

关于php:simpsmqtt适用于-PHP-的-MQTT-协议解析和协程客户端

MQTT 是一种基于公布/订阅(publish/subscribe)模式的"轻量级"通信协定,作为一种低开销、低带宽占用的即时通讯协定,曾经成为物联网的重要组成部分 Swoole 也给 PHP 提供了开发物联网我的项目的能力,只须要设置一个 open_mqtt_protocol 选项,启用后就会解析 MQTT 包头,在 Worker 过程的 onReceive 事件每次都会返回一个残缺的 MQTT 数据包 当然其余的也有,例如 Workerman 之前提供的 异步 mqtt 客户端库 ,还有其余的开源库,这里就不一一介绍了 Simps 的第一个版本 MQTT 库 就是参考了 Workerman 的实现,使其可能应用 Swoole 的协程能力,同时也修复了一些问题 在此也要感激 @walkor 对 PHP 生态作出的奉献 第一个版本的实现是放在了框架当中,限度了一些用户的应用。于是又开始了重构,将 MQTT 独立为一个 library ,不便用户应用的同时也丰盛了 PHP 生态,让 PHP 程序员不再局限于 Web 开发 在第一个版本公布之后,Simps 的交换群中也有不少用户询问 MQTT 的问题,Swoole 也修复了一些相干的 Bug,当初应用 PHP + Swoole 去开发物联网相干的我的项目应该是锦上添花 同时第一个版本的 MQTT 库,只反对 MQTT 3.x,不反对 MQTT 5.0,在 GitHub 上也没有找到相干反对的类库,所以在重构了 3.x 版本之后,也反对了一下 MQTT 5.0 ...

December 15, 2020 · 3 min · jiezi

关于php:PHP设计模式之适配器模式

这个模式始终以来都有一个很经典的例子,那就是插座!没错,当咱们从国外买回来电器,或者游览出差去国外的时候,常常会须要一个电源适配器,因为我国的电压规范是220伏,而其余国家则有110伏的规范。而这个电源适配器正是适配器模式的一种标记。当对象不太符合要求的时候,给他加一个适配器呗!! Gof类图及解释GoF定义:将一个类的接口转换成客户心愿的另外一个接口。Adapter模式使得本来因为接口不兼容而不能一起工作的那些类能够一起工作 GoF类图继承式 组合式 代码实现interface Target{ function Request() : void;}定义一个接口契约,也能够是一个失常的有实现办法的类(前面的例子咱们会用类) class Adapter implements Target{ private $adaptee; function __constuct($adaptee){ $this->adaptee = $adaptee; } function Request() : void { $this->adaptee->SpecificRequest(); }}适配器实现这个接口契约,让Request()办法得以实现,但请留神,咱们真正调用的其实是Adaptee类中的办法 class Adaptee { function SpecificRequest() : void{ echo "I'm China Standard!"; }}适配器有两种模式,上方类图中给出了,咱们代码实现的组合模式的继承模式的在GoF书中是以C++为示例的,因为C++能够实现多重继承,但当初风行的大部分语言是以接口为模式的,也能够实现,但应用这种模式的适配器不多其实还是面向接口编程的一种思维,相似于装璜器对旧性能的包装,咱们这里就是间接去进行了替换,但对外的调用还是放弃不变适配器模式其实很好了解,代码真的就只有这么点又说到我的手机工厂了,这回咱们的生意真的做大了哦!卖到泰国、新加坡、印度尼西亚去了,反正有咖喱的中央都有咱们的身影了。据说是咱们出了个咖喱色。换壳这事儿可不齐全是因为受到诺X亚的影响,而是真的通过长期的调研咱们发现不同色彩在不同的中央销量会更好。于是,富X康在原有的手机壳生产线(Target)上为咱们加装了一个喷涂适配器(adapter),当咱们须要其余色彩的壳时,只须要这个适配器换不同的颜料就好啦(adaptee),间接装上这个喷涂器,新的色彩的手机就诞生了。而当向另外一个国家扩大业务时,咱们换颜料就行啦,用太久了不行就连喷头也换掉(是不是想起了连供打印机) 残缺代码:适配器模式 实例持续发短信,看我能编到什么时候~~~ 各位大拿在对接信息、领取类的接口时,常常会应用这些平台提供的SDK。特地是有了Composer之后,装置SDK就更加的不便了,然而,又有一个重大的问题,这帮人做的SDK虽说性能实现大同小异,但命名可是千差万别啊!!咱们的零碎原来始终应用的阿里云的业务,然而这回要减少极光和百度云的信息性能,一来做个后备,二来依据不同业务应用不同的接口达到平安或节约的目标,有没有方法对立一下他们对外的接口,让咱们应用他们的SDK时可能十分不便的和之前应用大家都曾经很习惯的阿里云的接口一样呢?当然有,给他们各自都上个适配器呗,实例化的时候大不了里面再套个工厂返回不同的适配器就好啦,只有适配器里的实现办法和阿里云一样就OK啦! 短信发送类图 残缺源码:短信发送适配器办法 <?phpclass Message{ public function send(){ echo "阿里云发送短信!" . PHP_EOL; } public function push(){ echo "阿里云发送推送!" . PHP_EOL; }}class JiguangSDKAdapter extends Message{ private $message; public function __construct($message){ $this->message = $message; } public function send(){ $this->message->send_out_msg(); } public function push(){ $this->message->push_msg(); }}class JiguangMessage{ public function send_out_msg(){ echo "极光发送短信!" . PHP_EOL; } public function push_msg(){ echo "极光发送推送!" . PHP_EOL; }}class BaiduYunSDKAdapter extends Message{ private $message; public function __construct($message){ $this->message = $message; } public function send(){ $this->message->transmission_msg(); } public function push(){ $this->message->transmission_push(); }}class BaiduYunMessage{ public function transmission_msg(){ echo "百度云发送短信!" . PHP_EOL; } public function transmission_push(){ echo "百度云发送推送!" . PHP_EOL; }}$jiguangMessage = new JiguangMessage();$baiduYunMessage = new BaiduYunMessage();$message = new Message();// 原来的老零碎发短信,应用阿里云$message->send();$message->push();// 局部模块用极光发吧$jgAdatper = new JiguangSDKAdapter($jiguangMessage);$jgAdatper->send();$jgAdatper->push();// 局部模块用百度云发吧$bdAatper = new BaiduYunSDKAdapter($baiduYunMessage);$bdAatper->send();$bdAatper->push();阐明在这个例子中,咱们有两个适配器,因为有两个SDK须要咱们去适配,谁说只能有一个电源转换器,万一哪个神奇的国家是用500伏的电压呢,所以还是多带个电源转换器吧这里咱们是继承的Message类,因为Message类是之前曾经写好的代码,外面可能有一些能够专用的办法,所以并没有做接口形象。能够思考在重构代码的时候实现提取一个形象接口,但在这里只是为了演示适配器不肯定只是能去针对接口,只有和原对象保持一致,不去继承什么也是能够的,毕竟咱们是弱类型语言,如果是相似于Java的强类型,那么继承或者实现还是很有必要的(多态性)组合式的适配器与装璜器相似,都会保护一个内部对象,装璜器更多的会应用原来的类中的办法,对其进行减少性能的操作,而适配器则很少去减少性能,而是间接替换掉Laravel中的Filesystem模块,有一个FilesystemAdapter类,我感觉没啥可说的了,很显著的通知大家咱用了适配器模式,好好钻研一下吧当你想应用一个类,但他提供的内容跟你的业务又不太匹配的时候;或者你想创立一个类,能够与其余不相干的类或不可预感的类协同工作的时候,无妨试试适配器模式吧下期看点事件订阅有没有据说过?没有?如果地震算一个事件的话,那么一旦产生这个劫难了,马上会有品种政府部门和社会团队开始口头,救济、抢险等各种工作马上开展,咱们能够把整个社会力量都当做是订阅者,包含咱们每一个都会很关怀灾区的状况。在这里,咱们所有人都是观察者。这下就很容易了解观察者模式了吧,下节咱们再详述! ...

December 15, 2020 · 1 min · jiezi

关于php:从零搭建php环境php8扩展swoole

一、下载1、https://pecl.php.net/get/swoole-4.5.9.tgz下载到本地,文件传输上传到 /usr/local/src/2、wget -P /usr/local/src/ https://pecl.php.net/get/swoole-4.5.9.tgz 二、解压、编译、装置1、解压缩 > cd /usr/local/src/> tar xzf swoole-4.5.9.tgz> cd swoole-4.5.92、检测、编译 > /usr/local/php8/bin/phpize> ./configure --with-php-config=/usr/local/php8/bin/php-config> make问题1: configure: error: in `/usr/local/src/swoole-src-4.5.9':configure: error: C++ preprocessor "/lib/cpp" fails sanity check问题1解决: > yum install glibc-headers gcc-c++3、装置 > make install4、配置php扩大 > vim /usr/local/php8/etc/php.ini> # 应用查找命令 /extension ,在 ;zend_extension=opcache 的下面一行加上 > # extension=swoole.so> # :wq 保留退出> service php-fpm start # 启动php-fpm服务> php -m | grep swoole # 检测扩大装置装置胜利

December 15, 2020 · 1 min · jiezi

关于php:Swoole-协程学习

第一次接触协程这个概念,是在学习Swoole时,那时看官网文档并不能齐全了解协程到底是个什么货色以及该如何正确的应用它。 起初逐步看了一些写的比拟艰深的文章,加上本人的一些了解,逐渐开始对协程有一些意识了。 意识协程协程不是过程或线程,其执行过程更相似于子例程,或者说不带返回值的函数调用。 下面那句话很要害,一句话就把协程是什么,不是什么说分明了。 上面这张图能够很清晰的看到协程与多过程的区别: 执行程序上面这段代码次要做了三件事:写入文件、发送邮件以及插入数据。 <?phpfunction task1(){ for ($i=0;$i<=300;$i++){ //写入文件,大略要3000微秒 usleep(3000); echo "写入文件{$i}\n"; }}function task2(){ for ($i=0;$i<=500;$i++){ //发送邮件给500名会员,大略3000微秒 usleep(3000); echo "发送邮件{$i}\n"; }}function task3(){ for ($i=0;$i<=100;$i++){ //模仿插入100条数据,大略3000微秒 usleep(3000); echo "插入数据{$i}\n"; }}task1();task2();task3();这段代码和下面不同的是,这三件事件是穿插执行的,每个工作执行完一次之后,切换到另一个工作,如此循环。 相似于这样的执行程序,就是协程。 <?phpfunction task1($i){ //应用$i标识 写入文件,大略要3000微秒 if ($i > 300) { return false;//超过300不必写了 } echo "写入文件{$i}\n"; usleep(3000); return true;}function task2($i){ //应用$i标识 发送邮件,大略要3000微秒 if ($i > 500) { return false;//超过500不必发送了 } echo "发送邮件{$i}\n"; usleep(3000); return true;}function task3($i){ //应用$i标识 插入数据,大略要3000微秒 if ($i > 100) { return false;//超过100不必插入 } echo "插入数据{$i}\n"; usleep(3000); return true;}$i = 0;while (true) { $task1Result = task1($i); $task2Result = task2($i); $task3Result = task3($i); if($task1Result===false&&$task2Result===false&&$task3Result===false){ break;//全副工作实现,退出循环 } $i++;}swoole实现协程代码: ...

December 14, 2020 · 2 min · jiezi

关于php:从零搭建php环境redis

一、下载 1、http://download.redis.io/releases/redis-6.0.9.tar.gz下载到本地,文件传输上传到 /usr/local/src/2、wget -P /usr/local/src/ http://download.redis.io/releases/redis-6.0.9.tar.gz 二、解压,编译,装置 > cd /usr/local/src> tar xzf tar xzf redis-6.0.9.tar.gz> cd redis-6.0.9> make编译完会默认将软件装置在当前目录,这里将整个解压缩文件移至local目录 mv /usr/local/src/redis-6.0.9 /usr/local/redis-6.0.9三、更改配置 /usr/local/redis-6.0.9/redis.conf1、更改默认端口为163792、设置redis服务以守护过程运行3、设置redis可供近程拜访4、设置明码 > vim /usr/local/redis-6.0.9/redis.conf # 关上redis服务启动配置文件,# vim中命令模式下输出“/关键字” # 相似于windows的文件中查问,字符n代表下一个,N代表上一个。# 设置参数值 no 为 yes 并在命令模式下输出 “:wq” 代表保留并退出> /port # 匹配到端口 改为16379,该配置是用来限度端口拜访的> /pid #匹配pid文件,改为redis_16379,该配置是用来存储pid信息,次要是为了命名格调对立,与端口统一,如果不改默认端口,这里也不必改> /daemonize # 匹配到守护过程配置,设置yes会以守护过程模型常驻> /bind 127.0.0.1 #正文掉该行,或者正文掉所有的bind配置,改为bind 0.0.0.0,意味着容许任何ip拜访,该配置是用来限度IP拜访的> /protected-mode yes #把yes改为no> /requirepass #去除后面的#关上正文,并更改默认的明码为自定义明码【最好简单点,免得暴力破解】redis在凋谢近程拜访,又不设置明码的状况下,相当于谁都能够拜访redis服务器,且非常容易被服务器探针攻打,被注入挖矿木马或者勒索木马,如果服务器没有备份根本GG,所以凋谢近程拜访,肯定要更改默认明码,即requirepass参数前面的字符串凋谢近程拜访,肯定要更改默认明码,即requirepass参数前面的字符串凋谢近程拜访,肯定要更改默认明码,即requirepass参数前面的字符串 四、设置开机自启动 vim /etc/init.d/redis将如下配置复制粘贴保留 #!/bin/sh## Simple Redis init.d script conceived to work on Linux systems# as it does use of the /proc filesystem.#chkconfig: 2345 80 90#description:auto_runREDISPORT=16379EXEC=/usr/local/redis-6.0.9/src/redis-serverCLIEXEC=/usr/local/redis-6.0.9/src/redis-cliPIDFILE=/var/run/redis_${REDISPORT}.pidCONF="/usr/local/redis-6.0.9/redis.conf"case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis server..." $EXEC $CONF fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $CLIEXEC -p $REDISPORT shutdown # 有设置明码要加 -a “明码” 参数,如下 # $CLIEXEC -a "自定义的明码" -p $REDISPORT shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis to shutdown ..." sleep 1 done echo "Redis stopped" fi ;; *) echo "Please use start or stop as first argument" ;;esac设置命令可被执行 ...

December 14, 2020 · 2 min · jiezi

关于php:从binswoft开始阅读Swoft框架源码五AnnotationProcessor

注解是Swoft的特色之一,Swoft我的项目中简直所有的业务代码中都离不开注解.AnnotationProcessor处理器就是Swoft能在业务中应用组件的外围依赖. 先看AnnotationProcessor的入口办法: public function handle(): bool{ // 注解加载前回调 // 零碎未做解决 间接返回的true if (!$this->application->beforeAnnotation()) { CLog::warning('Stop annotation processor by beforeAnnotation return false'); return false; } // 获取以后利用实例,这个实例是在利用初始化处理器时传递给 // 每个处理器的 $app = $this->application; // 找到AutoLoader类.解析和采集注解. // Find AutoLoader classes. Parse and collect annotations. AnnotationRegister::load([ 'inPhar' => IN_PHAR, 'basePath' => $app->getBasePath(), 'notifyHandler' => [$this, 'notifyHandle'], // TODO force load framework components: bean, error, event, aop 'disabledAutoLoaders' => $app->getDisabledAutoLoaders(), 'excludedPsr4Prefixes' => $app->getDisabledPsr4Prefixes(), ]); // $stats = AnnotationRegister::getClassStats(); // 控制台输入注解的采集和加载数据 CLog::info( 'Annotations is scanned(autoloader %d, annotation %d, parser %d)', $stats['autoloader'], $stats['annotation'], $stats['parser'] ); // 注解解决实现 return $this->application->afterAnnotation();}这一处理器解决的内容十分多,在我本机环境下执行工夫约1.2秒. ...

December 14, 2020 · 5 min · jiezi

关于php:如何为WooCommerce可变产品属性启用色板选项

咱们在外贸网站建设时,如果搭建的是零售商城,譬如发售鞋子、衣服,那么肯定会用到可变产品色板选项性能,让你的客户能够直观的抉择尺码、色彩、款式等等。本篇教程解说如何应用插件Variation Swatches for WooCommerce实现产品色板性能。 WooCommerce自带的产品属性选项,无色板 Variation Swatches for WooCommerce实现的色板性能 本文原文首发于:https://loyseo.com/how-to-ena...装置Variation Swatches For WooCommerce插件首先请在你的WordPress网站中装置并激活插件Variation Swatches for WooCommerce,相干教程:如何装置插件。 增加全局属性接下来,你要学会增加全局属性。 请进入products> attributes页面,以便增加、批改、删除属性。 增加属性须要填写的内容: name:名称,名称不能反复。slug:非必填,是网址(url)的重要组成部分,不填将主动等于name;如果改了name,记得批改slug,如果网站已上线后批改slug,记得做好新旧url的301跳转,你能够装置rank math seo插件,依照外贸网站如何设置Rank Math SEO教程,启用auto post redirect配置。Enable Archives:启用列表,如果你须要展现具备以后属性的产品到属性列表页中,那么就启用。例如,色彩属性有一个属性值彩色,你能够增加网址:https://yodomain.com/pa_color... 到网站菜单中,它将展现所有彩色的商品,其中pa示意product attribute。type:示意类型,这个字段只有激活了Variation Swatches for WooCommerce才会显示,它提供了三种类型:color(色彩)、image(图片)、button(按钮),譬如:尺码属性能够用type类型。Default sort order:抉择默认的排序形式,你能够在“Name”, “Name (numeric)”, “Term ID” or “Custom ordering” 种进行抉择,它将影响属性值的排序,譬如,如果属性值是数字,则“Name (numeric)”是最合适的,那如果抉择“name”,则按字母程序排序,1和10反而在2的后面。如果抉择“Name (numeric)”排序,则依据数值从小到大进行排序。 如果抉择“Custom ordering” ,那么你能够在属性值列表中拖拽调整程序。 当你增加属性后,该属性将增加到右侧的表中,但还没有属性值。 请点击“configure term”进入增加属性值,能够按需增加多个属性值。 当你增加色彩类属性时,零碎会让你抉择色彩 当你增加图片类属性时,零碎会让你上传图片。 当你增加完所有的属性后,接下来咱们就是去增加可变产品了。 增加可变产品详见教程: WooCommerce如何增加可变产品 本文视频教程https://loyseo.com/how-to-ena... 本文原文由LOYSEO 公布,LOYSEO专一于WordPress外贸网站建设教程、Elementor教程。

December 14, 2020 · 1 min · jiezi

关于php:PHP设计模式之装饰器模式

工厂模式告一段落,咱们来钻研其余一些模式。不晓得各位大佬有没有尝试过女装?据说女装大佬程序员很多哟。其实,明天的装璜器模式就和化妆这件事很像。置信如果有程序媛MM在的话,马上就能和你讲清楚这个设计模式。 Gof类图及解释装璜这两个字,咱们暂且把他变成化妆。首先你得有一张脸,而后打底,而后上妆,能够早上来个淡妆下班,也能够上班的时候补成浓妆进来嗨。当然,码农们上班的工夫点正好是能赶上早场的下半场的。话说回来,不管怎么化妆,你的脸还是你的脸,有可能能够化成他人不意识的另一个人,但这的的确确还是你的脸。这就是装璜器,对对象(脸)进行各种装璜(化妆),让这个脸更好看(减少职责)。 GoF定义:动静地给一个对象增加一些额定的职责,就减少性能来说,Decorator模式相比生成子类更为灵便 GoF类图 代码实现interface Component{ public function operation();}class ConcreteComponent implements Component{ public function operation(){ echo "I'm face!" . PHP_EOL; }}很简略的一个接口和一个实现,这里咱们就把具体的实现类看作是一张脸吧! abstract class Decorator implements Component{ protected $component; public function __construct(Component $component){ $this->component = $component; }}形象的装璜者类,实现Component接口,但并不实现operation()办法,让子类去实现。在这里次要保留一个Componet的援用,一会就要对他进行装璜。对应到上方的具体类,咱们就是要筹备给脸化妆啦! class ConcreteDecoratorA extends Decorator{ public $addedState = 1; // 没什么实际意义的属性,只是区别于ConcreteDecoratorB public function operation(){ echo $this->component->operation() . "Push " . $this->addedState . " cream!" . PHP_EOL; }}class ConcreteDecoratorB extends Decorator{ public function operation(){ $this->component->operation(); $this->addedBehavior(); } // 没什么实际意义的办法,只是区别于ConcreteDecoratorA public function addedBehavior(){ echo "Push 2 cream!" . PHP_EOL; }}两个具体装璜者。在这里我是涂了两次霜,毕竟是纯爷们,对化妆这事儿真的是不理解。如同第一步应该先是打粉底吧?不过这次就这样,咱们这两个装璜器实现的就是给脸上涂两层霜。 ...

December 14, 2020 · 2 min · jiezi

关于php:phpinput提交表单时内容中包含单引号导致mysqli报错

应用addslashes()对输出的数据作解决 定义和用法:addslashes() 函数返回在预约义字符之前增加反斜杠的字符串。当不应用addslashes()对于用户的输出进行非凡解决时输出时有单引号 报错,公布失败 应用addslashes()对于用户的输出进行非凡解决后textarea中蕴含了单引号公布胜利

December 13, 2020 · 1 min · jiezi

关于php:php简易外卖送达时间依据时间距离取整点

php代码<?phpfunction get_time_on_clock($timestamp, $m_min = 15, $m_max = 45){ // Y-m-d H:i:s $minute = date('i', $timestamp); if ($minute > $m_max) { $timestamp += 3600; // add 1 hour $minute = 0; } else if ($minute < $m_min) $minute = 0; else // $m_min < $timestamp < $m_max $minute = 30; return strtotime(date('Y-m-d H:', $timestamp) . $minute . ':0');}?><form> <p>送达工夫: <select name="arrivetime" required> <option value="<?php echo date('Y-m-d H:i:s',strtotime('+480 minute'));?>" selected>立刻送出(预计<?php echo date('Y-m-d H:i',strtotime('+480 minute'));?>送达)</option> <option value="<?php echo date('Y-m-d H:i:s',strtotime('+510 minute'));?>"><?php echo date('Y-m-d H:i', get_time_on_clock(strtotime(date('Y-m-d H:i:s',strtotime('+510 minute')))));?>送达</option> <option value="<?php echo date('Y-m-d H:i:s',strtotime('+540 minute'));?>"><?php echo date('Y-m-d H:i', get_time_on_clock(strtotime(date('Y-m-d H:i:s',strtotime('+540 minute')))));?>送达</option> <option value="<?php echo date('Y-m-d H:i:s',strtotime('+570 minute'));?>"><?php echo date('Y-m-d H:i', get_time_on_clock(strtotime(date('Y-m-d H:i:s',strtotime('+570 minute')))));?>送达</option> <option value="<?php echo date('Y-m-d H:i:s',strtotime('+600 minute'));?>"><?php echo date('Y-m-d H:i', get_time_on_clock(strtotime(date('Y-m-d H:i:s',strtotime('+600 minute')))));?>送达</option> </select></p> <input type="hidden" name="ordertime" value="<?php echo date('Y-m-d H:i:s',strtotime("+420 minute")); ?>"></form>成果 ...

December 13, 2020 · 1 min · jiezi

关于php:phpmysqljquery省市区三级联动

php代码conn.php<?php $servername="localhost"; $username="root"; $mypassword=""; $dbname="pcc"; $conn=@new mysqli($servername,$username,$mypassword,$dbname); if ($conn->connect_error){ die("Connection to database failed:".$conn->connect_error); } $conn->query("set names utf8");?>index.php<?php require "conn.php"; $sql = "select * from province"; $query = $conn->query($sql); while($row = $query->fetch_assoc()){ $province[]=$row; }?><script src='jquery.js'></script><script> $(document).ready(function(){ $("#province").change(function(){ var provinceid=$(this).val(); $("#citySpan").load("index_city.php?provinceid="+provinceid); $("#areaSpan").html("<select id=\"area\" name=\"area\"><option value=\"0\">--请抉择县--</option></select>"); }); }) function selectArea(){ var cityid=$("#city").val(); $("#areaSpan").load("index_area.php?cityid="+cityid); }</script><form> <select id="province" name="province"> <option value='0' >--请抉择省--</option> <?php foreach($province as $k=>$v){ ?> <option value='<?php echo $v['provinceid']?>'><?php echo $v['province']?></option> <?php } ?> </select> <span id="citySpan"> <select id="city" name="city"> <option value="0">--请抉择市--</option> </select> </span> <span id="areaSpan"> <select id="area" name="area"> <option value="0">--请抉择县--</option> </select> </span> <input type="submit" value="提交"></form>index_city.php<?php require "conn.php"; $sql="select * from city where fatherid=".$_GET['provinceid']; $query = $conn->query($sql); while($row = $query->fetch_assoc()){ $city[]=$row; }?><select id="city" name="city" onchange="selectArea()"> <option value="0">--请抉择市--</option> <?php foreach($city as $k=>$v){ ?> <option value='<?php echo $v['cityid']?>'><?php echo $v['city']?></option> <?php } ?></select>index_area.php<?php require "conn.php"; $sql="select * from area where fatherid=".$_GET['cityid']; $query = $conn->query($sql); while($row = $query->fetch_assoc()){ $city[]=$row; }?><select id="area" name="area"> <option value="0">--请抉择县--</option> <?php foreach($city as $k=>$v){ ?> <option value='<?php echo $v['areaid']?>'><?php echo $v['area']?></option> <?php } ?></select>数据库代码:pcc.sql/*Navicat MySQL Data TransferSource Server : localhost_3306Source Server Version : 50136Source Host : localhost:3306Source Database : pccTarget Server Type : MYSQLTarget Server Version : 50136File Encoding : 65001Date: 2010-11-22 17:37:38*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for `area`-- ----------------------------DROP TABLE IF EXISTS `area`;CREATE TABLE `area` ( `id` int(11) NOT NULL AUTO_INCREMENT, `areaid` int(11) NOT NULL, `area` varchar(20) CHARACTER SET gbk NOT NULL, `fatherid` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=3145 DEFAULT CHARSET=gb2312;-- ------------------------------ Records of area-- ----------------------------INSERT INTO area VALUES ('1', '110101', '东城区', '110100');INSERT INTO area VALUES ('2', '110102', '西城区', '110100');INSERT INTO area VALUES ('3', '110103', '崇文区', '110100');INSERT INTO area VALUES ('4', '110104', '宣武区', '110100');INSERT INTO area VALUES ('5', '110105', '朝阳区', '110100');INSERT INTO area VALUES ('6', '110106', '丰台区', '110100');INSERT INTO area VALUES ('7', '110107', '石景山区', '110100');INSERT INTO area VALUES ('8', '110108', '海淀区', '110100');INSERT INTO area VALUES ('9', '110109', '门头沟区', '110100');INSERT INTO area VALUES ('10', '110111', '房山区', '110100');INSERT INTO area VALUES ('11', '110112', '通州区', '110100');INSERT INTO area VALUES ('12', '110113', '顺义区', '110100');INSERT INTO area VALUES ('13', '110114', '昌平区', '110100');INSERT INTO area VALUES ('14', '110115', '大兴区', '110100');INSERT INTO area VALUES ('15', '110116', '怀柔区', '110100');INSERT INTO area VALUES ('16', '110117', '平谷区', '110100');INSERT INTO area VALUES ('17', '110228', '密云县', '110100');INSERT INTO area VALUES ('18', '110229', '延庆县', '110100');INSERT INTO area VALUES ('19', '120101', '和平区', '120100');INSERT INTO area VALUES ('20', '120102', '河东区', '120100');INSERT INTO area VALUES ('21', '120103', '河西区', '120100');INSERT INTO area VALUES ('22', '120104', '南开区', '120100');INSERT INTO area VALUES ('23', '120105', '河北区', '120100');INSERT INTO area VALUES ('24', '120106', '红桥区', '120100');INSERT INTO area VALUES ('25', '120107', '塘沽区', '120100');INSERT INTO area VALUES ('26', '120108', '汉沽区', '120100');INSERT INTO area VALUES ('27', '120109', '大港区', '120100');INSERT INTO area VALUES ('28', '120110', '东丽区', '120100');INSERT INTO area VALUES ('29', '120111', '西青区', '120100');INSERT INTO area VALUES ('30', '120112', '津南区', '120100');INSERT INTO area VALUES ('31', '120113', '北辰区', '120100');INSERT INTO area VALUES ('32', '120114', '武清区', '120100');INSERT INTO area VALUES ('33', '120115', '宝坻区', '120100');INSERT INTO area VALUES ('34', '120221', '宁河县', '120100');INSERT INTO area VALUES ('35', '120223', '静海县', '120100');INSERT INTO area VALUES ('36', '120225', '蓟 县', '120100');INSERT INTO area VALUES ('37', '130101', '市辖区', '130100');INSERT INTO area VALUES ('38', '130102', '长安区', '130100');INSERT INTO area VALUES ('39', '130103', '桥东区', '130100');INSERT INTO area VALUES ('40', '130104', '桥西区', '130100');INSERT INTO area VALUES ('41', '130105', '新华区', '130100');INSERT INTO area VALUES ('42', '130107', '井陉矿区', '130100');INSERT INTO area VALUES ('43', '130108', '裕华区', '130100');INSERT INTO area VALUES ('44', '130121', '井陉县', '130100');INSERT INTO area VALUES ('45', '130123', '正定县', '130100');INSERT INTO area VALUES ('46', '130124', '栾城县', '130100');INSERT INTO area VALUES ('47', '130125', '行唐县', '130100');INSERT INTO area VALUES ('48', '130126', '灵寿县', '130100');INSERT INTO area VALUES ('49', '130127', '高邑县', '130100');INSERT INTO area VALUES ('50', '130128', '深泽县', '130100');INSERT INTO area VALUES ('51', '130129', '赞皇县', '130100');INSERT INTO area VALUES ('52', '130130', '无极县', '130100');INSERT INTO area VALUES ('53', '130131', '平山县', '130100');INSERT INTO area VALUES ('54', '130132', '元氏县', '130100');INSERT INTO area VALUES ('55', '130133', '赵 县', '130100');INSERT INTO area VALUES ('56', '130181', '辛集市', '130100');INSERT INTO area VALUES ('57', '130182', '藁城市', '130100');INSERT INTO area VALUES ('58', '130183', '晋州市', '130100');INSERT INTO area VALUES ('59', '130184', '新乐市', '130100');INSERT INTO area VALUES ('60', '130185', '鹿泉市', '130100');INSERT INTO area VALUES ('61', '130201', '市辖区', '130200');INSERT INTO area VALUES ('62', '130202', '路南区', '130200');INSERT INTO area VALUES ('63', '130203', '路北区', '130200');INSERT INTO area VALUES ('64', '130204', '古冶区', '130200');INSERT INTO area VALUES ('65', '130205', '开平区', '130200');INSERT INTO area VALUES ('66', '130207', '丰南区', '130200');INSERT INTO area VALUES ('67', '130208', '丰润区', '130200');INSERT INTO area VALUES ('68', '130223', '滦 县', '130200');INSERT INTO area VALUES ('69', '130224', '滦南县', '130200');INSERT INTO area VALUES ('70', '130225', '乐亭县', '130200');INSERT INTO area VALUES ('71', '130227', '迁西县', '130200');INSERT INTO area VALUES ('72', '130229', '玉田县', '130200');INSERT INTO area VALUES ('73', '130230', '唐海县', '130200');INSERT INTO area VALUES ('74', '130281', '遵化市', '130200');INSERT INTO area VALUES ('75', '130283', '迁安市', '130200');INSERT INTO area VALUES ('76', '130301', '市辖区', '130300');INSERT INTO area VALUES ('77', '130302', '海港区', '130300');INSERT INTO area VALUES ('78', '130303', '山海关区', '130300');INSERT INTO area VALUES ('79', '130304', '北戴河区', '130300');INSERT INTO area VALUES ('80', '130321', '青龙满族自治县', '130300');INSERT INTO area VALUES ('81', '130322', '昌黎县', '130300');INSERT INTO area VALUES ('82', '130323', '抚宁县', '130300');INSERT INTO area VALUES ('83', '130324', '卢龙县', '130300');INSERT INTO area VALUES ('84', '130401', '市辖区', '130400');INSERT INTO area VALUES ('85', '130402', '邯山区', '130400');INSERT INTO area VALUES ('86', '130403', '丛台区', '130400');INSERT INTO area VALUES ('87', '130404', '复兴区', '130400');INSERT INTO area VALUES ('88', '130406', '峰峰矿区', '130400');INSERT INTO area VALUES ('89', '130421', '邯郸县', '130400');INSERT INTO area VALUES ('90', '130423', '临漳县', '130400');INSERT INTO area VALUES ('91', '130424', '成安县', '130400');INSERT INTO area VALUES ('92', '130425', '大名县', '130400');INSERT INTO area VALUES ('93', '130426', '涉 县', '130400');INSERT INTO area VALUES ('94', '130427', '磁 县', '130400');INSERT INTO area VALUES ('95', '130428', '肥乡县', '130400');INSERT INTO area VALUES ('96', '130429', '永年县', '130400');INSERT INTO area VALUES ('97', '130430', '邱 县', '130400');INSERT INTO area VALUES ('98', '130431', '鸡泽县', '130400');INSERT INTO area VALUES ('99', '130432', '广平县', '130400');INSERT INTO area VALUES ('100', '130433', '馆陶县', '130400');INSERT INTO area VALUES ('101', '130434', '魏 县', '130400');INSERT INTO area VALUES ('102', '130435', '曲周县', '130400');INSERT INTO area VALUES ('103', '130481', '武安市', '130400');INSERT INTO area VALUES ('104', '130501', '市辖区', '130500');INSERT INTO area VALUES ('105', '130502', '桥东区', '130500');INSERT INTO area VALUES ('106', '130503', '桥西区', '130500');INSERT INTO area VALUES ('107', '130521', '邢台县', '130500');INSERT INTO area VALUES ('108', '130522', '临城县', '130500');INSERT INTO area VALUES ('109', '130523', '内丘县', '130500');INSERT INTO area VALUES ('110', '130524', '柏乡县', '130500');INSERT INTO area VALUES ('111', '130525', '隆尧县', '130500');INSERT INTO area VALUES ('112', '130526', '任 县', '130500');INSERT INTO area VALUES ('113', '130527', '南和县', '130500');INSERT INTO area VALUES ('114', '130528', '宁晋县', '130500');INSERT INTO area VALUES ('115', '130529', '巨鹿县', '130500');INSERT INTO area VALUES ('116', '130530', '新河县', '130500');INSERT INTO area VALUES ('117', '130531', '广宗县', '130500');INSERT INTO area VALUES ('118', '130532', '平乡县', '130500');INSERT INTO area VALUES ('119', '130533', '威 县', '130500');INSERT INTO area VALUES ('120', '130534', '清河县', '130500');INSERT INTO area VALUES ('121', '130535', '临西县', '130500');INSERT INTO area VALUES ('122', '130581', '南宫市', '130500');INSERT INTO area VALUES ('123', '130582', '沙河市', '130500');INSERT INTO area VALUES ('124', '130601', '市辖区', '130600');INSERT INTO area VALUES ('125', '130602', '新市区', '130600');INSERT INTO area VALUES ('126', '130603', '北市区', '130600');INSERT INTO area VALUES ('127', '130604', '南市区', '130600');INSERT INTO area VALUES ('128', '130621', '满城县', '130600');INSERT INTO area VALUES ('129', '130622', '清苑县', '130600');INSERT INTO area VALUES ('130', '130623', '涞水县', '130600');INSERT INTO area VALUES ('131', '130624', '阜平县', '130600');INSERT INTO area VALUES ('132', '130625', '徐水县', '130600');INSERT INTO area VALUES ('133', '130626', '定兴县', '130600');INSERT INTO area VALUES ('134', '130627', '唐 县', '130600');INSERT INTO area VALUES ('135', '130628', '高阳县', '130600');INSERT INTO area VALUES ('136', '130629', '容城县', '130600');INSERT INTO area VALUES ('137', '130630', '涞源县', '130600');INSERT INTO area VALUES ('138', '130631', '望都县', '130600');INSERT INTO area VALUES ('139', '130632', '安新县', '130600');INSERT INTO area VALUES ('140', '130633', '易 县', '130600');INSERT INTO area VALUES ('141', '130634', '曲阳县', '130600');INSERT INTO area VALUES ('142', '130635', '蠡 县', '130600');INSERT INTO area VALUES ('143', '130636', '顺平县', '130600');INSERT INTO area VALUES ('144', '130637', '博野县', '130600');INSERT INTO area VALUES ('145', '130638', '雄 县', '130600');INSERT INTO area VALUES ('146', '130681', '涿州市', '130600');INSERT INTO area VALUES ('147', '130682', '定州市', '130600');INSERT INTO area VALUES ('148', '130683', '安国市', '130600');INSERT INTO area VALUES ('149', '130684', '高碑店市', '130600');INSERT INTO area VALUES ('150', '130701', '市辖区', '130700');INSERT INTO area VALUES ('151', '130702', '桥东区', '130700');INSERT INTO area VALUES ('152', '130703', '桥西区', '130700');INSERT INTO area VALUES ('153', '130705', '宣化区', '130700');INSERT INTO area VALUES ('154', '130706', '下花园区', '130700');INSERT INTO area VALUES ('155', '130721', '宣化县', '130700');INSERT INTO area VALUES ('156', '130722', '张北县', '130700');INSERT INTO area VALUES ('157', '130723', '康保县', '130700');INSERT INTO area VALUES ('158', '130724', '沽源县', '130700');INSERT INTO area VALUES ('159', '130725', '尚义县', '130700');INSERT INTO area VALUES ('160', '130726', '蔚 县', '130700');INSERT INTO area VALUES ('161', '130727', '阳原县', '130700');INSERT INTO area VALUES ('162', '130728', '怀安县', '130700');INSERT INTO area VALUES ('163', '130729', '万全县', '130700');INSERT INTO area VALUES ('164', '130730', '怀来县', '130700');INSERT INTO area VALUES ('165', '130731', '涿鹿县', '130700');INSERT INTO area VALUES ('166', '130732', '赤城县', '130700');INSERT INTO area VALUES ('167', '130733', '崇礼县', '130700');INSERT INTO area VALUES ('168', '130801', '市辖区', '130800');INSERT INTO area VALUES ('169', '130802', '双桥区', '130800');INSERT INTO area VALUES ('170', '130803', '双滦区', '130800');INSERT INTO area VALUES ('171', '130804', '鹰手营子矿区', '130800');INSERT INTO area VALUES ('172', '130821', '承德县', '130800');INSERT INTO area VALUES ('173', '130822', '兴隆县', '130800');INSERT INTO area VALUES ('174', '130823', '平泉县', '130800');INSERT INTO area VALUES ('175', '130824', '滦平县', '130800');INSERT INTO area VALUES ('176', '130825', '隆化县', '130800');INSERT INTO area VALUES ('177', '130826', '丰宁满族自治县', '130800');INSERT INTO area VALUES ('178', '130827', '宽城满族自治县', '130800');INSERT INTO area VALUES ('179', '130828', '围场满族蒙古族自治县', '130800');INSERT INTO area VALUES ('180', '130901', '市辖区', '130900');INSERT INTO area VALUES ('181', '130902', '新华区', '130900');INSERT INTO area VALUES ('182', '130903', '运河区', '130900');INSERT INTO area VALUES ('183', '130921', '沧 县', '130900');INSERT INTO area VALUES ('184', '130922', '青 县', '130900');INSERT INTO area VALUES ('185', '130923', '东光县', '130900');INSERT INTO area VALUES ('186', '130924', '海兴县', '130900');INSERT INTO area VALUES ('187', '130925', '盐山县', '130900');INSERT INTO area VALUES ('188', '130926', '肃宁县', '130900');INSERT INTO area VALUES ('189', '130927', '南皮县', '130900');INSERT INTO area VALUES ('190', '130928', '吴桥县', '130900');INSERT INTO area VALUES ('191', '130929', '献 县', '130900');INSERT INTO area VALUES ('192', '130930', '孟村回族自治县', '130900');INSERT INTO area VALUES ('193', '130981', '泊头市', '130900');INSERT INTO area VALUES ('194', '130982', '任丘市', '130900');INSERT INTO area VALUES ('195', '130983', '黄骅市', '130900');INSERT INTO area VALUES ('196', '130984', '河间市', '130900');INSERT INTO area VALUES ('197', '131001', '市辖区', '131000');INSERT INTO area VALUES ('198', '131002', '安次区', '131000');INSERT INTO area VALUES ('199', '131003', '广阳区', '131000');INSERT INTO area VALUES ('200', '131022', '固安县', '131000');INSERT INTO area VALUES ('201', '131023', '永清县', '131000');INSERT INTO area VALUES ('202', '131024', '香河县', '131000');INSERT INTO area VALUES ('203', '131025', '大城县', '131000');INSERT INTO area VALUES ('204', '131026', '文安县', '131000');INSERT INTO area VALUES ('205', '131028', '大厂回族自治县', '131000');INSERT INTO area VALUES ('206', '131081', '霸州市', '131000');INSERT INTO area VALUES ('207', '131082', '三河市', '131000');INSERT INTO area VALUES ('208', '131101', '市辖区', '131100');INSERT INTO area VALUES ('209', '131102', '桃城区', '131100');INSERT INTO area VALUES ('210', '131121', '枣强县', '131100');INSERT INTO area VALUES ('211', '131122', '武邑县', '131100');INSERT INTO area VALUES ('212', '131123', '武强县', '131100');INSERT INTO area VALUES ('213', '131124', '饶阳县', '131100');INSERT INTO area VALUES ('214', '131125', '安平县', '131100');INSERT INTO area VALUES ('215', '131126', '故城县', '131100');INSERT INTO area VALUES ('216', '131127', '景 县', '131100');INSERT INTO area VALUES ('217', '131128', '阜城县', '131100');INSERT INTO area VALUES ('218', '131181', '冀州市', '131100');INSERT INTO area VALUES ('219', '131182', '深州市', '131100');INSERT INTO area VALUES ('220', '140101', '市辖区', '140100');INSERT INTO area VALUES ('221', '140105', '小店区', '140100');INSERT INTO area VALUES ('222', '140106', '迎泽区', '140100');INSERT INTO area VALUES ('223', '140107', '杏花岭区', '140100');INSERT INTO area VALUES ('224', '140108', '尖草坪区', '140100');INSERT INTO area VALUES ('225', '140109', '万柏林区', '140100');INSERT INTO area VALUES ('226', '140110', '晋源区', '140100');INSERT INTO area VALUES ('227', '140121', '清徐县', '140100');INSERT INTO area VALUES ('228', '140122', '阳曲县', '140100');INSERT INTO area VALUES ('229', '140123', '娄烦县', '140100');INSERT INTO area VALUES ('230', '140181', '古交市', '140100');INSERT INTO area VALUES ('231', '140201', '市辖区', '140200');INSERT INTO area VALUES ('232', '140202', '城 区', '140200');INSERT INTO area VALUES ('233', '140203', '矿 区', '140200');INSERT INTO area VALUES ('234', '140211', '南郊区', '140200');INSERT INTO area VALUES ('235', '140212', '新荣区', '140200');INSERT INTO area VALUES ('236', '140221', '阳高县', '140200');INSERT INTO area VALUES ('237', '140222', '天镇县', '140200');INSERT INTO area VALUES ('238', '140223', '广灵县', '140200');INSERT INTO area VALUES ('239', '140224', '灵丘县', '140200');INSERT INTO area VALUES ('240', '140225', '浑源县', '140200');INSERT INTO area VALUES ('241', '140226', '左云县', '140200');INSERT INTO area VALUES ('242', '140227', '大同县', '140200');INSERT INTO area VALUES ('243', '140301', '市辖区', '140300');INSERT INTO area VALUES ('244', '140302', '城 区', '140300');INSERT INTO area VALUES ('245', '140303', '矿 区', '140300');INSERT INTO area VALUES ('246', '140311', '郊 区', '140300');INSERT INTO area VALUES ('247', '140321', '平定县', '140300');INSERT INTO area VALUES ('248', '140322', '盂 县', '140300');INSERT INTO area VALUES ('249', '140401', '市辖区', '140400');INSERT INTO area VALUES ('250', '140402', '城 区', '140400');INSERT INTO area VALUES ('251', '140411', '郊 区', '140400');INSERT INTO area VALUES ('252', '140421', '长治县', '140400');INSERT INTO area VALUES ('253', '140423', '襄垣县', '140400');INSERT INTO area VALUES ('254', '140424', '屯留县', '140400');INSERT INTO area VALUES ('255', '140425', '平顺县', '140400');INSERT INTO area VALUES ('256', '140426', '黎城县', '140400');INSERT INTO area VALUES ('257', '140427', '壶关县', '140400');INSERT INTO area VALUES ('258', '140428', '长子县', '140400');INSERT INTO area VALUES ('259', '140429', '武乡县', '140400');INSERT INTO area VALUES ('260', '140430', '沁 县', '140400');INSERT INTO area VALUES ('261', '140431', '沁源县', '140400');INSERT INTO area VALUES ('262', '140481', '潞城市', '140400');INSERT INTO area VALUES ('263', '140501', '市辖区', '140500');INSERT INTO area VALUES ('264', '140502', '城 区', '140500');INSERT INTO area VALUES ('265', '140521', '沁水县', '140500');INSERT INTO area VALUES ('266', '140522', '阳城县', '140500');INSERT INTO area VALUES ('267', '140524', '陵川县', '140500');INSERT INTO area VALUES ('268', '140525', '泽州县', '140500');INSERT INTO area VALUES ('269', '140581', '高平市', '140500');INSERT INTO area VALUES ('270', '140601', '市辖区', '140600');INSERT INTO area VALUES ('271', '140602', '朔城区', '140600');INSERT INTO area VALUES ('272', '140603', '平鲁区', '140600');INSERT INTO area VALUES ('273', '140621', '山阴县', '140600');INSERT INTO area VALUES ('274', '140622', '应 县', '140600');INSERT INTO area VALUES ('275', '140623', '右玉县', '140600');INSERT INTO area VALUES ('276', '140624', '怀仁县', '140600');INSERT INTO area VALUES ('277', '140701', '市辖区', '140700');INSERT INTO area VALUES ('278', '140702', '榆次区', '140700');INSERT INTO area VALUES ('279', '140721', '榆社县', '140700');INSERT INTO area VALUES ('280', '140722', '左权县', '140700');INSERT INTO area VALUES ('281', '140723', '和顺县', '140700');INSERT INTO area VALUES ('282', '140724', '昔阳县', '140700');INSERT INTO area VALUES ('283', '140725', '寿阳县', '140700');INSERT INTO area VALUES ('284', '140726', '太谷县', '140700');INSERT INTO area VALUES ('285', '140727', '祁 县', '140700');INSERT INTO area VALUES ('286', '140728', '平遥县', '140700');INSERT INTO area VALUES ('287', '140729', '灵石县', '140700');INSERT INTO area VALUES ('288', '140781', '介休市', '140700');INSERT INTO area VALUES ('289', '140801', '市辖区', '140800');INSERT INTO area VALUES ('290', '140802', '盐湖区', '140800');INSERT INTO area VALUES ('291', '140821', '临猗县', '140800');INSERT INTO area VALUES ('292', '140822', '万荣县', '140800');INSERT INTO area VALUES ('293', '140823', '闻喜县', '140800');INSERT INTO area VALUES ('294', '140824', '稷山县', '140800');INSERT INTO area VALUES ('295', '140825', '新绛县', '140800');INSERT INTO area VALUES ('296', '140826', '绛 县', '140800');INSERT INTO area VALUES ('297', '140827', '垣曲县', '140800');INSERT INTO area VALUES ('298', '140828', '夏 县', '140800');INSERT INTO area VALUES ('299', '140829', '平陆县', '140800');INSERT INTO area VALUES ('300', '140830', '芮城县', '140800');INSERT INTO area VALUES ('301', '140881', '永济市', '140800');INSERT INTO area VALUES ('302', '140882', '河津市', '140800');INSERT INTO area VALUES ('303', '140901', '市辖区', '140900');INSERT INTO area VALUES ('304', '140902', '忻府区', '140900');INSERT INTO area VALUES ('305', '140921', '定襄县', '140900');INSERT INTO area VALUES ('306', '140922', '五台县', '140900');INSERT INTO area VALUES ('307', '140923', '代 县', '140900');INSERT INTO area VALUES ('308', '140924', '繁峙县', '140900');INSERT INTO area VALUES ('309', '140925', '宁武县', '140900');INSERT INTO area VALUES ('310', '140926', '静乐县', '140900');INSERT INTO area VALUES ('311', '140927', '神池县', '140900');INSERT INTO area VALUES ('312', '140928', '五寨县', '140900');INSERT INTO area VALUES ('313', '140929', '岢岚县', '140900');INSERT INTO area VALUES ('314', '140930', '河曲县', '140900');INSERT INTO area VALUES ('315', '140931', '保德县', '140900');INSERT INTO area VALUES ('316', '140932', '偏关县', '140900');INSERT INTO area VALUES ('317', '140981', '原平市', '140900');INSERT INTO area VALUES ('318', '141001', '市辖区', '141000');INSERT INTO area VALUES ('319', '141002', '尧都区', '141000');INSERT INTO area VALUES ('320', '141021', '曲沃县', '141000');INSERT INTO area VALUES ('321', '141022', '翼城县', '141000');INSERT INTO area VALUES ('322', '141023', '襄汾县', '141000');INSERT INTO area VALUES ('323', '141024', '洪洞县', '141000');INSERT INTO area VALUES ('324', '141025', '古 县', '141000');INSERT INTO area VALUES ('325', '141026', '安泽县', '141000');INSERT INTO area VALUES ('326', '141027', '浮山县', '141000');INSERT INTO area VALUES ('327', '141028', '吉 县', '141000');INSERT INTO area VALUES ('328', '141029', '乡宁县', '141000');INSERT INTO area VALUES ('329', '141030', '大宁县', '141000');INSERT INTO area VALUES ('330', '141031', '隰 县', '141000');INSERT INTO area VALUES ('331', '141032', '永和县', '141000');INSERT INTO area VALUES ('332', '141033', '蒲 县', '141000');INSERT INTO area VALUES ('333', '141034', '汾西县', '141000');INSERT INTO area VALUES ('334', '141081', '侯马市', '141000');INSERT INTO area VALUES ('335', '141082', '霍州市', '141000');INSERT INTO area VALUES ('336', '141101', '市辖区', '141100');INSERT INTO area VALUES ('337', '141102', '离石区', '141100');INSERT INTO area VALUES ('338', '141121', '文水县', '141100');INSERT INTO area VALUES ('339', '141122', '交城县', '141100');INSERT INTO area VALUES ('340', '141123', '兴 县', '141100');INSERT INTO area VALUES ('341', '141124', '临 县', '141100');INSERT INTO area VALUES ('342', '141125', '柳林县', '141100');INSERT INTO area VALUES ('343', '141126', '石楼县', '141100');INSERT INTO area VALUES ('344', '141127', '岚 县', '141100');INSERT INTO area VALUES ('345', '141128', '方山县', '141100');INSERT INTO area VALUES ('346', '141129', '中阳县', '141100');INSERT INTO area VALUES ('347', '141130', '交口县', '141100');INSERT INTO area VALUES ('348', '141181', '孝义市', '141100');INSERT INTO area VALUES ('349', '141182', '汾阳市', '141100');INSERT INTO area VALUES ('350', '150101', '市辖区', '150100');INSERT INTO area VALUES ('351', '150102', '新城区', '150100');INSERT INTO area VALUES ('352', '150103', '回民区', '150100');INSERT INTO area VALUES ('353', '150104', '玉泉区', '150100');INSERT INTO area VALUES ('354', '150105', '赛罕区', '150100');INSERT INTO area VALUES ('355', '150121', '土默特左旗', '150100');INSERT INTO area VALUES ('356', '150122', '托克托县', '150100');INSERT INTO area VALUES ('357', '150123', '和林格尔县', '150100');INSERT INTO area VALUES ('358', '150124', '清水河县', '150100');INSERT INTO area VALUES ('359', '150125', '武川县', '150100');INSERT INTO area VALUES ('360', '150201', '市辖区', '150200');INSERT INTO area VALUES ('361', '150202', '东河区', '150200');INSERT INTO area VALUES ('362', '150203', '昆都仑区', '150200');INSERT INTO area VALUES ('363', '150204', '青山区', '150200');INSERT INTO area VALUES ('364', '150205', '石拐区', '150200');INSERT INTO area VALUES ('365', '150206', '白云矿区', '150200');INSERT INTO area VALUES ('366', '150207', '九原区', '150200');INSERT INTO area VALUES ('367', '150221', '土默特右旗', '150200');INSERT INTO area VALUES ('368', '150222', '固阳县', '150200');INSERT INTO area VALUES ('369', '150223', '达尔罕茂明安联合旗', '150200');INSERT INTO area VALUES ('370', '150301', '市辖区', '150300');INSERT INTO area VALUES ('371', '150302', '海勃湾区', '150300');INSERT INTO area VALUES ('372', '150303', '海南区', '150300');INSERT INTO area VALUES ('373', '150304', '乌达区', '150300');INSERT INTO area VALUES ('374', '150401', '市辖区', '150400');INSERT INTO area VALUES ('375', '150402', '红山区', '150400');INSERT INTO area VALUES ('376', '150403', '元宝山区', '150400');INSERT INTO area VALUES ('377', '150404', '松山区', '150400');INSERT INTO area VALUES ('378', '150421', '阿鲁科尔沁旗', '150400');INSERT INTO area VALUES ('379', '150422', '巴林左旗', '150400');INSERT INTO area VALUES ('380', '150423', '巴林右旗', '150400');INSERT INTO area VALUES ('381', '150424', '林西县', '150400');INSERT INTO area VALUES ('382', '150425', '克什克腾旗', '150400');INSERT INTO area VALUES ('383', '150426', '翁牛特旗', '150400');INSERT INTO area VALUES ('384', '150428', '喀喇沁旗', '150400');INSERT INTO area VALUES ('385', '150429', '宁城县', '150400');INSERT INTO area VALUES ('386', '150430', '敖汉旗', '150400');INSERT INTO area VALUES ('387', '150501', '市辖区', '150500');INSERT INTO area VALUES ('388', '150502', '科尔沁区', '150500');INSERT INTO area VALUES ('389', '150521', '科尔沁左翼中旗', '150500');INSERT INTO area VALUES ('390', '150522', '科尔沁左翼后旗', '150500');INSERT INTO area VALUES ('391', '150523', '开鲁县', '150500');INSERT INTO area VALUES ('392', '150524', '库伦旗', '150500');INSERT INTO area VALUES ('393', '150525', '奈曼旗', '150500');INSERT INTO area VALUES ('394', '150526', '扎鲁特旗', '150500');INSERT INTO area VALUES ('395', '150581', '霍林郭勒市', '150500');INSERT INTO area VALUES ('396', '150602', '东胜区', '150600');INSERT INTO area VALUES ('397', '150621', '达拉特旗', '150600');INSERT INTO area VALUES ('398', '150622', '准格尔旗', '150600');INSERT INTO area VALUES ('399', '150623', '鄂托克前旗', '150600');INSERT INTO area VALUES ('400', '150624', '鄂托克旗', '150600');INSERT INTO area VALUES ('401', '150625', '杭锦旗', '150600');INSERT INTO area VALUES ('402', '150626', '乌审旗', '150600');INSERT INTO area VALUES ('403', '150627', '伊金霍洛旗', '150600');INSERT INTO area VALUES ('404', '150701', '市辖区', '150700');INSERT INTO area VALUES ('405', '150702', '海拉尔区', '150700');INSERT INTO area VALUES ('406', '150721', '阿荣旗', '150700');INSERT INTO area VALUES ('407', '150722', '莫力达瓦达斡尔族自治旗', '150700');INSERT INTO area VALUES ('408', '150723', '鄂伦春自治旗', '150700');INSERT INTO area VALUES ('409', '150724', '鄂温克族自治旗', '150700');INSERT INTO area VALUES ('410', '150725', '陈巴尔虎旗', '150700');INSERT INTO area VALUES ('411', '150726', '新巴尔虎左旗', '150700');INSERT INTO area VALUES ('412', '150727', '新巴尔虎右旗', '150700');INSERT INTO area VALUES ('413', '150781', '满洲里市', '150700');INSERT INTO area VALUES ('414', '150782', '牙克石市', '150700');INSERT INTO area VALUES ('415', '150783', '扎兰屯市', '150700');INSERT INTO area VALUES ('416', '150784', '额尔古纳市', '150700');INSERT INTO area VALUES ('417', '150785', '根河市', '150700');INSERT INTO area VALUES ('418', '150801', '市辖区', '150800');INSERT INTO area VALUES ('419', '150802', '临河区', '150800');INSERT INTO area VALUES ('420', '150821', '五原县', '150800');INSERT INTO area VALUES ('421', '150822', '磴口县', '150800');INSERT INTO area VALUES ('422', '150823', '乌拉特前旗', '150800');INSERT INTO area VALUES ('423', '150824', '乌拉特中旗', '150800');INSERT INTO area VALUES ('424', '150825', '乌拉特后旗', '150800');INSERT INTO area VALUES ('425', '150826', '杭锦后旗', '150800');INSERT INTO area VALUES ('426', '150901', '市辖区', '150900');INSERT INTO area VALUES ('427', '150902', '集宁区', '150900');INSERT INTO area VALUES ('428', '150921', '卓资县', '150900');INSERT INTO area VALUES ('429', '150922', '化德县', '150900');INSERT INTO area VALUES ('430', '150923', '商都县', '150900');INSERT INTO area VALUES ('431', '150924', '兴和县', '150900');INSERT INTO area VALUES ('432', '150925', '凉城县', '150900');INSERT INTO area VALUES ('433', '150926', '察哈尔右翼前旗', '150900');INSERT INTO area VALUES ('434', '150927', '察哈尔右翼中旗', '150900');INSERT INTO area VALUES ('435', '150928', '察哈尔右翼后旗', '150900');INSERT INTO area VALUES ('436', '150929', '四子王旗', '150900');INSERT INTO area VALUES ('437', '150981', '丰镇市', '150900');INSERT INTO area VALUES ('438', '152201', '乌兰浩特市', '152200');INSERT INTO area VALUES ('439', '152202', '阿尔山市', '152200');INSERT INTO area VALUES ('440', '152221', '科尔沁右翼前旗', '152200');INSERT INTO area VALUES ('441', '152222', '科尔沁右翼中旗', '152200');INSERT INTO area VALUES ('442', '152223', '扎赉特旗', '152200');INSERT INTO area VALUES ('443', '152224', '突泉县', '152200');INSERT INTO area VALUES ('444', '152501', '二连浩特市', '152500');INSERT INTO area VALUES ('445', '152502', '锡林浩特市', '152500');INSERT INTO area VALUES ('446', '152522', '阿巴嘎旗', '152500');INSERT INTO area VALUES ('447', '152523', '苏尼特左旗', '152500');INSERT INTO area VALUES ('448', '152524', '苏尼特右旗', '152500');INSERT INTO area VALUES ('449', '152525', '东乌珠穆沁旗', '152500');INSERT INTO area VALUES ('450', '152526', '西乌珠穆沁旗', '152500');INSERT INTO area VALUES ('451', '152527', '太仆寺旗', '152500');INSERT INTO area VALUES ('452', '152528', '镶黄旗', '152500');INSERT INTO area VALUES ('453', '152529', '正镶白旗', '152500');INSERT INTO area VALUES ('454', '152530', '正蓝旗', '152500');INSERT INTO area VALUES ('455', '152531', '多伦县', '152500');INSERT INTO area VALUES ('456', '152921', '阿拉善左旗', '152900');INSERT INTO area VALUES ('457', '152922', '阿拉善右旗', '152900');INSERT INTO area VALUES ('458', '152923', '额济纳旗', '152900');INSERT INTO area VALUES ('459', '210101', '市辖区', '210100');INSERT INTO area VALUES ('460', '210102', '和平区', '210100');INSERT INTO area VALUES ('461', '210103', '沈河区', '210100');INSERT INTO area VALUES ('462', '210104', '大东区', '210100');INSERT INTO area VALUES ('463', '210105', '皇姑区', '210100');INSERT INTO area VALUES ('464', '210106', '铁西区', '210100');INSERT INTO area VALUES ('465', '210111', '苏家屯区', '210100');INSERT INTO area VALUES ('466', '210112', '东陵区', '210100');INSERT INTO area VALUES ('467', '210113', '新城子区', '210100');INSERT INTO area VALUES ('468', '210114', '于洪区', '210100');INSERT INTO area VALUES ('469', '210122', '辽中县', '210100');INSERT INTO area VALUES ('470', '210123', '康平县', '210100');INSERT INTO area VALUES ('471', '210124', '法库县', '210100');INSERT INTO area VALUES ('472', '210181', '新民市', '210100');INSERT INTO area VALUES ('473', '210201', '市辖区', '210200');INSERT INTO area VALUES ('474', '210202', '中山区', '210200');INSERT INTO area VALUES ('475', '210203', '西岗区', '210200');INSERT INTO area VALUES ('476', '210204', '沙河口区', '210200');INSERT INTO area VALUES ('477', '210211', '甘井子区', '210200');INSERT INTO area VALUES ('478', '210212', '旅顺口区', '210200');INSERT INTO area VALUES ('479', '210213', '金州区', '210200');INSERT INTO area VALUES ('480', '210224', '长海县', '210200');INSERT INTO area VALUES ('481', '210281', '瓦房店市', '210200');INSERT INTO area VALUES ('482', '210282', '普兰店市', '210200');INSERT INTO area VALUES ('483', '210283', '庄河市', '210200');INSERT INTO area VALUES ('484', '210301', '市辖区', '210300');INSERT INTO area VALUES ('485', '210302', '铁东区', '210300');INSERT INTO area VALUES ('486', '210303', '铁西区', '210300');INSERT INTO area VALUES ('487', '210304', '立山区', '210300');INSERT INTO area VALUES ('488', '210311', '千山区', '210300');INSERT INTO area VALUES ('489', '210321', '台安县', '210300');INSERT INTO area VALUES ('490', '210323', '岫岩满族自治县', '210300');INSERT INTO area VALUES ('491', '210381', '海城市', '210300');INSERT INTO area VALUES ('492', '210401', '市辖区', '210400');INSERT INTO area VALUES ('493', '210402', '新抚区', '210400');INSERT INTO area VALUES ('494', '210403', '东洲区', '210400');INSERT INTO area VALUES ('495', '210404', '望花区', '210400');INSERT INTO area VALUES ('496', '210411', '顺城区', '210400');INSERT INTO area VALUES ('497', '210421', '抚顺县', '210400');INSERT INTO area VALUES ('498', '210422', '新宾满族自治县', '210400');INSERT INTO area VALUES ('499', '210423', '清原满族自治县', '210400');INSERT INTO area VALUES ('500', '210501', '市辖区', '210500');INSERT INTO area VALUES ('501', '210502', '平山区', '210500');INSERT INTO area VALUES ('502', '210503', '溪湖区', '210500');INSERT INTO area VALUES ('503', '210504', '明山区', '210500');INSERT INTO area VALUES ('504', '210505', '南芬区', '210500');INSERT INTO area VALUES ('505', '210521', '本溪满族自治县', '210500');INSERT INTO area VALUES ('506', '210522', '桓仁满族自治县', '210500');INSERT INTO area VALUES ('507', '210601', '市辖区', '210600');INSERT INTO area VALUES ('508', '210602', '元宝区', '210600');INSERT INTO area VALUES ('509', '210603', '振兴区', '210600');INSERT INTO area VALUES ('510', '210604', '振安区', '210600');INSERT INTO area VALUES ('511', '210624', '宽甸满族自治县', '210600');INSERT INTO area VALUES ('512', '210681', '东港市', '210600');INSERT INTO area VALUES ('513', '210682', '凤城市', '210600');INSERT INTO area VALUES ('514', '210701', '市辖区', '210700');INSERT INTO area VALUES ('515', '210702', '古塔区', '210700');INSERT INTO area VALUES ('516', '210703', '凌河区', '210700');INSERT INTO area VALUES ('517', '210711', '太和区', '210700');INSERT INTO area VALUES ('518', '210726', '黑山县', '210700');INSERT INTO area VALUES ('519', '210727', '义 县', '210700');INSERT INTO area VALUES ('520', '210781', '凌海市', '210700');INSERT INTO area VALUES ('521', '210782', '北宁市', '210700');INSERT INTO area VALUES ('522', '210801', '市辖区', '210800');INSERT INTO area VALUES ('523', '210802', '站前区', '210800');INSERT INTO area VALUES ('524', '210803', '西市区', '210800');INSERT INTO area VALUES ('525', '210804', '鲅鱼圈区', '210800');INSERT INTO area VALUES ('526', '210811', '老边区', '210800');INSERT INTO area VALUES ('527', '210881', '盖州市', '210800');INSERT INTO area VALUES ('528', '210882', '大石桥市', '210800');INSERT INTO area VALUES ('529', '210901', '市辖区', '210900');INSERT INTO area VALUES ('530', '210902', '海州区', '210900');INSERT INTO area VALUES ('531', '210903', '新邱区', '210900');INSERT INTO area VALUES ('532', '210904', '太平区', '210900');INSERT INTO area VALUES ('533', '210905', '清河门区', '210900');INSERT INTO area VALUES ('534', '210911', '细河区', '210900');INSERT INTO area VALUES ('535', '210921', '阜新蒙古族自治县', '210900');INSERT INTO area VALUES ('536', '210922', '彰武县', '210900');INSERT INTO area VALUES ('537', '211001', '市辖区', '211000');INSERT INTO area VALUES ('538', '211002', '白塔区', '211000');INSERT INTO area VALUES ('539', '211003', '文圣区', '211000');INSERT INTO area VALUES ('540', '211004', '宏伟区', '211000');INSERT INTO area VALUES ('541', '211005', '弓长岭区', '211000');INSERT INTO area VALUES ('542', '211011', '太子河区', '211000');INSERT INTO area VALUES ('543', '211021', '辽阳县', '211000');INSERT INTO area VALUES ('544', '211081', '灯塔市', '211000');INSERT INTO area VALUES ('545', '211101', '市辖区', '211100');INSERT INTO area VALUES ('546', '211102', '双台子区', '211100');INSERT INTO area VALUES ('547', '211103', '兴隆台区', '211100');INSERT INTO area VALUES ('548', '211121', '大洼县', '211100');INSERT INTO area VALUES ('549', '211122', '盘山县', '211100');INSERT INTO area VALUES ('550', '211201', '市辖区', '211200');INSERT INTO area VALUES ('551', '211202', '银州区', '211200');INSERT INTO area VALUES ('552', '211204', '清河区', '211200');INSERT INTO area VALUES ('553', '211221', '铁岭县', '211200');INSERT INTO area VALUES ('554', '211223', '西丰县', '211200');INSERT INTO area VALUES ('555', '211224', '昌图县', '211200');INSERT INTO area VALUES ('556', '211281', '调兵山市', '211200');INSERT INTO area VALUES ('557', '211282', '开原市', '211200');INSERT INTO area VALUES ('558', '211301', '市辖区', '211300');INSERT INTO area VALUES ('559', '211302', '双塔区', '211300');INSERT INTO area VALUES ('560', '211303', '龙城区', '211300');INSERT INTO area VALUES ('561', '211321', '朝阳县', '211300');INSERT INTO area VALUES ('562', '211322', '建平县', '211300');INSERT INTO area VALUES ('563', '211324', '喀喇沁左翼蒙古族自治县', '211300');INSERT INTO area VALUES ('564', '211381', '北票市', '211300');INSERT INTO area VALUES ('565', '211382', '凌源市', '211300');INSERT INTO area VALUES ('566', '211401', '市辖区', '211400');INSERT INTO area VALUES ('567', '211402', '连山区', '211400');INSERT INTO area VALUES ('568', '211403', '龙港区', '211400');INSERT INTO area VALUES ('569', '211404', '南票区', '211400');INSERT INTO area VALUES ('570', '211421', '绥中县', '211400');INSERT INTO area VALUES ('571', '211422', '建昌县', '211400');INSERT INTO area VALUES ('572', '211481', '兴城市', '211400');INSERT INTO area VALUES ('573', '220101', '市辖区', '220100');INSERT INTO area VALUES ('574', '220102', '南关区', '220100');INSERT INTO area VALUES ('575', '220103', '宽城区', '220100');INSERT INTO area VALUES ('576', '220104', '朝阳区', '220100');INSERT INTO area VALUES ('577', '220105', '二道区', '220100');INSERT INTO area VALUES ('578', '220106', '绿园区', '220100');INSERT INTO area VALUES ('579', '220112', '双阳区', '220100');INSERT INTO area VALUES ('580', '220122', '农安县', '220100');INSERT INTO area VALUES ('581', '220181', '九台市', '220100');INSERT INTO area VALUES ('582', '220182', '榆树市', '220100');INSERT INTO area VALUES ('583', '220183', '德惠市', '220100');INSERT INTO area VALUES ('584', '220201', '市辖区', '220200');INSERT INTO area VALUES ('585', '220202', '昌邑区', '220200');INSERT INTO area VALUES ('586', '220203', '龙潭区', '220200');INSERT INTO area VALUES ('587', '220204', '船营区', '220200');INSERT INTO area VALUES ('588', '220211', '丰满区', '220200');INSERT INTO area VALUES ('589', '220221', '永吉县', '220200');INSERT INTO area VALUES ('590', '220281', '蛟河市', '220200');INSERT INTO area VALUES ('591', '220282', '桦甸市', '220200');INSERT INTO area VALUES ('592', '220283', '舒兰市', '220200');INSERT INTO area VALUES ('593', '220284', '磐石市', '220200');INSERT INTO area VALUES ('594', '220301', '市辖区', '220300');INSERT INTO area VALUES ('595', '220302', '铁西区', '220300');INSERT INTO area VALUES ('596', '220303', '铁东区', '220300');INSERT INTO area VALUES ('597', '220322', '梨树县', '220300');INSERT INTO area VALUES ('598', '220323', '伊通满族自治县', '220300');INSERT INTO area VALUES ('599', '220381', '公主岭市', '220300');INSERT INTO area VALUES ('600', '220382', '双辽市', '220300');INSERT INTO area VALUES ('601', '220401', '市辖区', '220400');INSERT INTO area VALUES ('602', '220402', '龙山区', '220400');INSERT INTO area VALUES ('603', '220403', '西安区', '220400');INSERT INTO area VALUES ('604', '220421', '东丰县', '220400');INSERT INTO area VALUES ('605', '220422', '东辽县', '220400');INSERT INTO area VALUES ('606', '220501', '市辖区', '220500');INSERT INTO area VALUES ('607', '220502', '东昌区', '220500');INSERT INTO area VALUES ('608', '220503', '二道江区', '220500');INSERT INTO area VALUES ('609', '220521', '通化县', '220500');INSERT INTO area VALUES ('610', '220523', '辉南县', '220500');INSERT INTO area VALUES ('611', '220524', '柳河县', '220500');INSERT INTO area VALUES ('612', '220581', '梅河口市', '220500');INSERT INTO area VALUES ('613', '220582', '集安市', '220500');INSERT INTO area VALUES ('614', '220601', '市辖区', '220600');INSERT INTO area VALUES ('615', '220602', '八道江区', '220600');INSERT INTO area VALUES ('616', '220621', '抚松县', '220600');INSERT INTO area VALUES ('617', '220622', '靖宇县', '220600');INSERT INTO area VALUES ('618', '220623', '长白朝鲜族自治县', '220600');INSERT INTO area VALUES ('619', '220625', '江源县', '220600');INSERT INTO area VALUES ('620', '220681', '临江市', '220600');INSERT INTO area VALUES ('621', '220701', '市辖区', '220700');INSERT INTO area VALUES ('622', '220702', '宁江区', '220700');INSERT INTO area VALUES ('623', '220721', '前郭尔罗斯蒙古族自治县', '220700');INSERT INTO area VALUES ('624', '220722', '长岭县', '220700');INSERT INTO area VALUES ('625', '220723', '乾安县', '220700');INSERT INTO area VALUES ('626', '220724', '扶余县', '220700');INSERT INTO area VALUES ('627', '220801', '市辖区', '220800');INSERT INTO area VALUES ('628', '220802', '洮北区', '220800');INSERT INTO area VALUES ('629', '220821', '镇赉县', '220800');INSERT INTO area VALUES ('630', '220822', '通榆县', '220800');INSERT INTO area VALUES ('631', '220881', '洮南市', '220800');INSERT INTO area VALUES ('632', '220882', '大安市', '220800');INSERT INTO area VALUES ('633', '222401', '延吉市', '222400');INSERT INTO area VALUES ('634', '222402', '图们市', '222400');INSERT INTO area VALUES ('635', '222403', '敦化市', '222400');INSERT INTO area VALUES ('636', '222404', '珲春市', '222400');INSERT INTO area VALUES ('637', '222405', '龙井市', '222400');INSERT INTO area VALUES ('638', '222406', '和龙市', '222400');INSERT INTO area VALUES ('639', '222424', '汪清县', '222400');INSERT INTO area VALUES ('640', '222426', '安图县', '222400');INSERT INTO area VALUES ('641', '230101', '市辖区', '230100');INSERT INTO area VALUES ('642', '230102', '道里区', '230100');INSERT INTO area VALUES ('643', '230103', '南岗区', '230100');INSERT INTO area VALUES ('644', '230104', '道外区', '230100');INSERT INTO area VALUES ('645', '230106', '香坊区', '230100');INSERT INTO area VALUES ('646', '230107', '动力区', '230100');INSERT INTO area VALUES ('647', '230108', '平房区', '230100');INSERT INTO area VALUES ('648', '230109', '松北区', '230100');INSERT INTO area VALUES ('649', '230111', '呼兰区', '230100');INSERT INTO area VALUES ('650', '230123', '依兰县', '230100');INSERT INTO area VALUES ('651', '230124', '方正县', '230100');INSERT INTO area VALUES ('652', '230125', '宾 县', '230100');INSERT INTO area VALUES ('653', '230126', '巴彦县', '230100');INSERT INTO area VALUES ('654', '230127', '木兰县', '230100');INSERT INTO area VALUES ('655', '230128', '通河县', '230100');INSERT INTO area VALUES ('656', '230129', '延寿县', '230100');INSERT INTO area VALUES ('657', '230181', '阿城市', '230100');INSERT INTO area VALUES ('658', '230182', '双城市', '230100');INSERT INTO area VALUES ('659', '230183', '尚志市', '230100');INSERT INTO area VALUES ('660', '230184', '五常市', '230100');INSERT INTO area VALUES ('661', '230201', '市辖区', '230200');INSERT INTO area VALUES ('662', '230202', '龙沙区', '230200');INSERT INTO area VALUES ('663', '230203', '建华区', '230200');INSERT INTO area VALUES ('664', '230204', '铁锋区', '230200');INSERT INTO area VALUES ('665', '230205', '昂昂溪区', '230200');INSERT INTO area VALUES ('666', '230206', '富拉尔基区', '230200');INSERT INTO area VALUES ('667', '230207', '碾子山区', '230200');INSERT INTO area VALUES ('668', '230208', '梅里斯达斡尔族区', '230200');INSERT INTO area VALUES ('669', '230221', '龙江县', '230200');INSERT INTO area VALUES ('670', '230223', '依安县', '230200');INSERT INTO area VALUES ('671', '230224', '泰来县', '230200');INSERT INTO area VALUES ('672', '230225', '甘南县', '230200');INSERT INTO area VALUES ('673', '230227', '富裕县', '230200');INSERT INTO area VALUES ('674', '230229', '克山县', '230200');INSERT INTO area VALUES ('675', '230230', '克东县', '230200');INSERT INTO area VALUES ('676', '230231', '拜泉县', '230200');INSERT INTO area VALUES ('677', '230281', '讷河市', '230200');INSERT INTO area VALUES ('678', '230301', '市辖区', '230300');INSERT INTO area VALUES ('679', '230302', '鸡冠区', '230300');INSERT INTO area VALUES ('680', '230303', '恒山区', '230300');INSERT INTO area VALUES ('681', '230304', '滴道区', '230300');INSERT INTO area VALUES ('682', '230305', '梨树区', '230300');INSERT INTO area VALUES ('683', '230306', '城子河区', '230300');INSERT INTO area VALUES ('684', '230307', '麻山区', '230300');INSERT INTO area VALUES ('685', '230321', '鸡东县', '230300');INSERT INTO area VALUES ('686', '230381', '虎林市', '230300');INSERT INTO area VALUES ('687', '230382', '密山市', '230300');INSERT INTO area VALUES ('688', '230401', '市辖区', '230400');INSERT INTO area VALUES ('689', '230402', '向阳区', '230400');INSERT INTO area VALUES ('690', '230403', '工农区', '230400');INSERT INTO area VALUES ('691', '230404', '南山区', '230400');INSERT INTO area VALUES ('692', '230405', '兴安区', '230400');INSERT INTO area VALUES ('693', '230406', '东山区', '230400');INSERT INTO area VALUES ('694', '230407', '兴山区', '230400');INSERT INTO area VALUES ('695', '230421', '萝北县', '230400');INSERT INTO area VALUES ('696', '230422', '绥滨县', '230400');INSERT INTO area VALUES ('697', '230501', '市辖区', '230500');INSERT INTO area VALUES ('698', '230502', '尖山区', '230500');INSERT INTO area VALUES ('699', '230503', '岭东区', '230500');INSERT INTO area VALUES ('700', '230505', '四方台区', '230500');INSERT INTO area VALUES ('701', '230506', '宝山区', '230500');INSERT INTO area VALUES ('702', '230521', '集贤县', '230500');INSERT INTO area VALUES ('703', '230522', '友谊县', '230500');INSERT INTO area VALUES ('704', '230523', '宝清县', '230500');INSERT INTO area VALUES ('705', '230524', '饶河县', '230500');INSERT INTO area VALUES ('706', '230601', '市辖区', '230600');INSERT INTO area VALUES ('707', '230602', '萨尔图区', '230600');INSERT INTO area VALUES ('708', '230603', '龙凤区', '230600');INSERT INTO area VALUES ('709', '230604', '让胡路区', '230600');INSERT INTO area VALUES ('710', '230605', '红岗区', '230600');INSERT INTO area VALUES ('711', '230606', '大同区', '230600');INSERT INTO area VALUES ('712', '230621', '肇州县', '230600');INSERT INTO area VALUES ('713', '230622', '肇源县', '230600');INSERT INTO area VALUES ('714', '230623', '林甸县', '230600');INSERT INTO area VALUES ('715', '230624', '杜尔伯特蒙古族自治县', '230600');INSERT INTO area VALUES ('716', '230701', '市辖区', '230700');INSERT INTO area VALUES ('717', '230702', '伊春区', '230700');INSERT INTO area VALUES ('718', '230703', '南岔区', '230700');INSERT INTO area VALUES ('719', '230704', '友好区', '230700');INSERT INTO area VALUES ('720', '230705', '西林区', '230700');INSERT INTO area VALUES ('721', '230706', '翠峦区', '230700');INSERT INTO area VALUES ('722', '230707', '新青区', '230700');INSERT INTO area VALUES ('723', '230708', '美溪区', '230700');INSERT INTO area VALUES ('724', '230709', '金山屯区', '230700');INSERT INTO area VALUES ('725', '230710', '五营区', '230700');INSERT INTO area VALUES ('726', '230711', '乌马河区', '230700');INSERT INTO area VALUES ('727', '230712', '汤旺河区', '230700');INSERT INTO area VALUES ('728', '230713', '带岭区', '230700');INSERT INTO area VALUES ('729', '230714', '乌伊岭区', '230700');INSERT INTO area VALUES ('730', '230715', '红星区', '230700');INSERT INTO area VALUES ('731', '230716', '上甘岭区', '230700');INSERT INTO area VALUES ('732', '230722', '嘉荫县', '230700');INSERT INTO area VALUES ('733', '230781', '铁力市', '230700');INSERT INTO area VALUES ('734', '230801', '市辖区', '230800');INSERT INTO area VALUES ('735', '230802', '永红区', '230800');INSERT INTO area VALUES ('736', '230803', '向阳区', '230800');INSERT INTO area VALUES ('737', '230804', '前进区', '230800');INSERT INTO area VALUES ('738', '230805', '东风区', '230800');INSERT INTO area VALUES ('739', '230811', '郊 区', '230800');INSERT INTO area VALUES ('740', '230822', '桦南县', '230800');INSERT INTO area VALUES ('741', '230826', '桦川县', '230800');INSERT INTO area VALUES ('742', '230828', '汤原县', '230800');INSERT INTO area VALUES ('743', '230833', '抚远县', '230800');INSERT INTO area VALUES ('744', '230881', '同江市', '230800');INSERT INTO area VALUES ('745', '230882', '富锦市', '230800');INSERT INTO area VALUES ('746', '230901', '市辖区', '230900');INSERT INTO area VALUES ('747', '230902', '新兴区', '230900');INSERT INTO area VALUES ('748', '230903', '桃山区', '230900');INSERT INTO area VALUES ('749', '230904', '茄子河区', '230900');INSERT INTO area VALUES ('750', '230921', '勃利县', '230900');INSERT INTO area VALUES ('751', '231001', '市辖区', '231000');INSERT INTO area VALUES ('752', '231002', '东安区', '231000');INSERT INTO area VALUES ('753', '231003', '阳明区', '231000');INSERT INTO area VALUES ('754', '231004', '爱民区', '231000');INSERT INTO area VALUES ('755', '231005', '西安区', '231000');INSERT INTO area VALUES ('756', '231024', '东宁县', '231000');INSERT INTO area VALUES ('757', '231025', '林口县', '231000');INSERT INTO area VALUES ('758', '231081', '绥芬河市', '231000');INSERT INTO area VALUES ('759', '231083', '海林市', '231000');INSERT INTO area VALUES ('760', '231084', '宁安市', '231000');INSERT INTO area VALUES ('761', '231085', '穆棱市', '231000');INSERT INTO area VALUES ('762', '231101', '市辖区', '231100');INSERT INTO area VALUES ('763', '231102', '爱辉区', '231100');INSERT INTO area VALUES ('764', '231121', '嫩江县', '231100');INSERT INTO area VALUES ('765', '231123', '逊克县', '231100');INSERT INTO area VALUES ('766', '231124', '孙吴县', '231100');INSERT INTO area VALUES ('767', '231181', '北安市', '231100');INSERT INTO area VALUES ('768', '231182', '五大连池市', '231100');INSERT INTO area VALUES ('769', '231201', '市辖区', '231200');INSERT INTO area VALUES ('770', '231202', '北林区', '231200');INSERT INTO area VALUES ('771', '231221', '望奎县', '231200');INSERT INTO area VALUES ('772', '231222', '兰西县', '231200');INSERT INTO area VALUES ('773', '231223', '青冈县', '231200');INSERT INTO area VALUES ('774', '231224', '庆安县', '231200');INSERT INTO area VALUES ('775', '231225', '明水县', '231200');INSERT INTO area VALUES ('776', '231226', '绥棱县', '231200');INSERT INTO area VALUES ('777', '231281', '安达市', '231200');INSERT INTO area VALUES ('778', '231282', '肇东市', '231200');INSERT INTO area VALUES ('779', '231283', '海伦市', '231200');INSERT INTO area VALUES ('780', '232721', '呼玛县', '232700');INSERT INTO area VALUES ('781', '232722', '塔河县', '232700');INSERT INTO area VALUES ('782', '232723', '漠河县', '232700');INSERT INTO area VALUES ('783', '310101', '黄浦区', '310100');INSERT INTO area VALUES ('784', '310103', '卢湾区', '310100');INSERT INTO area VALUES ('785', '310104', '徐汇区', '310100');INSERT INTO area VALUES ('786', '310105', '长宁区', '310100');INSERT INTO area VALUES ('787', '310106', '静安区', '310100');INSERT INTO area VALUES ('788', '310107', '普陀区', '310100');INSERT INTO area VALUES ('789', '310108', '闸北区', '310100');INSERT INTO area VALUES ('790', '310109', '虹口区', '310100');INSERT INTO area VALUES ('791', '310110', '杨浦区', '310100');INSERT INTO area VALUES ('792', '310112', '闵行区', '310100');INSERT INTO area VALUES ('793', '310113', '宝山区', '310100');INSERT INTO area VALUES ('794', '310114', '嘉定区', '310100');INSERT INTO area VALUES ('795', '310115', '浦东新区', '310100');INSERT INTO area VALUES ('796', '310116', '金山区', '310100');INSERT INTO area VALUES ('797', '310117', '松江区', '310100');INSERT INTO area VALUES ('798', '310118', '青浦区', '310100');INSERT INTO area VALUES ('799', '310119', '南汇区', '310100');INSERT INTO area VALUES ('800', '310120', '奉贤区', '310100');INSERT INTO area VALUES ('801', '310230', '崇明县', '310100');INSERT INTO area VALUES ('802', '320101', '市辖区', '320100');INSERT INTO area VALUES ('803', '320102', '玄武区', '320100');INSERT INTO area VALUES ('804', '320103', '白下区', '320100');INSERT INTO area VALUES ('805', '320104', '秦淮区', '320100');INSERT INTO area VALUES ('806', '320105', '建邺区', '320100');INSERT INTO area VALUES ('807', '320106', '鼓楼区', '320100');INSERT INTO area VALUES ('808', '320107', '下关区', '320100');INSERT INTO area VALUES ('809', '320111', '浦口区', '320100');INSERT INTO area VALUES ('810', '320113', '栖霞区', '320100');INSERT INTO area VALUES ('811', '320114', '雨花台区', '320100');INSERT INTO area VALUES ('812', '320115', '江宁区', '320100');INSERT INTO area VALUES ('813', '320116', '六合区', '320100');INSERT INTO area VALUES ('814', '320124', '溧水县', '320100');INSERT INTO area VALUES ('815', '320125', '高淳县', '320100');INSERT INTO area VALUES ('816', '320201', '市辖区', '320200');INSERT INTO area VALUES ('817', '320202', '崇安区', '320200');INSERT INTO area VALUES ('818', '320203', '南长区', '320200');INSERT INTO area VALUES ('819', '320204', '北塘区', '320200');INSERT INTO area VALUES ('820', '320205', '锡山区', '320200');INSERT INTO area VALUES ('821', '320206', '惠山区', '320200');INSERT INTO area VALUES ('822', '320211', '滨湖区', '320200');INSERT INTO area VALUES ('823', '320281', '江阴市', '320200');INSERT INTO area VALUES ('824', '320282', '宜兴市', '320200');INSERT INTO area VALUES ('825', '320301', '市辖区', '320300');INSERT INTO area VALUES ('826', '320302', '鼓楼区', '320300');INSERT INTO area VALUES ('827', '320303', '云龙区', '320300');INSERT INTO area VALUES ('828', '320304', '九里区', '320300');INSERT INTO area VALUES ('829', '320305', '贾汪区', '320300');INSERT INTO area VALUES ('830', '320311', '泉山区', '320300');INSERT INTO area VALUES ('831', '320321', '丰 县', '320300');INSERT INTO area VALUES ('832', '320322', '沛 县', '320300');INSERT INTO area VALUES ('833', '320323', '铜山县', '320300');INSERT INTO area VALUES ('834', '320324', '睢宁县', '320300');INSERT INTO area VALUES ('835', '320381', '新沂市', '320300');INSERT INTO area VALUES ('836', '320382', '邳州市', '320300');INSERT INTO area VALUES ('837', '320401', '市辖区', '320400');INSERT INTO area VALUES ('838', '320402', '天宁区', '320400');INSERT INTO area VALUES ('839', '320404', '钟楼区', '320400');INSERT INTO area VALUES ('840', '320405', '戚墅堰区', '320400');INSERT INTO area VALUES ('841', '320411', '新北区', '320400');INSERT INTO area VALUES ('842', '320412', '武进区', '320400');INSERT INTO area VALUES ('843', '320481', '溧阳市', '320400');INSERT INTO area VALUES ('844', '320482', '金坛市', '320400');INSERT INTO area VALUES ('845', '320501', '市辖区', '320500');INSERT INTO area VALUES ('846', '320502', '沧浪区', '320500');INSERT INTO area VALUES ('847', '320503', '平江区', '320500');INSERT INTO area VALUES ('848', '320504', '金阊区', '320500');INSERT INTO area VALUES ('849', '320505', '虎丘区', '320500');INSERT INTO area VALUES ('850', '320506', '吴中区', '320500');INSERT INTO area VALUES ('851', '320507', '相城区', '320500');INSERT INTO area VALUES ('852', '320581', '常熟市', '320500');INSERT INTO area VALUES ('853', '320582', '张家港市', '320500');INSERT INTO area VALUES ('854', '320583', '昆山市', '320500');INSERT INTO area VALUES ('855', '320584', '吴江市', '320500');INSERT INTO area VALUES ('856', '320585', '太仓市', '320500');INSERT INTO area VALUES ('857', '320601', '市辖区', '320600');INSERT INTO area VALUES ('858', '320602', '崇川区', '320600');INSERT INTO area VALUES ('859', '320611', '港闸区', '320600');INSERT INTO area VALUES ('860', '320621', '海安县', '320600');INSERT INTO area VALUES ('861', '320623', '如东县', '320600');INSERT INTO area VALUES ('862', '320681', '启东市', '320600');INSERT INTO area VALUES ('863', '320682', '如皋市', '320600');INSERT INTO area VALUES ('864', '320683', '通州市', '320600');INSERT INTO area VALUES ('865', '320684', '海门市', '320600');INSERT INTO area VALUES ('866', '320701', '市辖区', '320700');INSERT INTO area VALUES ('867', '320703', '连云区', '320700');INSERT INTO area VALUES ('868', '320705', '新浦区', '320700');INSERT INTO area VALUES ('869', '320706', '海州区', '320700');INSERT INTO area VALUES ('870', '320721', '赣榆县', '320700');INSERT INTO area VALUES ('871', '320722', '东海县', '320700');INSERT INTO area VALUES ('872', '320723', '灌云县', '320700');INSERT INTO area VALUES ('873', '320724', '灌南县', '320700');INSERT INTO area VALUES ('874', '320801', '市辖区', '320800');INSERT INTO area VALUES ('875', '320802', '清河区', '320800');INSERT INTO area VALUES ('876', '320803', '楚州区', '320800');INSERT INTO area VALUES ('877', '320804', '淮阴区', '320800');INSERT INTO area VALUES ('878', '320811', '清浦区', '320800');INSERT INTO area VALUES ('879', '320826', '涟水县', '320800');INSERT INTO area VALUES ('880', '320829', '洪泽县', '320800');INSERT INTO area VALUES ('881', '320830', '盱眙县', '320800');INSERT INTO area VALUES ('882', '320831', '金湖县', '320800');INSERT INTO area VALUES ('883', '320901', '市辖区', '320900');INSERT INTO area VALUES ('884', '320902', '亭湖区', '320900');INSERT INTO area VALUES ('885', '320903', '盐都区', '320900');INSERT INTO area VALUES ('886', '320921', '响水县', '320900');INSERT INTO area VALUES ('887', '320922', '滨海县', '320900');INSERT INTO area VALUES ('888', '320923', '阜宁县', '320900');INSERT INTO area VALUES ('889', '320924', '射阳县', '320900');INSERT INTO area VALUES ('890', '320925', '建湖县', '320900');INSERT INTO area VALUES ('891', '320981', '东台市', '320900');INSERT INTO area VALUES ('892', '320982', '大丰市', '320900');INSERT INTO area VALUES ('893', '321001', '市辖区', '321000');INSERT INTO area VALUES ('894', '321002', '广陵区', '321000');INSERT INTO area VALUES ('895', '321003', '邗江区', '321000');INSERT INTO area VALUES ('896', '321011', '郊 区', '321000');INSERT INTO area VALUES ('897', '321023', '宝应县', '321000');INSERT INTO area VALUES ('898', '321081', '仪征市', '321000');INSERT INTO area VALUES ('899', '321084', '高邮市', '321000');INSERT INTO area VALUES ('900', '321088', '江都市', '321000');INSERT INTO area VALUES ('901', '321101', '市辖区', '321100');INSERT INTO area VALUES ('902', '321102', '京口区', '321100');INSERT INTO area VALUES ('903', '321111', '润州区', '321100');INSERT INTO area VALUES ('904', '321112', '丹徒区', '321100');INSERT INTO area VALUES ('905', '321181', '丹阳市', '321100');INSERT INTO area VALUES ('906', '321182', '扬中市', '321100');INSERT INTO area VALUES ('907', '321183', '句容市', '321100');INSERT INTO area VALUES ('908', '321201', '市辖区', '321200');INSERT INTO area VALUES ('909', '321202', '海陵区', '321200');INSERT INTO area VALUES ('910', '321203', '高港区', '321200');INSERT INTO area VALUES ('911', '321281', '兴化市', '321200');INSERT INTO area VALUES ('912', '321282', '靖江市', '321200');INSERT INTO area VALUES ('913', '321283', '泰兴市', '321200');INSERT INTO area VALUES ('914', '321284', '姜堰市', '321200');INSERT INTO area VALUES ('915', '321301', '市辖区', '321300');INSERT INTO area VALUES ('916', '321302', '宿城区', '321300');INSERT INTO area VALUES ('917', '321311', '宿豫区', '321300');INSERT INTO area VALUES ('918', '321322', '沭阳县', '321300');INSERT INTO area VALUES ('919', '321323', '泗阳县', '321300');INSERT INTO area VALUES ('920', '321324', '泗洪县', '321300');INSERT INTO area VALUES ('921', '330101', '市辖区', '330100');INSERT INTO area VALUES ('922', '330102', '上城区', '330100');INSERT INTO area VALUES ('923', '330103', '下城区', '330100');INSERT INTO area VALUES ('924', '330104', '江干区', '330100');INSERT INTO area VALUES ('925', '330105', '拱墅区', '330100');INSERT INTO area VALUES ('926', '330106', '西湖区', '330100');INSERT INTO area VALUES ('927', '330108', '滨江区', '330100');INSERT INTO area VALUES ('928', '330109', '萧山区', '330100');INSERT INTO area VALUES ('929', '330110', '余杭区', '330100');INSERT INTO area VALUES ('930', '330122', '桐庐县', '330100');INSERT INTO area VALUES ('931', '330127', '淳安县', '330100');INSERT INTO area VALUES ('932', '330182', '建德市', '330100');INSERT INTO area VALUES ('933', '330183', '富阳市', '330100');INSERT INTO area VALUES ('934', '330185', '临安市', '330100');INSERT INTO area VALUES ('935', '330201', '市辖区', '330200');INSERT INTO area VALUES ('936', '330203', '海曙区', '330200');INSERT INTO area VALUES ('937', '330204', '江东区', '330200');INSERT INTO area VALUES ('938', '330205', '江北区', '330200');INSERT INTO area VALUES ('939', '330206', '北仑区', '330200');INSERT INTO area VALUES ('940', '330211', '镇海区', '330200');INSERT INTO area VALUES ('941', '330212', '鄞州区', '330200');INSERT INTO area VALUES ('942', '330225', '象山县', '330200');INSERT INTO area VALUES ('943', '330226', '宁海县', '330200');INSERT INTO area VALUES ('944', '330281', '余姚市', '330200');INSERT INTO area VALUES ('945', '330282', '慈溪市', '330200');INSERT INTO area VALUES ('946', '330283', '奉化市', '330200');INSERT INTO area VALUES ('947', '330301', '市辖区', '330300');INSERT INTO area VALUES ('948', '330302', '鹿城区', '330300');INSERT INTO area VALUES ('949', '330303', '龙湾区', '330300');INSERT INTO area VALUES ('950', '330304', '瓯海区', '330300');INSERT INTO area VALUES ('951', '330322', '洞头县', '330300');INSERT INTO area VALUES ('952', '330324', '永嘉县', '330300');INSERT INTO area VALUES ('953', '330326', '平阳县', '330300');INSERT INTO area VALUES ('954', '330327', '苍南县', '330300');INSERT INTO area VALUES ('955', '330328', '文成县', '330300');INSERT INTO area VALUES ('956', '330329', '泰顺县', '330300');INSERT INTO area VALUES ('957', '330381', '瑞安市', '330300');INSERT INTO area VALUES ('958', '330382', '乐清市', '330300');INSERT INTO area VALUES ('959', '330401', '市辖区', '330400');INSERT INTO area VALUES ('960', '330402', '秀城区', '330400');INSERT INTO area VALUES ('961', '330411', '秀洲区', '330400');INSERT INTO area VALUES ('962', '330421', '嘉善县', '330400');INSERT INTO area VALUES ('963', '330424', '海盐县', '330400');INSERT INTO area VALUES ('964', '330481', '海宁市', '330400');INSERT INTO area VALUES ('965', '330482', '平湖市', '330400');INSERT INTO area VALUES ('966', '330483', '桐乡市', '330400');INSERT INTO area VALUES ('967', '330501', '市辖区', '330500');INSERT INTO area VALUES ('968', '330502', '吴兴区', '330500');INSERT INTO area VALUES ('969', '330503', '南浔区', '330500');INSERT INTO area VALUES ('970', '330521', '德清县', '330500');INSERT INTO area VALUES ('971', '330522', '长兴县', '330500');INSERT INTO area VALUES ('972', '330523', '安吉县', '330500');INSERT INTO area VALUES ('973', '330601', '市辖区', '330600');INSERT INTO area VALUES ('974', '330602', '越城区', '330600');INSERT INTO area VALUES ('975', '330621', '绍兴县', '330600');INSERT INTO area VALUES ('976', '330624', '新昌县', '330600');INSERT INTO area VALUES ('977', '330681', '诸暨市', '330600');INSERT INTO area VALUES ('978', '330682', '上虞市', '330600');INSERT INTO area VALUES ('979', '330683', '嵊州市', '330600');INSERT INTO area VALUES ('980', '330701', '市辖区', '330700');INSERT INTO area VALUES ('981', '330702', '婺城区', '330700');INSERT INTO area VALUES ('982', '330703', '金东区', '330700');INSERT INTO area VALUES ('983', '330723', '武义县', '330700');INSERT INTO area VALUES ('984', '330726', '浦江县', '330700');INSERT INTO area VALUES ('985', '330727', '磐安县', '330700');INSERT INTO area VALUES ('986', '330781', '兰溪市', '330700');INSERT INTO area VALUES ('987', '330782', '义乌市', '330700');INSERT INTO area VALUES ('988', '330783', '东阳市', '330700');INSERT INTO area VALUES ('989', '330784', '永康市', '330700');INSERT INTO area VALUES ('990', '330801', '市辖区', '330800');INSERT INTO area VALUES ('991', '330802', '柯城区', '330800');INSERT INTO area VALUES ('992', '330803', '衢江区', '330800');INSERT INTO area VALUES ('993', '330822', '常山县', '330800');INSERT INTO area VALUES ('994', '330824', '开化县', '330800');INSERT INTO area VALUES ('995', '330825', '龙游县', '330800');INSERT INTO area VALUES ('996', '330881', '江山市', '330800');INSERT INTO area VALUES ('997', '330901', '市辖区', '330900');INSERT INTO area VALUES ('998', '330902', '定海区', '330900');INSERT INTO area VALUES ('999', '330903', '普陀区', '330900');INSERT INTO area VALUES ('1000', '330921', '岱山县', '330900');INSERT INTO area VALUES ('1001', '330922', '嵊泗县', '330900');INSERT INTO area VALUES ('1002', '331001', '市辖区', '331000');INSERT INTO area VALUES ('1003', '331002', '椒江区', '331000');INSERT INTO area VALUES ('1004', '331003', '黄岩区', '331000');INSERT INTO area VALUES ('1005', '331004', '路桥区', '331000');INSERT INTO area VALUES ('1006', '331021', '玉环县', '331000');INSERT INTO area VALUES ('1007', '331022', '三门县', '331000');INSERT INTO area VALUES ('1008', '331023', '天台县', '331000');INSERT INTO area VALUES ('1009', '331024', '仙居县', '331000');INSERT INTO area VALUES ('1010', '331081', '温岭市', '331000');INSERT INTO area VALUES ('1011', '331082', '临海市', '331000');INSERT INTO area VALUES ('1012', '331101', '市辖区', '331100');INSERT INTO area VALUES ('1013', '331102', '莲都区', '331100');INSERT INTO area VALUES ('1014', '331121', '青田县', '331100');INSERT INTO area VALUES ('1015', '331122', '缙云县', '331100');INSERT INTO area VALUES ('1016', '331123', '遂昌县', '331100');INSERT INTO area VALUES ('1017', '331124', '松阳县', '331100');INSERT INTO area VALUES ('1018', '331125', '云和县', '331100');INSERT INTO area VALUES ('1019', '331126', '庆元县', '331100');INSERT INTO area VALUES ('1020', '331127', '景宁畲族自治县', '331100');INSERT INTO area VALUES ('1021', '331181', '龙泉市', '331100');INSERT INTO area VALUES ('1022', '340101', '市辖区', '340100');INSERT INTO area VALUES ('1023', '340102', '瑶海区', '340100');INSERT INTO area VALUES ('1024', '340103', '庐阳区', '340100');INSERT INTO area VALUES ('1025', '340104', '蜀山区', '340100');INSERT INTO area VALUES ('1026', '340111', '包河区', '340100');INSERT INTO area VALUES ('1027', '340121', '长丰县', '340100');INSERT INTO area VALUES ('1028', '340122', '肥东县', '340100');INSERT INTO area VALUES ('1029', '340123', '肥西县', '340100');INSERT INTO area VALUES ('1030', '340201', '市辖区', '340200');INSERT INTO area VALUES ('1031', '340202', '镜湖区', '340200');INSERT INTO area VALUES ('1032', '340203', '马塘区', '340200');INSERT INTO area VALUES ('1033', '340204', '新芜区', '340200');INSERT INTO area VALUES ('1034', '340207', '鸠江区', '340200');INSERT INTO area VALUES ('1035', '340221', '芜湖县', '340200');INSERT INTO area VALUES ('1036', '340222', '繁昌县', '340200');INSERT INTO area VALUES ('1037', '340223', '南陵县', '340200');INSERT INTO area VALUES ('1038', '340301', '市辖区', '340300');INSERT INTO area VALUES ('1039', '340302', '龙子湖区', '340300');INSERT INTO area VALUES ('1040', '340303', '蚌山区', '340300');INSERT INTO area VALUES ('1041', '340304', '禹会区', '340300');INSERT INTO area VALUES ('1042', '340311', '淮上区', '340300');INSERT INTO area VALUES ('1043', '340321', '怀远县', '340300');INSERT INTO area VALUES ('1044', '340322', '五河县', '340300');INSERT INTO area VALUES ('1045', '340323', '固镇县', '340300');INSERT INTO area VALUES ('1046', '340401', '市辖区', '340400');INSERT INTO area VALUES ('1047', '340402', '大通区', '340400');INSERT INTO area VALUES ('1048', '340403', '田家庵区', '340400');INSERT INTO area VALUES ('1049', '340404', '谢家集区', '340400');INSERT INTO area VALUES ('1050', '340405', '八公山区', '340400');INSERT INTO area VALUES ('1051', '340406', '潘集区', '340400');INSERT INTO area VALUES ('1052', '340421', '凤台县', '340400');INSERT INTO area VALUES ('1053', '340501', '市辖区', '340500');INSERT INTO area VALUES ('1054', '340502', '金家庄区', '340500');INSERT INTO area VALUES ('1055', '340503', '花山区', '340500');INSERT INTO area VALUES ('1056', '340504', '雨山区', '340500');INSERT INTO area VALUES ('1057', '340521', '当涂县', '340500');INSERT INTO area VALUES ('1058', '340601', '市辖区', '340600');INSERT INTO area VALUES ('1059', '340602', '杜集区', '340600');INSERT INTO area VALUES ('1060', '340603', '相山区', '340600');INSERT INTO area VALUES ('1061', '340604', '烈山区', '340600');INSERT INTO area VALUES ('1062', '340621', '濉溪县', '340600');INSERT INTO area VALUES ('1063', '340701', '市辖区', '340700');INSERT INTO area VALUES ('1064', '340702', '铜官山区', '340700');INSERT INTO area VALUES ('1065', '340703', '狮子山区', '340700');INSERT INTO area VALUES ('1066', '340711', '郊 区', '340700');INSERT INTO area VALUES ('1067', '340721', '铜陵县', '340700');INSERT INTO area VALUES ('1068', '340801', '市辖区', '340800');INSERT INTO area VALUES ('1069', '340802', '迎江区', '340800');INSERT INTO area VALUES ('1070', '340803', '大观区', '340800');INSERT INTO area VALUES ('1071', '340811', '郊 区', '340800');INSERT INTO area VALUES ('1072', '340822', '怀宁县', '340800');INSERT INTO area VALUES ('1073', '340823', '枞阳县', '340800');INSERT INTO area VALUES ('1074', '340824', '潜山县', '340800');INSERT INTO area VALUES ('1075', '340825', '太湖县', '340800');INSERT INTO area VALUES ('1076', '340826', '宿松县', '340800');INSERT INTO area VALUES ('1077', '340827', '望江县', '340800');INSERT INTO area VALUES ('1078', '340828', '岳西县', '340800');INSERT INTO area VALUES ('1079', '340881', '桐城市', '340800');INSERT INTO area VALUES ('1080', '341001', '市辖区', '341000');INSERT INTO area VALUES ('1081', '341002', '屯溪区', '341000');INSERT INTO area VALUES ('1082', '341003', '黄山区', '341000');INSERT INTO area VALUES ('1083', '341004', '徽州区', '341000');INSERT INTO area VALUES ('1084', '341021', '歙 县', '341000');INSERT INTO area VALUES ('1085', '341022', '休宁县', '341000');INSERT INTO area VALUES ('1086', '341023', '黟 县', '341000');INSERT INTO area VALUES ('1087', '341024', '祁门县', '341000');INSERT INTO area VALUES ('1088', '341101', '市辖区', '341100');INSERT INTO area VALUES ('1089', '341102', '琅琊区', '341100');INSERT INTO area VALUES ('1090', '341103', '南谯区', '341100');INSERT INTO area VALUES ('1091', '341122', '来安县', '341100');INSERT INTO area VALUES ('1092', '341124', '全椒县', '341100');INSERT INTO area VALUES ('1093', '341125', '定远县', '341100');INSERT INTO area VALUES ('1094', '341126', '凤阳县', '341100');INSERT INTO area VALUES ('1095', '341181', '天长市', '341100');INSERT INTO area VALUES ('1096', '341182', '明光市', '341100');INSERT INTO area VALUES ('1097', '341201', '市辖区', '341200');INSERT INTO area VALUES ('1098', '341202', '颍州区', '341200');INSERT INTO area VALUES ('1099', '341203', '颍东区', '341200');INSERT INTO area VALUES ('1100', '341204', '颍泉区', '341200');INSERT INTO area VALUES ('1101', '341221', '临泉县', '341200');INSERT INTO area VALUES ('1102', '341222', '太和县', '341200');INSERT INTO area VALUES ('1103', '341225', '阜南县', '341200');INSERT INTO area VALUES ('1104', '341226', '颍上县', '341200');INSERT INTO area VALUES ('1105', '341282', '界首市', '341200');INSERT INTO area VALUES ('1106', '341301', '市辖区', '341300');INSERT INTO area VALUES ('1107', '341302', '墉桥区', '341300');INSERT INTO area VALUES ('1108', '341321', '砀山县', '341300');INSERT INTO area VALUES ('1109', '341322', '萧 县', '341300');INSERT INTO area VALUES ('1110', '341323', '灵璧县', '341300');INSERT INTO area VALUES ('1111', '341324', '泗 县', '341300');INSERT INTO area VALUES ('1112', '341401', '市辖区', '341400');INSERT INTO area VALUES ('1113', '341402', '居巢区', '341400');INSERT INTO area VALUES ('1114', '341421', '庐江县', '341400');INSERT INTO area VALUES ('1115', '341422', '无为县', '341400');INSERT INTO area VALUES ('1116', '341423', '含山县', '341400');INSERT INTO area VALUES ('1117', '341424', '和 县', '341400');INSERT INTO area VALUES ('1118', '341501', '市辖区', '341500');INSERT INTO area VALUES ('1119', '341502', '金安区', '341500');INSERT INTO area VALUES ('1120', '341503', '裕安区', '341500');INSERT INTO area VALUES ('1121', '341521', '寿 县', '341500');INSERT INTO area VALUES ('1122', '341522', '霍邱县', '341500');INSERT INTO area VALUES ('1123', '341523', '舒城县', '341500');INSERT INTO area VALUES ('1124', '341524', '金寨县', '341500');INSERT INTO area VALUES ('1125', '341525', '霍山县', '341500');INSERT INTO area VALUES ('1126', '341601', '市辖区', '341600');INSERT INTO area VALUES ('1127', '341602', '谯城区', '341600');INSERT INTO area VALUES ('1128', '341621', '涡阳县', '341600');INSERT INTO area VALUES ('1129', '341622', '蒙城县', '341600');INSERT INTO area VALUES ('1130', '341623', '利辛县', '341600');INSERT INTO area VALUES ('1131', '341701', '市辖区', '341700');INSERT INTO area VALUES ('1132', '341702', '贵池区', '341700');INSERT INTO area VALUES ('1133', '341721', '东至县', '341700');INSERT INTO area VALUES ('1134', '341722', '石台县', '341700');INSERT INTO area VALUES ('1135', '341723', '青阳县', '341700');INSERT INTO area VALUES ('1136', '341801', '市辖区', '341800');INSERT INTO area VALUES ('1137', '341802', '宣州区', '341800');INSERT INTO area VALUES ('1138', '341821', '郎溪县', '341800');INSERT INTO area VALUES ('1139', '341822', '广德县', '341800');INSERT INTO area VALUES ('1140', '341823', '泾 县', '341800');INSERT INTO area VALUES ('1141', '341824', '绩溪县', '341800');INSERT INTO area VALUES ('1142', '341825', '旌德县', '341800');INSERT INTO area VALUES ('1143', '341881', '宁国市', '341800');INSERT INTO area VALUES ('1144', '350101', '市辖区', '350100');INSERT INTO area VALUES ('1145', '350102', '鼓楼区', '350100');INSERT INTO area VALUES ('1146', '350103', '台江区', '350100');INSERT INTO area VALUES ('1147', '350104', '仓山区', '350100');INSERT INTO area VALUES ('1148', '350105', '马尾区', '350100');INSERT INTO area VALUES ('1149', '350111', '晋安区', '350100');INSERT INTO area VALUES ('1150', '350121', '闽侯县', '350100');INSERT INTO area VALUES ('1151', '350122', '连江县', '350100');INSERT INTO area VALUES ('1152', '350123', '罗源县', '350100');INSERT INTO area VALUES ('1153', '350124', '闽清县', '350100');INSERT INTO area VALUES ('1154', '350125', '永泰县', '350100');INSERT INTO area VALUES ('1155', '350128', '平潭县', '350100');INSERT INTO area VALUES ('1156', '350181', '福清市', '350100');INSERT INTO area VALUES ('1157', '350182', '长乐市', '350100');INSERT INTO area VALUES ('1158', '350201', '市辖区', '350200');INSERT INTO area VALUES ('1159', '350203', '思明区', '350200');INSERT INTO area VALUES ('1160', '350205', '海沧区', '350200');INSERT INTO area VALUES ('1161', '350206', '湖里区', '350200');INSERT INTO area VALUES ('1162', '350211', '集美区', '350200');INSERT INTO area VALUES ('1163', '350212', '同安区', '350200');INSERT INTO area VALUES ('1164', '350213', '翔安区', '350200');INSERT INTO area VALUES ('1165', '350301', '市辖区', '350300');INSERT INTO area VALUES ('1166', '350302', '城厢区', '350300');INSERT INTO area VALUES ('1167', '350303', '涵江区', '350300');INSERT INTO area VALUES ('1168', '350304', '荔城区', '350300');INSERT INTO area VALUES ('1169', '350305', '秀屿区', '350300');INSERT INTO area VALUES ('1170', '350322', '仙游县', '350300');INSERT INTO area VALUES ('1171', '350401', '市辖区', '350400');INSERT INTO area VALUES ('1172', '350402', '梅列区', '350400');INSERT INTO area VALUES ('1173', '350403', '三元区', '350400');INSERT INTO area VALUES ('1174', '350421', '明溪县', '350400');INSERT INTO area VALUES ('1175', '350423', '清流县', '350400');INSERT INTO area VALUES ('1176', '350424', '宁化县', '350400');INSERT INTO area VALUES ('1177', '350425', '大田县', '350400');INSERT INTO area VALUES ('1178', '350426', '尤溪县', '350400');INSERT INTO area VALUES ('1179', '350427', '沙 县', '350400');INSERT INTO area VALUES ('1180', '350428', '将乐县', '350400');INSERT INTO area VALUES ('1181', '350429', '泰宁县', '350400');INSERT INTO area VALUES ('1182', '350430', '建宁县', '350400');INSERT INTO area VALUES ('1183', '350481', '永安市', '350400');INSERT INTO area VALUES ('1184', '350501', '市辖区', '350500');INSERT INTO area VALUES ('1185', '350502', '鲤城区', '350500');INSERT INTO area VALUES ('1186', '350503', '丰泽区', '350500');INSERT INTO area VALUES ('1187', '350504', '洛江区', '350500');INSERT INTO area VALUES ('1188', '350505', '泉港区', '350500');INSERT INTO area VALUES ('1189', '350521', '惠安县', '350500');INSERT INTO area VALUES ('1190', '350524', '安溪县', '350500');INSERT INTO area VALUES ('1191', '350525', '永春县', '350500');INSERT INTO area VALUES ('1192', '350526', '德化县', '350500');INSERT INTO area VALUES ('1193', '350527', '金门县', '350500');INSERT INTO area VALUES ('1194', '350581', '石狮市', '350500');INSERT INTO area VALUES ('1195', '350582', '晋江市', '350500');INSERT INTO area VALUES ('1196', '350583', '南安市', '350500');INSERT INTO area VALUES ('1197', '350601', '市辖区', '350600');INSERT INTO area VALUES ('1198', '350602', '芗城区', '350600');INSERT INTO area VALUES ('1199', '350603', '龙文区', '350600');INSERT INTO area VALUES ('1200', '350622', '云霄县', '350600');INSERT INTO area VALUES ('1201', '350623', '漳浦县', '350600');INSERT INTO area VALUES ('1202', '350624', '诏安县', '350600');INSERT INTO area VALUES ('1203', '350625', '长泰县', '350600');INSERT INTO area VALUES ('1204', '350626', '东山县', '350600');INSERT INTO area VALUES ('1205', '350627', '南靖县', '350600');INSERT INTO area VALUES ('1206', '350628', '平和县', '350600');INSERT INTO area VALUES ('1207', '350629', '华安县', '350600');INSERT INTO area VALUES ('1208', '350681', '龙海市', '350600');INSERT INTO area VALUES ('1209', '350701', '市辖区', '350700');INSERT INTO area VALUES ('1210', '350702', '延平区', '350700');INSERT INTO area VALUES ('1211', '350721', '顺昌县', '350700');INSERT INTO area VALUES ('1212', '350722', '浦城县', '350700');INSERT INTO area VALUES ('1213', '350723', '光泽县', '350700');INSERT INTO area VALUES ('1214', '350724', '松溪县', '350700');INSERT INTO area VALUES ('1215', '350725', '政和县', '350700');INSERT INTO area VALUES ('1216', '350781', '邵武市', '350700');INSERT INTO area VALUES ('1217', '350782', '武夷山市', '350700');INSERT INTO area VALUES ('1218', '350783', '建瓯市', '350700');INSERT INTO area VALUES ('1219', '350784', '建阳市', '350700');INSERT INTO area VALUES ('1220', '350801', '市辖区', '350800');INSERT INTO area VALUES ('1221', '350802', '新罗区', '350800');INSERT INTO area VALUES ('1222', '350821', '长汀县', '350800');INSERT INTO area VALUES ('1223', '350822', '永定县', '350800');INSERT INTO area VALUES ('1224', '350823', '上杭县', '350800');INSERT INTO area VALUES ('1225', '350824', '武平县', '350800');INSERT INTO area VALUES ('1226', '350825', '连城县', '350800');INSERT INTO area VALUES ('1227', '350881', '漳平市', '350800');INSERT INTO area VALUES ('1228', '350901', '市辖区', '350900');INSERT INTO area VALUES ('1229', '350902', '蕉城区', '350900');INSERT INTO area VALUES ('1230', '350921', '霞浦县', '350900');INSERT INTO area VALUES ('1231', '350922', '古田县', '350900');INSERT INTO area VALUES ('1232', '350923', '屏南县', '350900');INSERT INTO area VALUES ('1233', '350924', '寿宁县', '350900');INSERT INTO area VALUES ('1234', '350925', '周宁县', '350900');INSERT INTO area VALUES ('1235', '350926', '柘荣县', '350900');INSERT INTO area VALUES ('1236', '350981', '福安市', '350900');INSERT INTO area VALUES ('1237', '350982', '福鼎市', '350900');INSERT INTO area VALUES ('1238', '360101', '市辖区', '360100');INSERT INTO area VALUES ('1239', '360102', '东湖区', '360100');INSERT INTO area VALUES ('1240', '360103', '西湖区', '360100');INSERT INTO area VALUES ('1241', '360104', '青云谱区', '360100');INSERT INTO area VALUES ('1242', '360105', '湾里区', '360100');INSERT INTO area VALUES ('1243', '360111', '青山湖区', '360100');INSERT INTO area VALUES ('1244', '360121', '南昌县', '360100');INSERT INTO area VALUES ('1245', '360122', '新建县', '360100');INSERT INTO area VALUES ('1246', '360123', '安义县', '360100');INSERT INTO area VALUES ('1247', '360124', '进贤县', '360100');INSERT INTO area VALUES ('1248', '360201', '市辖区', '360200');INSERT INTO area VALUES ('1249', '360202', '昌江区', '360200');INSERT INTO area VALUES ('1250', '360203', '珠山区', '360200');INSERT INTO area VALUES ('1251', '360222', '浮梁县', '360200');INSERT INTO area VALUES ('1252', '360281', '乐平市', '360200');INSERT INTO area VALUES ('1253', '360301', '市辖区', '360300');INSERT INTO area VALUES ('1254', '360302', '安源区', '360300');INSERT INTO area VALUES ('1255', '360313', '湘东区', '360300');INSERT INTO area VALUES ('1256', '360321', '莲花县', '360300');INSERT INTO area VALUES ('1257', '360322', '上栗县', '360300');INSERT INTO area VALUES ('1258', '360323', '芦溪县', '360300');INSERT INTO area VALUES ('1259', '360401', '市辖区', '360400');INSERT INTO area VALUES ('1260', '360402', '庐山区', '360400');INSERT INTO area VALUES ('1261', '360403', '浔阳区', '360400');INSERT INTO area VALUES ('1262', '360421', '九江县', '360400');INSERT INTO area VALUES ('1263', '360423', '武宁县', '360400');INSERT INTO area VALUES ('1264', '360424', '修水县', '360400');INSERT INTO area VALUES ('1265', '360425', '永修县', '360400');INSERT INTO area VALUES ('1266', '360426', '德安县', '360400');INSERT INTO area VALUES ('1267', '360427', '星子县', '360400');INSERT INTO area VALUES ('1268', '360428', '都昌县', '360400');INSERT INTO area VALUES ('1269', '360429', '湖口县', '360400');INSERT INTO area VALUES ('1270', '360430', '彭泽县', '360400');INSERT INTO area VALUES ('1271', '360481', '瑞昌市', '360400');INSERT INTO area VALUES ('1272', '360501', '市辖区', '360500');INSERT INTO area VALUES ('1273', '360502', '渝水区', '360500');INSERT INTO area VALUES ('1274', '360521', '分宜县', '360500');INSERT INTO area VALUES ('1275', '360601', '市辖区', '360600');INSERT INTO area VALUES ('1276', '360602', '月湖区', '360600');INSERT INTO area VALUES ('1277', '360622', '余江县', '360600');INSERT INTO area VALUES ('1278', '360681', '贵溪市', '360600');INSERT INTO area VALUES ('1279', '360701', '市辖区', '360700');INSERT INTO area VALUES ('1280', '360702', '章贡区', '360700');INSERT INTO area VALUES ('1281', '360721', '赣 县', '360700');INSERT INTO area VALUES ('1282', '360722', '信丰县', '360700');INSERT INTO area VALUES ('1283', '360723', '大余县', '360700');INSERT INTO area VALUES ('1284', '360724', '上犹县', '360700');INSERT INTO area VALUES ('1285', '360725', '崇义县', '360700');INSERT INTO area VALUES ('1286', '360726', '安远县', '360700');INSERT INTO area VALUES ('1287', '360727', '龙南县', '360700');INSERT INTO area VALUES ('1288', '360728', '定南县', '360700');INSERT INTO area VALUES ('1289', '360729', '全南县', '360700');INSERT INTO area VALUES ('1290', '360730', '宁都县', '360700');INSERT INTO area VALUES ('1291', '360731', '于都县', '360700');INSERT INTO area VALUES ('1292', '360732', '兴国县', '360700');INSERT INTO area VALUES ('1293', '360733', '会昌县', '360700');INSERT INTO area VALUES ('1294', '360734', '寻乌县', '360700');INSERT INTO area VALUES ('1295', '360735', '石城县', '360700');INSERT INTO area VALUES ('1296', '360781', '瑞金市', '360700');INSERT INTO area VALUES ('1297', '360782', '南康市', '360700');INSERT INTO area VALUES ('1298', '360801', '市辖区', '360800');INSERT INTO area VALUES ('1299', '360802', '吉州区', '360800');INSERT INTO area VALUES ('1300', '360803', '青原区', '360800');INSERT INTO area VALUES ('1301', '360821', '吉安县', '360800');INSERT INTO area VALUES ('1302', '360822', '吉水县', '360800');INSERT INTO area VALUES ('1303', '360823', '峡江县', '360800');INSERT INTO area VALUES ('1304', '360824', '新干县', '360800');INSERT INTO area VALUES ('1305', '360825', '永丰县', '360800');INSERT INTO area VALUES ('1306', '360826', '泰和县', '360800');INSERT INTO area VALUES ('1307', '360827', '遂川县', '360800');INSERT INTO area VALUES ('1308', '360828', '万安县', '360800');INSERT INTO area VALUES ('1309', '360829', '安福县', '360800');INSERT INTO area VALUES ('1310', '360830', '永新县', '360800');INSERT INTO area VALUES ('1311', '360881', '井冈山市', '360800');INSERT INTO area VALUES ('1312', '360901', '市辖区', '360900');INSERT INTO area VALUES ('1313', '360902', '袁州区', '360900');INSERT INTO area VALUES ('1314', '360921', '奉新县', '360900');INSERT INTO area VALUES ('1315', '360922', '万载县', '360900');INSERT INTO area VALUES ('1316', '360923', '上高县', '360900');INSERT INTO area VALUES ('1317', '360924', '宜丰县', '360900');INSERT INTO area VALUES ('1318', '360925', '靖安县', '360900');INSERT INTO area VALUES ('1319', '360926', '铜鼓县', '360900');INSERT INTO area VALUES ('1320', '360981', '丰城市', '360900');INSERT INTO area VALUES ('1321', '360982', '樟树市', '360900');INSERT INTO area VALUES ('1322', '360983', '高安市', '360900');INSERT INTO area VALUES ('1323', '361001', '市辖区', '361000');INSERT INTO area VALUES ('1324', '361002', '临川区', '361000');INSERT INTO area VALUES ('1325', '361021', '南城县', '361000');INSERT INTO area VALUES ('1326', '361022', '黎川县', '361000');INSERT INTO area VALUES ('1327', '361023', '南丰县', '361000');INSERT INTO area VALUES ('1328', '361024', '崇仁县', '361000');INSERT INTO area VALUES ('1329', '361025', '乐安县', '361000');INSERT INTO area VALUES ('1330', '361026', '宜黄县', '361000');INSERT INTO area VALUES ('1331', '361027', '金溪县', '361000');INSERT INTO area VALUES ('1332', '361028', '资溪县', '361000');INSERT INTO area VALUES ('1333', '361029', '东乡县', '361000');INSERT INTO area VALUES ('1334', '361030', '广昌县', '361000');INSERT INTO area VALUES ('1335', '361101', '市辖区', '361100');INSERT INTO area VALUES ('1336', '361102', '信州区', '361100');INSERT INTO area VALUES ('1337', '361121', '上饶县', '361100');INSERT INTO area VALUES ('1338', '361122', '广丰县', '361100');INSERT INTO area VALUES ('1339', '361123', '玉山县', '361100');INSERT INTO area VALUES ('1340', '361124', '铅山县', '361100');INSERT INTO area VALUES ('1341', '361125', '横峰县', '361100');INSERT INTO area VALUES ('1342', '361126', '弋阳县', '361100');INSERT INTO area VALUES ('1343', '361127', '余干县', '361100');INSERT INTO area VALUES ('1344', '361128', '鄱阳县', '361100');INSERT INTO area VALUES ('1345', '361129', '万年县', '361100');INSERT INTO area VALUES ('1346', '361130', '婺源县', '361100');INSERT INTO area VALUES ('1347', '361181', '德兴市', '361100');INSERT INTO area VALUES ('1348', '370101', '市辖区', '370100');INSERT INTO area VALUES ('1349', '370102', '历下区', '370100');INSERT INTO area VALUES ('1350', '370103', '市中区', '370100');INSERT INTO area VALUES ('1351', '370104', '槐荫区', '370100');INSERT INTO area VALUES ('1352', '370105', '天桥区', '370100');INSERT INTO area VALUES ('1353', '370112', '历城区', '370100');INSERT INTO area VALUES ('1354', '370113', '长清区', '370100');INSERT INTO area VALUES ('1355', '370124', '平阴县', '370100');INSERT INTO area VALUES ('1356', '370125', '济阳县', '370100');INSERT INTO area VALUES ('1357', '370126', '商河县', '370100');INSERT INTO area VALUES ('1358', '370181', '章丘市', '370100');INSERT INTO area VALUES ('1359', '370201', '市辖区', '370200');INSERT INTO area VALUES ('1360', '370202', '市南区', '370200');INSERT INTO area VALUES ('1361', '370203', '市北区', '370200');INSERT INTO area VALUES ('1362', '370205', '四方区', '370200');INSERT INTO area VALUES ('1363', '370211', '黄岛区', '370200');INSERT INTO area VALUES ('1364', '370212', '崂山区', '370200');INSERT INTO area VALUES ('1365', '370213', '李沧区', '370200');INSERT INTO area VALUES ('1366', '370214', '城阳区', '370200');INSERT INTO area VALUES ('1367', '370281', '胶州市', '370200');INSERT INTO area VALUES ('1368', '370282', '即墨市', '370200');INSERT INTO area VALUES ('1369', '370283', '平度市', '370200');INSERT INTO area VALUES ('1370', '370284', '胶南市', '370200');INSERT INTO area VALUES ('1371', '370285', '莱西市', '370200');INSERT INTO area VALUES ('1372', '370301', '市辖区', '370300');INSERT INTO area VALUES ('1373', '370302', '淄川区', '370300');INSERT INTO area VALUES ('1374', '370303', '张店区', '370300');INSERT INTO area VALUES ('1375', '370304', '博山区', '370300');INSERT INTO area VALUES ('1376', '370305', '临淄区', '370300');INSERT INTO area VALUES ('1377', '370306', '周村区', '370300');INSERT INTO area VALUES ('1378', '370321', '桓台县', '370300');INSERT INTO area VALUES ('1379', '370322', '高青县', '370300');INSERT INTO area VALUES ('1380', '370323', '沂源县', '370300');INSERT INTO area VALUES ('1381', '370401', '市辖区', '370400');INSERT INTO area VALUES ('1382', '370402', '市中区', '370400');INSERT INTO area VALUES ('1383', '370403', '薛城区', '370400');INSERT INTO area VALUES ('1384', '370404', '峄城区', '370400');INSERT INTO area VALUES ('1385', '370405', '台儿庄区', '370400');INSERT INTO area VALUES ('1386', '370406', '山亭区', '370400');INSERT INTO area VALUES ('1387', '370481', '滕州市', '370400');INSERT INTO area VALUES ('1388', '370501', '市辖区', '370500');INSERT INTO area VALUES ('1389', '370502', '东营区', '370500');INSERT INTO area VALUES ('1390', '370503', '河口区', '370500');INSERT INTO area VALUES ('1391', '370521', '垦利县', '370500');INSERT INTO area VALUES ('1392', '370522', '利津县', '370500');INSERT INTO area VALUES ('1393', '370523', '广饶县', '370500');INSERT INTO area VALUES ('1394', '370601', '市辖区', '370600');INSERT INTO area VALUES ('1395', '370602', '芝罘区', '370600');INSERT INTO area VALUES ('1396', '370611', '福山区', '370600');INSERT INTO area VALUES ('1397', '370612', '牟平区', '370600');INSERT INTO area VALUES ('1398', '370613', '莱山区', '370600');INSERT INTO area VALUES ('1399', '370634', '长岛县', '370600');INSERT INTO area VALUES ('1400', '370681', '龙口市', '370600');INSERT INTO area VALUES ('1401', '370682', '莱阳市', '370600');INSERT INTO area VALUES ('1402', '370683', '莱州市', '370600');INSERT INTO area VALUES ('1403', '370684', '蓬莱市', '370600');INSERT INTO area VALUES ('1404', '370685', '招远市', '370600');INSERT INTO area VALUES ('1405', '370686', '栖霞市', '370600');INSERT INTO area VALUES ('1406', '370687', '海阳市', '370600');INSERT INTO area VALUES ('1407', '370701', '市辖区', '370700');INSERT INTO area VALUES ('1408', '370702', '潍城区', '370700');INSERT INTO area VALUES ('1409', '370703', '寒亭区', '370700');INSERT INTO area VALUES ('1410', '370704', '坊子区', '370700');INSERT INTO area VALUES ('1411', '370705', '奎文区', '370700');INSERT INTO area VALUES ('1412', '370724', '临朐县', '370700');INSERT INTO area VALUES ('1413', '370725', '昌乐县', '370700');INSERT INTO area VALUES ('1414', '370781', '青州市', '370700');INSERT INTO area VALUES ('1415', '370782', '诸城市', '370700');INSERT INTO area VALUES ('1416', '370783', '寿光市', '370700');INSERT INTO area VALUES ('1417', '370784', '安丘市', '370700');INSERT INTO area VALUES ('1418', '370785', '高密市', '370700');INSERT INTO area VALUES ('1419', '370786', '昌邑市', '370700');INSERT INTO area VALUES ('1420', '370801', '市辖区', '370800');INSERT INTO area VALUES ('1421', '370802', '市中区', '370800');INSERT INTO area VALUES ('1422', '370811', '任城区', '370800');INSERT INTO area VALUES ('1423', '370826', '微山县', '370800');INSERT INTO area VALUES ('1424', '370827', '鱼台县', '370800');INSERT INTO area VALUES ('1425', '370828', '金乡县', '370800');INSERT INTO area VALUES ('1426', '370829', '嘉祥县', '370800');INSERT INTO area VALUES ('1427', '370830', '汶上县', '370800');INSERT INTO area VALUES ('1428', '370831', '泗水县', '370800');INSERT INTO area VALUES ('1429', '370832', '梁山县', '370800');INSERT INTO area VALUES ('1430', '370881', '曲阜市', '370800');INSERT INTO area VALUES ('1431', '370882', '兖州市', '370800');INSERT INTO area VALUES ('1432', '370883', '邹城市', '370800');INSERT INTO area VALUES ('1433', '370901', '市辖区', '370900');INSERT INTO area VALUES ('1434', '370902', '泰山区', '370900');INSERT INTO area VALUES ('1435', '370903', '岱岳区', '370900');INSERT INTO area VALUES ('1436', '370921', '宁阳县', '370900');INSERT INTO area VALUES ('1437', '370923', '东平县', '370900');INSERT INTO area VALUES ('1438', '370982', '新泰市', '370900');INSERT INTO area VALUES ('1439', '370983', '肥城市', '370900');INSERT INTO area VALUES ('1440', '371001', '市辖区', '371000');INSERT INTO area VALUES ('1441', '371002', '环翠区', '371000');INSERT INTO area VALUES ('1442', '371081', '文登市', '371000');INSERT INTO area VALUES ('1443', '371082', '荣成市', '371000');INSERT INTO area VALUES ('1444', '371083', '乳山市', '371000');INSERT INTO area VALUES ('1445', '371101', '市辖区', '371100');INSERT INTO area VALUES ('1446', '371102', '东港区', '371100');INSERT INTO area VALUES ('1447', '371103', '岚山区', '371100');INSERT INTO area VALUES ('1448', '371121', '五莲县', '371100');INSERT INTO area VALUES ('1449', '371122', '莒 县', '371100');INSERT INTO area VALUES ('1450', '371201', '市辖区', '371200');INSERT INTO area VALUES ('1451', '371202', '莱城区', '371200');INSERT INTO area VALUES ('1452', '371203', '钢城区', '371200');INSERT INTO area VALUES ('1453', '371301', '市辖区', '371300');INSERT INTO area VALUES ('1454', '371302', '兰山区', '371300');INSERT INTO area VALUES ('1455', '371311', '罗庄区', '371300');INSERT INTO area VALUES ('1456', '371312', '河东区', '371300');INSERT INTO area VALUES ('1457', '371321', '沂南县', '371300');INSERT INTO area VALUES ('1458', '371322', '郯城县', '371300');INSERT INTO area VALUES ('1459', '371323', '沂水县', '371300');INSERT INTO area VALUES ('1460', '371324', '苍山县', '371300');INSERT INTO area VALUES ('1461', '371325', '费 县', '371300');INSERT INTO area VALUES ('1462', '371326', '平邑县', '371300');INSERT INTO area VALUES ('1463', '371327', '莒南县', '371300');INSERT INTO area VALUES ('1464', '371328', '蒙阴县', '371300');INSERT INTO area VALUES ('1465', '371329', '临沭县', '371300');INSERT INTO area VALUES ('1466', '371401', '市辖区', '371400');INSERT INTO area VALUES ('1467', '371402', '德城区', '371400');INSERT INTO area VALUES ('1468', '371421', '陵 县', '371400');INSERT INTO area VALUES ('1469', '371422', '宁津县', '371400');INSERT INTO area VALUES ('1470', '371423', '庆云县', '371400');INSERT INTO area VALUES ('1471', '371424', '临邑县', '371400');INSERT INTO area VALUES ('1472', '371425', '齐河县', '371400');INSERT INTO area VALUES ('1473', '371426', '平原县', '371400');INSERT INTO area VALUES ('1474', '371427', '夏津县', '371400');INSERT INTO area VALUES ('1475', '371428', '武城县', '371400');INSERT INTO area VALUES ('1476', '371481', '乐陵市', '371400');INSERT INTO area VALUES ('1477', '371482', '禹城市', '371400');INSERT INTO area VALUES ('1478', '371501', '市辖区', '371500');INSERT INTO area VALUES ('1479', '371502', '东昌府区', '371500');INSERT INTO area VALUES ('1480', '371521', '阳谷县', '371500');INSERT INTO area VALUES ('1481', '371522', '莘 县', '371500');INSERT INTO area VALUES ('1482', '371523', '茌平县', '371500');INSERT INTO area VALUES ('1483', '371524', '东阿县', '371500');INSERT INTO area VALUES ('1484', '371525', '冠 县', '371500');INSERT INTO area VALUES ('1485', '371526', '高唐县', '371500');INSERT INTO area VALUES ('1486', '371581', '临清市', '371500');INSERT INTO area VALUES ('1487', '371601', '市辖区', '371600');INSERT INTO area VALUES ('1488', '371602', '滨城区', '371600');INSERT INTO area VALUES ('1489', '371621', '惠民县', '371600');INSERT INTO area VALUES ('1490', '371622', '阳信县', '371600');INSERT INTO area VALUES ('1491', '371623', '无棣县', '371600');INSERT INTO area VALUES ('1492', '371624', '沾化县', '371600');INSERT INTO area VALUES ('1493', '371625', '博兴县', '371600');INSERT INTO area VALUES ('1494', '371626', '邹平县', '371600');INSERT INTO area VALUES ('1495', '371701', '市辖区', '371700');INSERT INTO area VALUES ('1496', '371702', '牡丹区', '371700');INSERT INTO area VALUES ('1497', '371721', '曹 县', '371700');INSERT INTO area VALUES ('1498', '371722', '单 县', '371700');INSERT INTO area VALUES ('1499', '371723', '成武县', '371700');INSERT INTO area VALUES ('1500', '371724', '巨野县', '371700');INSERT INTO area VALUES ('1501', '371725', '郓城县', '371700');INSERT INTO area VALUES ('1502', '371726', '鄄城县', '371700');INSERT INTO area VALUES ('1503', '371727', '定陶县', '371700');INSERT INTO area VALUES ('1504', '371728', '东明县', '371700');INSERT INTO area VALUES ('1505', '410101', '市辖区', '410100');INSERT INTO area VALUES ('1506', '410102', '中原区', '410100');INSERT INTO area VALUES ('1507', '410103', '二七区', '410100');INSERT INTO area VALUES ('1508', '410104', '管城回族区', '410100');INSERT INTO area VALUES ('1509', '410105', '金水区', '410100');INSERT INTO area VALUES ('1510', '410106', '上街区', '410100');INSERT INTO area VALUES ('1511', '410108', '邙山区', '410100');INSERT INTO area VALUES ('1512', '410122', '中牟县', '410100');INSERT INTO area VALUES ('1513', '410181', '巩义市', '410100');INSERT INTO area VALUES ('1514', '410182', '荥阳市', '410100');INSERT INTO area VALUES ('1515', '410183', '新密市', '410100');INSERT INTO area VALUES ('1516', '410184', '新郑市', '410100');INSERT INTO area VALUES ('1517', '410185', '登封市', '410100');INSERT INTO area VALUES ('1518', '410201', '市辖区', '410200');INSERT INTO area VALUES ('1519', '410202', '龙亭区', '410200');INSERT INTO area VALUES ('1520', '410203', '顺河回族区', '410200');INSERT INTO area VALUES ('1521', '410204', '鼓楼区', '410200');INSERT INTO area VALUES ('1522', '410205', '南关区', '410200');INSERT INTO area VALUES ('1523', '410211', '郊 区', '410200');INSERT INTO area VALUES ('1524', '410221', '杞 县', '410200');INSERT INTO area VALUES ('1525', '410222', '通许县', '410200');INSERT INTO area VALUES ('1526', '410223', '尉氏县', '410200');INSERT INTO area VALUES ('1527', '410224', '开封县', '410200');INSERT INTO area VALUES ('1528', '410225', '兰考县', '410200');INSERT INTO area VALUES ('1529', '410301', '市辖区', '410300');INSERT INTO area VALUES ('1530', '410302', '老城区', '410300');INSERT INTO area VALUES ('1531', '410303', '西工区', '410300');INSERT INTO area VALUES ('1532', '410304', '廛河回族区', '410300');INSERT INTO area VALUES ('1533', '410305', '涧西区', '410300');INSERT INTO area VALUES ('1534', '410306', '吉利区', '410300');INSERT INTO area VALUES ('1535', '410307', '洛龙区', '410300');INSERT INTO area VALUES ('1536', '410322', '孟津县', '410300');INSERT INTO area VALUES ('1537', '410323', '新安县', '410300');INSERT INTO area VALUES ('1538', '410324', '栾川县', '410300');INSERT INTO area VALUES ('1539', '410325', '嵩 县', '410300');INSERT INTO area VALUES ('1540', '410326', '汝阳县', '410300');INSERT INTO area VALUES ('1541', '410327', '宜阳县', '410300');INSERT INTO area VALUES ('1542', '410328', '洛宁县', '410300');INSERT INTO area VALUES ('1543', '410329', '伊川县', '410300');INSERT INTO area VALUES ('1544', '410381', '偃师市', '410300');INSERT INTO area VALUES ('1545', '410401', '市辖区', '410400');INSERT INTO area VALUES ('1546', '410402', '新华区', '410400');INSERT INTO area VALUES ('1547', '410403', '卫东区', '410400');INSERT INTO area VALUES ('1548', '410404', '石龙区', '410400');INSERT INTO area VALUES ('1549', '410411', '湛河区', '410400');INSERT INTO area VALUES ('1550', '410421', '宝丰县', '410400');INSERT INTO area VALUES ('1551', '410422', '叶 县', '410400');INSERT INTO area VALUES ('1552', '410423', '鲁山县', '410400');INSERT INTO area VALUES ('1553', '410425', '郏 县', '410400');INSERT INTO area VALUES ('1554', '410481', '舞钢市', '410400');INSERT INTO area VALUES ('1555', '410482', '汝州市', '410400');INSERT INTO area VALUES ('1556', '410501', '市辖区', '410500');INSERT INTO area VALUES ('1557', '410502', '文峰区', '410500');INSERT INTO area VALUES ('1558', '410503', '北关区', '410500');INSERT INTO area VALUES ('1559', '410505', '殷都区', '410500');INSERT INTO area VALUES ('1560', '410506', '龙安区', '410500');INSERT INTO area VALUES ('1561', '410522', '安阳县', '410500');INSERT INTO area VALUES ('1562', '410523', '汤阴县', '410500');INSERT INTO area VALUES ('1563', '410526', '滑 县', '410500');INSERT INTO area VALUES ('1564', '410527', '内黄县', '410500');INSERT INTO area VALUES ('1565', '410581', '林州市', '410500');INSERT INTO area VALUES ('1566', '410601', '市辖区', '410600');INSERT INTO area VALUES ('1567', '410602', '鹤山区', '410600');INSERT INTO area VALUES ('1568', '410603', '山城区', '410600');INSERT INTO area VALUES ('1569', '410611', '淇滨区', '410600');INSERT INTO area VALUES ('1570', '410621', '浚 县', '410600');INSERT INTO area VALUES ('1571', '410622', '淇 县', '410600');INSERT INTO area VALUES ('1572', '410701', '市辖区', '410700');INSERT INTO area VALUES ('1573', '410702', '红旗区', '410700');INSERT INTO area VALUES ('1574', '410703', '卫滨区', '410700');INSERT INTO area VALUES ('1575', '410704', '凤泉区', '410700');INSERT INTO area VALUES ('1576', '410711', '牧野区', '410700');INSERT INTO area VALUES ('1577', '410721', '新乡县', '410700');INSERT INTO area VALUES ('1578', '410724', '获嘉县', '410700');INSERT INTO area VALUES ('1579', '410725', '原阳县', '410700');INSERT INTO area VALUES ('1580', '410726', '延津县', '410700');INSERT INTO area VALUES ('1581', '410727', '封丘县', '410700');INSERT INTO area VALUES ('1582', '410728', '长垣县', '410700');INSERT INTO area VALUES ('1583', '410781', '卫辉市', '410700');INSERT INTO area VALUES ('1584', '410782', '辉县市', '410700');INSERT INTO area VALUES ('1585', '410801', '市辖区', '410800');INSERT INTO area VALUES ('1586', '410802', '解放区', '410800');INSERT INTO area VALUES ('1587', '410803', '中站区', '410800');INSERT INTO area VALUES ('1588', '410804', '马村区', '410800');INSERT INTO area VALUES ('1589', '410811', '山阳区', '410800');INSERT INTO area VALUES ('1590', '410821', '修武县', '410800');INSERT INTO area VALUES ('1591', '410822', '博爱县', '410800');INSERT INTO area VALUES ('1592', '410823', '武陟县', '410800');INSERT INTO area VALUES ('1593', '410825', '温 县', '410800');INSERT INTO area VALUES ('1594', '410881', '济源市', '410800');INSERT INTO area VALUES ('1595', '410882', '沁阳市', '410800');INSERT INTO area VALUES ('1596', '410883', '孟州市', '410800');INSERT INTO area VALUES ('1597', '410901', '市辖区', '410900');INSERT INTO area VALUES ('1598', '410902', '华龙区', '410900');INSERT INTO area VALUES ('1599', '410922', '清丰县', '410900');INSERT INTO area VALUES ('1600', '410923', '南乐县', '410900');INSERT INTO area VALUES ('1601', '410926', '范 县', '410900');INSERT INTO area VALUES ('1602', '410927', '台前县', '410900');INSERT INTO area VALUES ('1603', '410928', '濮阳县', '410900');INSERT INTO area VALUES ('1604', '411001', '市辖区', '411000');INSERT INTO area VALUES ('1605', '411002', '魏都区', '411000');INSERT INTO area VALUES ('1606', '411023', '许昌县', '411000');INSERT INTO area VALUES ('1607', '411024', '鄢陵县', '411000');INSERT INTO area VALUES ('1608', '411025', '襄城县', '411000');INSERT INTO area VALUES ('1609', '411081', '禹州市', '411000');INSERT INTO area VALUES ('1610', '411082', '长葛市', '411000');INSERT INTO area VALUES ('1611', '411101', '市辖区', '411100');INSERT INTO area VALUES ('1612', '411102', '源汇区', '411100');INSERT INTO area VALUES ('1613', '411103', '郾城区', '411100');INSERT INTO area VALUES ('1614', '411104', '召陵区', '411100');INSERT INTO area VALUES ('1615', '411121', '舞阳县', '411100');INSERT INTO area VALUES ('1616', '411122', '临颍县', '411100');INSERT INTO area VALUES ('1617', '411201', '市辖区', '411200');INSERT INTO area VALUES ('1618', '411202', '湖滨区', '411200');INSERT INTO area VALUES ('1619', '411221', '渑池县', '411200');INSERT INTO area VALUES ('1620', '411222', '陕 县', '411200');INSERT INTO area VALUES ('1621', '411224', '卢氏县', '411200');INSERT INTO area VALUES ('1622', '411281', '义马市', '411200');INSERT INTO area VALUES ('1623', '411282', '灵宝市', '411200');INSERT INTO area VALUES ('1624', '411301', '市辖区', '411300');INSERT INTO area VALUES ('1625', '411302', '宛城区', '411300');INSERT INTO area VALUES ('1626', '411303', '卧龙区', '411300');INSERT INTO area VALUES ('1627', '411321', '南召县', '411300');INSERT INTO area VALUES ('1628', '411322', '方城县', '411300');INSERT INTO area VALUES ('1629', '411323', '西峡县', '411300');INSERT INTO area VALUES ('1630', '411324', '镇平县', '411300');INSERT INTO area VALUES ('1631', '411325', '内乡县', '411300');INSERT INTO area VALUES ('1632', '411326', '淅川县', '411300');INSERT INTO area VALUES ('1633', '411327', '社旗县', '411300');INSERT INTO area VALUES ('1634', '411328', '唐河县', '411300');INSERT INTO area VALUES ('1635', '411329', '新野县', '411300');INSERT INTO area VALUES ('1636', '411330', '桐柏县', '411300');INSERT INTO area VALUES ('1637', '411381', '邓州市', '411300');INSERT INTO area VALUES ('1638', '411401', '市辖区', '411400');INSERT INTO area VALUES ('1639', '411402', '梁园区', '411400');INSERT INTO area VALUES ('1640', '411403', '睢阳区', '411400');INSERT INTO area VALUES ('1641', '411421', '民权县', '411400');INSERT INTO area VALUES ('1642', '411422', '睢 县', '411400');INSERT INTO area VALUES ('1643', '411423', '宁陵县', '411400');INSERT INTO area VALUES ('1644', '411424', '柘城县', '411400');INSERT INTO area VALUES ('1645', '411425', '虞城县', '411400');INSERT INTO area VALUES ('1646', '411426', '夏邑县', '411400');INSERT INTO area VALUES ('1647', '411481', '永城市', '411400');INSERT INTO area VALUES ('1648', '411501', '市辖区', '411500');INSERT INTO area VALUES ('1649', '411502', '师河区', '411500');INSERT INTO area VALUES ('1650', '411503', '平桥区', '411500');INSERT INTO area VALUES ('1651', '411521', '罗山县', '411500');INSERT INTO area VALUES ('1652', '411522', '光山县', '411500');INSERT INTO area VALUES ('1653', '411523', '新 县', '411500');INSERT INTO area VALUES ('1654', '411524', '商城县', '411500');INSERT INTO area VALUES ('1655', '411525', '固始县', '411500');INSERT INTO area VALUES ('1656', '411526', '潢川县', '411500');INSERT INTO area VALUES ('1657', '411527', '淮滨县', '411500');INSERT INTO area VALUES ('1658', '411528', '息 县', '411500');INSERT INTO area VALUES ('1659', '411601', '市辖区', '411600');INSERT INTO area VALUES ('1660', '411602', '川汇区', '411600');INSERT INTO area VALUES ('1661', '411621', '扶沟县', '411600');INSERT INTO area VALUES ('1662', '411622', '西华县', '411600');INSERT INTO area VALUES ('1663', '411623', '商水县', '411600');INSERT INTO area VALUES ('1664', '411624', '沈丘县', '411600');INSERT INTO area VALUES ('1665', '411625', '郸城县', '411600');INSERT INTO area VALUES ('1666', '411626', '淮阳县', '411600');INSERT INTO area VALUES ('1667', '411627', '太康县', '411600');INSERT INTO area VALUES ('1668', '411628', '鹿邑县', '411600');INSERT INTO area VALUES ('1669', '411681', '项城市', '411600');INSERT INTO area VALUES ('1670', '411701', '市辖区', '411700');INSERT INTO area VALUES ('1671', '411702', '驿城区', '411700');INSERT INTO area VALUES ('1672', '411721', '西平县', '411700');INSERT INTO area VALUES ('1673', '411722', '上蔡县', '411700');INSERT INTO area VALUES ('1674', '411723', '平舆县', '411700');INSERT INTO area VALUES ('1675', '411724', '正阳县', '411700');INSERT INTO area VALUES ('1676', '411725', '确山县', '411700');INSERT INTO area VALUES ('1677', '411726', '泌阳县', '411700');INSERT INTO area VALUES ('1678', '411727', '汝南县', '411700');INSERT INTO area VALUES ('1679', '411728', '遂平县', '411700');INSERT INTO area VALUES ('1680', '411729', '新蔡县', '411700');INSERT INTO area VALUES ('1681', '420101', '市辖区', '420100');INSERT INTO area VALUES ('1682', '420102', '江岸区', '420100');INSERT INTO area VALUES ('1683', '420103', '江汉区', '420100');INSERT INTO area VALUES ('1684', '420104', '乔口区', '420100');INSERT INTO area VALUES ('1685', '420105', '汉阳区', '420100');INSERT INTO area VALUES ('1686', '420106', '武昌区', '420100');INSERT INTO area VALUES ('1687', '420107', '青山区', '420100');INSERT INTO area VALUES ('1688', '420111', '洪山区', '420100');INSERT INTO area VALUES ('1689', '420112', '东西湖区', '420100');INSERT INTO area VALUES ('1690', '420113', '汉南区', '420100');INSERT INTO area VALUES ('1691', '420114', '蔡甸区', '420100');INSERT INTO area VALUES ('1692', '420115', '江夏区', '420100');INSERT INTO area VALUES ('1693', '420116', '黄陂区', '420100');INSERT INTO area VALUES ('1694', '420117', '新洲区', '420100');INSERT INTO area VALUES ('1695', '420201', '市辖区', '420200');INSERT INTO area VALUES ('1696', '420202', '黄石港区', '420200');INSERT INTO area VALUES ('1697', '420203', '西塞山区', '420200');INSERT INTO area VALUES ('1698', '420204', '下陆区', '420200');INSERT INTO area VALUES ('1699', '420205', '铁山区', '420200');INSERT INTO area VALUES ('1700', '420222', '阳新县', '420200');INSERT INTO area VALUES ('1701', '420281', '大冶市', '420200');INSERT INTO area VALUES ('1702', '420301', '市辖区', '420300');INSERT INTO area VALUES ('1703', '420302', '茅箭区', '420300');INSERT INTO area VALUES ('1704', '420303', '张湾区', '420300');INSERT INTO area VALUES ('1705', '420321', '郧 县', '420300');INSERT INTO area VALUES ('1706', '420322', '郧西县', '420300');INSERT INTO area VALUES ('1707', '420323', '竹山县', '420300');INSERT INTO area VALUES ('1708', '420324', '竹溪县', '420300');INSERT INTO area VALUES ('1709', '420325', '房 县', '420300');INSERT INTO area VALUES ('1710', '420381', '丹江口市', '420300');INSERT INTO area VALUES ('1711', '420501', '市辖区', '420500');INSERT INTO area VALUES ('1712', '420502', '西陵区', '420500');INSERT INTO area VALUES ('1713', '420503', '伍家岗区', '420500');INSERT INTO area VALUES ('1714', '420504', '点军区', '420500');INSERT INTO area VALUES ('1715', '420505', '猇亭区', '420500');INSERT INTO area VALUES ('1716', '420506', '夷陵区', '420500');INSERT INTO area VALUES ('1717', '420525', '远安县', '420500');INSERT INTO area VALUES ('1718', '420526', '兴山县', '420500');INSERT INTO area VALUES ('1719', '420527', '秭归县', '420500');INSERT INTO area VALUES ('1720', '420528', '长阳土家族自治县', '420500');INSERT INTO area VALUES ('1721', '420529', '五峰土家族自治县', '420500');INSERT INTO area VALUES ('1722', '420581', '宜都市', '420500');INSERT INTO area VALUES ('1723', '420582', '当阳市', '420500');INSERT INTO area VALUES ('1724', '420583', '枝江市', '420500');INSERT INTO area VALUES ('1725', '420601', '市辖区', '420600');INSERT INTO area VALUES ('1726', '420602', '襄城区', '420600');INSERT INTO area VALUES ('1727', '420606', '樊城区', '420600');INSERT INTO area VALUES ('1728', '420607', '襄阳区', '420600');INSERT INTO area VALUES ('1729', '420624', '南漳县', '420600');INSERT INTO area VALUES ('1730', '420625', '谷城县', '420600');INSERT INTO area VALUES ('1731', '420626', '保康县', '420600');INSERT INTO area VALUES ('1732', '420682', '老河口市', '420600');INSERT INTO area VALUES ('1733', '420683', '枣阳市', '420600');INSERT INTO area VALUES ('1734', '420684', '宜城市', '420600');INSERT INTO area VALUES ('1735', '420701', '市辖区', '420700');INSERT INTO area VALUES ('1736', '420702', '梁子湖区', '420700');INSERT INTO area VALUES ('1737', '420703', '华容区', '420700');INSERT INTO area VALUES ('1738', '420704', '鄂城区', '420700');INSERT INTO area VALUES ('1739', '420801', '市辖区', '420800');INSERT INTO area VALUES ('1740', '420802', '东宝区', '420800');INSERT INTO area VALUES ('1741', '420804', '掇刀区', '420800');INSERT INTO area VALUES ('1742', '420821', '京山县', '420800');INSERT INTO area VALUES ('1743', '420822', '沙洋县', '420800');INSERT INTO area VALUES ('1744', '420881', '钟祥市', '420800');INSERT INTO area VALUES ('1745', '420901', '市辖区', '420900');INSERT INTO area VALUES ('1746', '420902', '孝南区', '420900');INSERT INTO area VALUES ('1747', '420921', '孝昌县', '420900');INSERT INTO area VALUES ('1748', '420922', '大悟县', '420900');INSERT INTO area VALUES ('1749', '420923', '云梦县', '420900');INSERT INTO area VALUES ('1750', '420981', '应城市', '420900');INSERT INTO area VALUES ('1751', '420982', '安陆市', '420900');INSERT INTO area VALUES ('1752', '420984', '汉川市', '420900');INSERT INTO area VALUES ('1753', '421001', '市辖区', '421000');INSERT INTO area VALUES ('1754', '421002', '沙市区', '421000');INSERT INTO area VALUES ('1755', '421003', '荆州区', '421000');INSERT INTO area VALUES ('1756', '421022', '公安县', '421000');INSERT INTO area VALUES ('1757', '421023', '监利县', '421000');INSERT INTO area VALUES ('1758', '421024', '江陵县', '421000');INSERT INTO area VALUES ('1759', '421081', '石首市', '421000');INSERT INTO area VALUES ('1760', '421083', '洪湖市', '421000');INSERT INTO area VALUES ('1761', '421087', '松滋市', '421000');INSERT INTO area VALUES ('1762', '421101', '市辖区', '421100');INSERT INTO area VALUES ('1763', '421102', '黄州区', '421100');INSERT INTO area VALUES ('1764', '421121', '团风县', '421100');INSERT INTO area VALUES ('1765', '421122', '红安县', '421100');INSERT INTO area VALUES ('1766', '421123', '罗田县', '421100');INSERT INTO area VALUES ('1767', '421124', '英山县', '421100');INSERT INTO area VALUES ('1768', '421125', '浠水县', '421100');INSERT INTO area VALUES ('1769', '421126', '蕲春县', '421100');INSERT INTO area VALUES ('1770', '421127', '黄梅县', '421100');INSERT INTO area VALUES ('1771', '421181', '麻城市', '421100');INSERT INTO area VALUES ('1772', '421182', '武穴市', '421100');INSERT INTO area VALUES ('1773', '421201', '市辖区', '421200');INSERT INTO area VALUES ('1774', '421202', '咸安区', '421200');INSERT INTO area VALUES ('1775', '421221', '嘉鱼县', '421200');INSERT INTO area VALUES ('1776', '421222', '通城县', '421200');INSERT INTO area VALUES ('1777', '421223', '崇阳县', '421200');INSERT INTO area VALUES ('1778', '421224', '通山县', '421200');INSERT INTO area VALUES ('1779', '421281', '赤壁市', '421200');INSERT INTO area VALUES ('1780', '421301', '市辖区', '421300');INSERT INTO area VALUES ('1781', '421302', '曾都区', '421300');INSERT INTO area VALUES ('1782', '421381', '广水市', '421300');INSERT INTO area VALUES ('1783', '422801', '恩施市', '422800');INSERT INTO area VALUES ('1784', '422802', '利川市', '422800');INSERT INTO area VALUES ('1785', '422822', '建始县', '422800');INSERT INTO area VALUES ('1786', '422823', '巴东县', '422800');INSERT INTO area VALUES ('1787', '422825', '宣恩县', '422800');INSERT INTO area VALUES ('1788', '422826', '咸丰县', '422800');INSERT INTO area VALUES ('1789', '422827', '来凤县', '422800');INSERT INTO area VALUES ('1790', '422828', '鹤峰县', '422800');INSERT INTO area VALUES ('1791', '429004', '仙桃市', '429000');INSERT INTO area VALUES ('1792', '429005', '潜江市', '429000');INSERT INTO area VALUES ('1793', '429006', '天门市', '429000');INSERT INTO area VALUES ('1794', '429021', '神农架林区', '429000');INSERT INTO area VALUES ('1795', '430101', '市辖区', '430100');INSERT INTO area VALUES ('1796', '430102', '芙蓉区', '430100');INSERT INTO area VALUES ('1797', '430103', '天心区', '430100');INSERT INTO area VALUES ('1798', '430104', '岳麓区', '430100');INSERT INTO area VALUES ('1799', '430105', '开福区', '430100');INSERT INTO area VALUES ('1800', '430111', '雨花区', '430100');INSERT INTO area VALUES ('1801', '430121', '长沙县', '430100');INSERT INTO area VALUES ('1802', '430122', '望城县', '430100');INSERT INTO area VALUES ('1803', '430124', '宁乡县', '430100');INSERT INTO area VALUES ('1804', '430181', '浏阳市', '430100');INSERT INTO area VALUES ('1805', '430201', '市辖区', '430200');INSERT INTO area VALUES ('1806', '430202', '荷塘区', '430200');INSERT INTO area VALUES ('1807', '430203', '芦淞区', '430200');INSERT INTO area VALUES ('1808', '430204', '石峰区', '430200');INSERT INTO area VALUES ('1809', '430211', '天元区', '430200');INSERT INTO area VALUES ('1810', '430221', '株洲县', '430200');INSERT INTO area VALUES ('1811', '430223', '攸 县', '430200');INSERT INTO area VALUES ('1812', '430224', '茶陵县', '430200');INSERT INTO area VALUES ('1813', '430225', '炎陵县', '430200');INSERT INTO area VALUES ('1814', '430281', '醴陵市', '430200');INSERT INTO area VALUES ('1815', '430301', '市辖区', '430300');INSERT INTO area VALUES ('1816', '430302', '雨湖区', '430300');INSERT INTO area VALUES ('1817', '430304', '岳塘区', '430300');INSERT INTO area VALUES ('1818', '430321', '湘潭县', '430300');INSERT INTO area VALUES ('1819', '430381', '湘乡市', '430300');INSERT INTO area VALUES ('1820', '430382', '韶山市', '430300');INSERT INTO area VALUES ('1821', '430401', '市辖区', '430400');INSERT INTO area VALUES ('1822', '430405', '珠晖区', '430400');INSERT INTO area VALUES ('1823', '430406', '雁峰区', '430400');INSERT INTO area VALUES ('1824', '430407', '石鼓区', '430400');INSERT INTO area VALUES ('1825', '430408', '蒸湘区', '430400');INSERT INTO area VALUES ('1826', '430412', '南岳区', '430400');INSERT INTO area VALUES ('1827', '430421', '衡阳县', '430400');INSERT INTO area VALUES ('1828', '430422', '衡南县', '430400');INSERT INTO area VALUES ('1829', '430423', '衡山县', '430400');INSERT INTO area VALUES ('1830', '430424', '衡东县', '430400');INSERT INTO area VALUES ('1831', '430426', '祁东县', '430400');INSERT INTO area VALUES ('1832', '430481', '耒阳市', '430400');INSERT INTO area VALUES ('1833', '430482', '常宁市', '430400');INSERT INTO area VALUES ('1834', '430501', '市辖区', '430500');INSERT INTO area VALUES ('1835', '430502', '双清区', '430500');INSERT INTO area VALUES ('1836', '430503', '大祥区', '430500');INSERT INTO area VALUES ('1837', '430511', '北塔区', '430500');INSERT INTO area VALUES ('1838', '430521', '邵东县', '430500');INSERT INTO area VALUES ('1839', '430522', '新邵县', '430500');INSERT INTO area VALUES ('1840', '430523', '邵阳县', '430500');INSERT INTO area VALUES ('1841', '430524', '隆回县', '430500');INSERT INTO area VALUES ('1842', '430525', '洞口县', '430500');INSERT INTO area VALUES ('1843', '430527', '绥宁县', '430500');INSERT INTO area VALUES ('1844', '430528', '新宁县', '430500');INSERT INTO area VALUES ('1845', '430529', '城步苗族自治县', '430500');INSERT INTO area VALUES ('1846', '430581', '武冈市', '430500');INSERT INTO area VALUES ('1847', '430601', '市辖区', '430600');INSERT INTO area VALUES ('1848', '430602', '岳阳楼区', '430600');INSERT INTO area VALUES ('1849', '430603', '云溪区', '430600');INSERT INTO area VALUES ('1850', '430611', '君山区', '430600');INSERT INTO area VALUES ('1851', '430621', '岳阳县', '430600');INSERT INTO area VALUES ('1852', '430623', '华容县', '430600');INSERT INTO area VALUES ('1853', '430624', '湘阴县', '430600');INSERT INTO area VALUES ('1854', '430626', '平江县', '430600');INSERT INTO area VALUES ('1855', '430681', '汨罗市', '430600');INSERT INTO area VALUES ('1856', '430682', '临湘市', '430600');INSERT INTO area VALUES ('1857', '430701', '市辖区', '430700');INSERT INTO area VALUES ('1858', '430702', '武陵区', '430700');INSERT INTO area VALUES ('1859', '430703', '鼎城区', '430700');INSERT INTO area VALUES ('1860', '430721', '安乡县', '430700');INSERT INTO area VALUES ('1861', '430722', '汉寿县', '430700');INSERT INTO area VALUES ('1862', '430723', '澧 县', '430700');INSERT INTO area VALUES ('1863', '430724', '临澧县', '430700');INSERT INTO area VALUES ('1864', '430725', '桃源县', '430700');INSERT INTO area VALUES ('1865', '430726', '石门县', '430700');INSERT INTO area VALUES ('1866', '430781', '津市市', '430700');INSERT INTO area VALUES ('1867', '430801', '市辖区', '430800');INSERT INTO area VALUES ('1868', '430802', '永定区', '430800');INSERT INTO area VALUES ('1869', '430811', '武陵源区', '430800');INSERT INTO area VALUES ('1870', '430821', '慈利县', '430800');INSERT INTO area VALUES ('1871', '430822', '桑植县', '430800');INSERT INTO area VALUES ('1872', '430901', '市辖区', '430900');INSERT INTO area VALUES ('1873', '430902', '资阳区', '430900');INSERT INTO area VALUES ('1874', '430903', '赫山区', '430900');INSERT INTO area VALUES ('1875', '430921', '南 县', '430900');INSERT INTO area VALUES ('1876', '430922', '桃江县', '430900');INSERT INTO area VALUES ('1877', '430923', '安化县', '430900');INSERT INTO area VALUES ('1878', '430981', '沅江市', '430900');INSERT INTO area VALUES ('1879', '431001', '市辖区', '431000');INSERT INTO area VALUES ('1880', '431002', '北湖区', '431000');INSERT INTO area VALUES ('1881', '431003', '苏仙区', '431000');INSERT INTO area VALUES ('1882', '431021', '桂阳县', '431000');INSERT INTO area VALUES ('1883', '431022', '宜章县', '431000');INSERT INTO area VALUES ('1884', '431023', '永兴县', '431000');INSERT INTO area VALUES ('1885', '431024', '嘉禾县', '431000');INSERT INTO area VALUES ('1886', '431025', '临武县', '431000');INSERT INTO area VALUES ('1887', '431026', '汝城县', '431000');INSERT INTO area VALUES ('1888', '431027', '桂东县', '431000');INSERT INTO area VALUES ('1889', '431028', '安仁县', '431000');INSERT INTO area VALUES ('1890', '431081', '资兴市', '431000');INSERT INTO area VALUES ('1891', '431101', '市辖区', '431100');INSERT INTO area VALUES ('1892', '431102', '芝山区', '431100');INSERT INTO area VALUES ('1893', '431103', '冷水滩区', '431100');INSERT INTO area VALUES ('1894', '431121', '祁阳县', '431100');INSERT INTO area VALUES ('1895', '431122', '东安县', '431100');INSERT INTO area VALUES ('1896', '431123', '双牌县', '431100');INSERT INTO area VALUES ('1897', '431124', '道 县', '431100');INSERT INTO area VALUES ('1898', '431125', '江永县', '431100');INSERT INTO area VALUES ('1899', '431126', '宁远县', '431100');INSERT INTO area VALUES ('1900', '431127', '蓝山县', '431100');INSERT INTO area VALUES ('1901', '431128', '新田县', '431100');INSERT INTO area VALUES ('1902', '431129', '江华瑶族自治县', '431100');INSERT INTO area VALUES ('1903', '431201', '市辖区', '431200');INSERT INTO area VALUES ('1904', '431202', '鹤城区', '431200');INSERT INTO area VALUES ('1905', '431221', '中方县', '431200');INSERT INTO area VALUES ('1906', '431222', '沅陵县', '431200');INSERT INTO area VALUES ('1907', '431223', '辰溪县', '431200');INSERT INTO area VALUES ('1908', '431224', '溆浦县', '431200');INSERT INTO area VALUES ('1909', '431225', '会同县', '431200');INSERT INTO area VALUES ('1910', '431226', '麻阳苗族自治县', '431200');INSERT INTO area VALUES ('1911', '431227', '新晃侗族自治县', '431200');INSERT INTO area VALUES ('1912', '431228', '芷江侗族自治县', '431200');INSERT INTO area VALUES ('1913', '431229', '靖州苗族侗族自治县', '431200');INSERT INTO area VALUES ('1914', '431230', '通道侗族自治县', '431200');INSERT INTO area VALUES ('1915', '431281', '洪江市', '431200');INSERT INTO area VALUES ('1916', '431301', '市辖区', '431300');INSERT INTO area VALUES ('1917', '431302', '娄星区', '431300');INSERT INTO area VALUES ('1918', '431321', '双峰县', '431300');INSERT INTO area VALUES ('1919', '431322', '新化县', '431300');INSERT INTO area VALUES ('1920', '431381', '冷水江市', '431300');INSERT INTO area VALUES ('1921', '431382', '涟源市', '431300');INSERT INTO area VALUES ('1922', '433101', '吉首市', '433100');INSERT INTO area VALUES ('1923', '433122', '泸溪县', '433100');INSERT INTO area VALUES ('1924', '433123', '凤凰县', '433100');INSERT INTO area VALUES ('1925', '433124', '花垣县', '433100');INSERT INTO area VALUES ('1926', '433125', '保靖县', '433100');INSERT INTO area VALUES ('1927', '433126', '古丈县', '433100');INSERT INTO area VALUES ('1928', '433127', '永顺县', '433100');INSERT INTO area VALUES ('1929', '433130', '龙山县', '433100');INSERT INTO area VALUES ('1930', '440101', '市辖区', '440100');INSERT INTO area VALUES ('1931', '440102', '东山区', '440100');INSERT INTO area VALUES ('1932', '440103', '荔湾区', '440100');INSERT INTO area VALUES ('1933', '440104', '越秀区', '440100');INSERT INTO area VALUES ('1934', '440105', '海珠区', '440100');INSERT INTO area VALUES ('1935', '440106', '天河区', '440100');INSERT INTO area VALUES ('1936', '440107', '芳村区', '440100');INSERT INTO area VALUES ('1937', '440111', '白云区', '440100');INSERT INTO area VALUES ('1938', '440112', '黄埔区', '440100');INSERT INTO area VALUES ('1939', '440113', '番禺区', '440100');INSERT INTO area VALUES ('1940', '440114', '花都区', '440100');INSERT INTO area VALUES ('1941', '440183', '增城市', '440100');INSERT INTO area VALUES ('1942', '440184', '从化市', '440100');INSERT INTO area VALUES ('1943', '440201', '市辖区', '440200');INSERT INTO area VALUES ('1944', '440203', '武江区', '440200');INSERT INTO area VALUES ('1945', '440204', '浈江区', '440200');INSERT INTO area VALUES ('1946', '440205', '曲江区', '440200');INSERT INTO area VALUES ('1947', '440222', '始兴县', '440200');INSERT INTO area VALUES ('1948', '440224', '仁化县', '440200');INSERT INTO area VALUES ('1949', '440229', '翁源县', '440200');INSERT INTO area VALUES ('1950', '440232', '乳源瑶族自治县', '440200');INSERT INTO area VALUES ('1951', '440233', '新丰县', '440200');INSERT INTO area VALUES ('1952', '440281', '乐昌市', '440200');INSERT INTO area VALUES ('1953', '440282', '南雄市', '440200');INSERT INTO area VALUES ('1954', '440301', '市辖区', '440300');INSERT INTO area VALUES ('1955', '440303', '罗湖区', '440300');INSERT INTO area VALUES ('1956', '440304', '福田区', '440300');INSERT INTO area VALUES ('1957', '440305', '南山区', '440300');INSERT INTO area VALUES ('1958', '440306', '宝安区', '440300');INSERT INTO area VALUES ('1959', '440307', '龙岗区', '440300');INSERT INTO area VALUES ('1960', '440308', '盐田区', '440300');INSERT INTO area VALUES ('1961', '440401', '市辖区', '440400');INSERT INTO area VALUES ('1962', '440402', '香洲区', '440400');INSERT INTO area VALUES ('1963', '440403', '斗门区', '440400');INSERT INTO area VALUES ('1964', '440404', '金湾区', '440400');INSERT INTO area VALUES ('1965', '440501', '市辖区', '440500');INSERT INTO area VALUES ('1966', '440507', '龙湖区', '440500');INSERT INTO area VALUES ('1967', '440511', '金平区', '440500');INSERT INTO area VALUES ('1968', '440512', '濠江区', '440500');INSERT INTO area VALUES ('1969', '440513', '潮阳区', '440500');INSERT INTO area VALUES ('1970', '440514', '潮南区', '440500');INSERT INTO area VALUES ('1971', '440515', '澄海区', '440500');INSERT INTO area VALUES ('1972', '440523', '南澳县', '440500');INSERT INTO area VALUES ('1973', '440601', '市辖区', '440600');INSERT INTO area VALUES ('1974', '440604', '禅城区', '440600');INSERT INTO area VALUES ('1975', '440605', '南海区', '440600');INSERT INTO area VALUES ('1976', '440606', '顺德区', '440600');INSERT INTO area VALUES ('1977', '440607', '三水区', '440600');INSERT INTO area VALUES ('1978', '440608', '高明区', '440600');INSERT INTO area VALUES ('1979', '440701', '市辖区', '440700');INSERT INTO area VALUES ('1980', '440703', '蓬江区', '440700');INSERT INTO area VALUES ('1981', '440704', '江海区', '440700');INSERT INTO area VALUES ('1982', '440705', '新会区', '440700');INSERT INTO area VALUES ('1983', '440781', '台山市', '440700');INSERT INTO area VALUES ('1984', '440783', '开平市', '440700');INSERT INTO area VALUES ('1985', '440784', '鹤山市', '440700');INSERT INTO area VALUES ('1986', '440785', '恩平市', '440700');INSERT INTO area VALUES ('1987', '440801', '市辖区', '440800');INSERT INTO area VALUES ('1988', '440802', '赤坎区', '440800');INSERT INTO area VALUES ('1989', '440803', '霞山区', '440800');INSERT INTO area VALUES ('1990', '440804', '坡头区', '440800');INSERT INTO area VALUES ('1991', '440811', '麻章区', '440800');INSERT INTO area VALUES ('1992', '440823', '遂溪县', '440800');INSERT INTO area VALUES ('1993', '440825', '徐闻县', '440800');INSERT INTO area VALUES ('1994', '440881', '廉江市', '440800');INSERT INTO area VALUES ('1995', '440882', '雷州市', '440800');INSERT INTO area VALUES ('1996', '440883', '吴川市', '440800');INSERT INTO area VALUES ('1997', '440901', '市辖区', '440900');INSERT INTO area VALUES ('1998', '440902', '茂南区', '440900');INSERT INTO area VALUES ('1999', '440903', '茂港区', '440900');INSERT INTO area VALUES ('2000', '440923', '电白县', '440900');INSERT INTO area VALUES ('2001', '440981', '高州市', '440900');INSERT INTO area VALUES ('2002', '440982', '化州市', '440900');INSERT INTO area VALUES ('2003', '440983', '信宜市', '440900');INSERT INTO area VALUES ('2004', '441201', '市辖区', '441200');INSERT INTO area VALUES ('2005', '441202', '端州区', '441200');INSERT INTO area VALUES ('2006', '441203', '鼎湖区', '441200');INSERT INTO area VALUES ('2007', '441223', '广宁县', '441200');INSERT INTO area VALUES ('2008', '441224', '怀集县', '441200');INSERT INTO area VALUES ('2009', '441225', '封开县', '441200');INSERT INTO area VALUES ('2010', '441226', '德庆县', '441200');INSERT INTO area VALUES ('2011', '441283', '高要市', '441200');INSERT INTO area VALUES ('2012', '441284', '四会市', '441200');INSERT INTO area VALUES ('2013', '441301', '市辖区', '441300');INSERT INTO area VALUES ('2014', '441302', '惠城区', '441300');INSERT INTO area VALUES ('2015', '441303', '惠阳区', '441300');INSERT INTO area VALUES ('2016', '441322', '博罗县', '441300');INSERT INTO area VALUES ('2017', '441323', '惠东县', '441300');INSERT INTO area VALUES ('2018', '441324', '龙门县', '441300');INSERT INTO area VALUES ('2019', '441401', '市辖区', '441400');INSERT INTO area VALUES ('2020', '441402', '梅江区', '441400');INSERT INTO area VALUES ('2021', '441421', '梅 县', '441400');INSERT INTO area VALUES ('2022', '441422', '大埔县', '441400');INSERT INTO area VALUES ('2023', '441423', '丰顺县', '441400');INSERT INTO area VALUES ('2024', '441424', '五华县', '441400');INSERT INTO area VALUES ('2025', '441426', '平远县', '441400');INSERT INTO area VALUES ('2026', '441427', '蕉岭县', '441400');INSERT INTO area VALUES ('2027', '441481', '兴宁市', '441400');INSERT INTO area VALUES ('2028', '441501', '市辖区', '441500');INSERT INTO area VALUES ('2029', '441502', '城 区', '441500');INSERT INTO area VALUES ('2030', '441521', '海丰县', '441500');INSERT INTO area VALUES ('2031', '441523', '陆河县', '441500');INSERT INTO area VALUES ('2032', '441581', '陆丰市', '441500');INSERT INTO area VALUES ('2033', '441601', '市辖区', '441600');INSERT INTO area VALUES ('2034', '441602', '源城区', '441600');INSERT INTO area VALUES ('2035', '441621', '紫金县', '441600');INSERT INTO area VALUES ('2036', '441622', '龙川县', '441600');INSERT INTO area VALUES ('2037', '441623', '连平县', '441600');INSERT INTO area VALUES ('2038', '441624', '和平县', '441600');INSERT INTO area VALUES ('2039', '441625', '东源县', '441600');INSERT INTO area VALUES ('2040', '441701', '市辖区', '441700');INSERT INTO area VALUES ('2041', '441702', '江城区', '441700');INSERT INTO area VALUES ('2042', '441721', '阳西县', '441700');INSERT INTO area VALUES ('2043', '441723', '阳东县', '441700');INSERT INTO area VALUES ('2044', '441781', '阳春市', '441700');INSERT INTO area VALUES ('2045', '441801', '市辖区', '441800');INSERT INTO area VALUES ('2046', '441802', '清城区', '441800');INSERT INTO area VALUES ('2047', '441821', '佛冈县', '441800');INSERT INTO area VALUES ('2048', '441823', '阳山县', '441800');INSERT INTO area VALUES ('2049', '441825', '连山壮族瑶族自治县', '441800');INSERT INTO area VALUES ('2050', '441826', '连南瑶族自治县', '441800');INSERT INTO area VALUES ('2051', '441827', '清新县', '441800');INSERT INTO area VALUES ('2052', '441881', '英德市', '441800');INSERT INTO area VALUES ('2053', '441882', '连州市', '441800');INSERT INTO area VALUES ('2054', '445101', '市辖区', '445100');INSERT INTO area VALUES ('2055', '445102', '湘桥区', '445100');INSERT INTO area VALUES ('2056', '445121', '潮安县', '445100');INSERT INTO area VALUES ('2057', '445122', '饶平县', '445100');INSERT INTO area VALUES ('2058', '445201', '市辖区', '445200');INSERT INTO area VALUES ('2059', '445202', '榕城区', '445200');INSERT INTO area VALUES ('2060', '445221', '揭东县', '445200');INSERT INTO area VALUES ('2061', '445222', '揭西县', '445200');INSERT INTO area VALUES ('2062', '445224', '惠来县', '445200');INSERT INTO area VALUES ('2063', '445281', '普宁市', '445200');INSERT INTO area VALUES ('2064', '445301', '市辖区', '445300');INSERT INTO area VALUES ('2065', '445302', '云城区', '445300');INSERT INTO area VALUES ('2066', '445321', '新兴县', '445300');INSERT INTO area VALUES ('2067', '445322', '郁南县', '445300');INSERT INTO area VALUES ('2068', '445323', '云安县', '445300');INSERT INTO area VALUES ('2069', '445381', '罗定市', '445300');INSERT INTO area VALUES ('2070', '450101', '市辖区', '450100');INSERT INTO area VALUES ('2071', '450102', '兴宁区', '450100');INSERT INTO area VALUES ('2072', '450103', '青秀区', '450100');INSERT INTO area VALUES ('2073', '450105', '江南区', '450100');INSERT INTO area VALUES ('2074', '450107', '西乡塘区', '450100');INSERT INTO area VALUES ('2075', '450108', '良庆区', '450100');INSERT INTO area VALUES ('2076', '450109', '邕宁区', '450100');INSERT INTO area VALUES ('2077', '450122', '武鸣县', '450100');INSERT INTO area VALUES ('2078', '450123', '隆安县', '450100');INSERT INTO area VALUES ('2079', '450124', '马山县', '450100');INSERT INTO area VALUES ('2080', '450125', '上林县', '450100');INSERT INTO area VALUES ('2081', '450126', '宾阳县', '450100');INSERT INTO area VALUES ('2082', '450127', '横 县', '450100');INSERT INTO area VALUES ('2083', '450201', '市辖区', '450200');INSERT INTO area VALUES ('2084', '450202', '城中区', '450200');INSERT INTO area VALUES ('2085', '450203', '鱼峰区', '450200');INSERT INTO area VALUES ('2086', '450204', '柳南区', '450200');INSERT INTO area VALUES ('2087', '450205', '柳北区', '450200');INSERT INTO area VALUES ('2088', '450221', '柳江县', '450200');INSERT INTO area VALUES ('2089', '450222', '柳城县', '450200');INSERT INTO area VALUES ('2090', '450223', '鹿寨县', '450200');INSERT INTO area VALUES ('2091', '450224', '融安县', '450200');INSERT INTO area VALUES ('2092', '450225', '融水苗族自治县', '450200');INSERT INTO area VALUES ('2093', '450226', '三江侗族自治县', '450200');INSERT INTO area VALUES ('2094', '450301', '市辖区', '450300');INSERT INTO area VALUES ('2095', '450302', '秀峰区', '450300');INSERT INTO area VALUES ('2096', '450303', '叠彩区', '450300');INSERT INTO area VALUES ('2097', '450304', '象山区', '450300');INSERT INTO area VALUES ('2098', '450305', '七星区', '450300');INSERT INTO area VALUES ('2099', '450311', '雁山区', '450300');INSERT INTO area VALUES ('2100', '450321', '阳朔县', '450300');INSERT INTO area VALUES ('2101', '450322', '临桂县', '450300');INSERT INTO area VALUES ('2102', '450323', '灵川县', '450300');INSERT INTO area VALUES ('2103', '450324', '全州县', '450300');INSERT INTO area VALUES ('2104', '450325', '兴安县', '450300');INSERT INTO area VALUES ('2105', '450326', '永福县', '450300');INSERT INTO area VALUES ('2106', '450327', '灌阳县', '450300');INSERT INTO area VALUES ('2107', '450328', '龙胜各族自治县', '450300');INSERT INTO area VALUES ('2108', '450329', '资源县', '450300');INSERT INTO area VALUES ('2109', '450330', '平乐县', '450300');INSERT INTO area VALUES ('2110', '450331', '荔蒲县', '450300');INSERT INTO area VALUES ('2111', '450332', '恭城瑶族自治县', '450300');INSERT INTO area VALUES ('2112', '450401', '市辖区', '450400');INSERT INTO area VALUES ('2113', '450403', '万秀区', '450400');INSERT INTO area VALUES ('2114', '450404', '蝶山区', '450400');INSERT INTO area VALUES ('2115', '450405', '长洲区', '450400');INSERT INTO area VALUES ('2116', '450421', '苍梧县', '450400');INSERT INTO area VALUES ('2117', '450422', '藤 县', '450400');INSERT INTO area VALUES ('2118', '450423', '蒙山县', '450400');INSERT INTO area VALUES ('2119', '450481', '岑溪市', '450400');INSERT INTO area VALUES ('2120', '450501', '市辖区', '450500');INSERT INTO area VALUES ('2121', '450502', '海城区', '450500');INSERT INTO area VALUES ('2122', '450503', '银海区', '450500');INSERT INTO area VALUES ('2123', '450512', '铁山港区', '450500');INSERT INTO area VALUES ('2124', '450521', '合浦县', '450500');INSERT INTO area VALUES ('2125', '450601', '市辖区', '450600');INSERT INTO area VALUES ('2126', '450602', '港口区', '450600');INSERT INTO area VALUES ('2127', '450603', '防城区', '450600');INSERT INTO area VALUES ('2128', '450621', '上思县', '450600');INSERT INTO area VALUES ('2129', '450681', '东兴市', '450600');INSERT INTO area VALUES ('2130', '450701', '市辖区', '450700');INSERT INTO area VALUES ('2131', '450702', '钦南区', '450700');INSERT INTO area VALUES ('2132', '450703', '钦北区', '450700');INSERT INTO area VALUES ('2133', '450721', '灵山县', '450700');INSERT INTO area VALUES ('2134', '450722', '浦北县', '450700');INSERT INTO area VALUES ('2135', '450801', '市辖区', '450800');INSERT INTO area VALUES ('2136', '450802', '港北区', '450800');INSERT INTO area VALUES ('2137', '450803', '港南区', '450800');INSERT INTO area VALUES ('2138', '450804', '覃塘区', '450800');INSERT INTO area VALUES ('2139', '450821', '平南县', '450800');INSERT INTO area VALUES ('2140', '450881', '桂平市', '450800');INSERT INTO area VALUES ('2141', '450901', '市辖区', '450900');INSERT INTO area VALUES ('2142', '450902', '玉州区', '450900');INSERT INTO area VALUES ('2143', '450921', '容 县', '450900');INSERT INTO area VALUES ('2144', '450922', '陆川县', '450900');INSERT INTO area VALUES ('2145', '450923', '博白县', '450900');INSERT INTO area VALUES ('2146', '450924', '兴业县', '450900');INSERT INTO area VALUES ('2147', '450981', '北流市', '450900');INSERT INTO area VALUES ('2148', '451001', '市辖区', '451000');INSERT INTO area VALUES ('2149', '451002', '右江区', '451000');INSERT INTO area VALUES ('2150', '451021', '田阳县', '451000');INSERT INTO area VALUES ('2151', '451022', '田东县', '451000');INSERT INTO area VALUES ('2152', '451023', '平果县', '451000');INSERT INTO area VALUES ('2153', '451024', '德保县', '451000');INSERT INTO area VALUES ('2154', '451025', '靖西县', '451000');INSERT INTO area VALUES ('2155', '451026', '那坡县', '451000');INSERT INTO area VALUES ('2156', '451027', '凌云县', '451000');INSERT INTO area VALUES ('2157', '451028', '乐业县', '451000');INSERT INTO area VALUES ('2158', '451029', '田林县', '451000');INSERT INTO area VALUES ('2159', '451030', '西林县', '451000');INSERT INTO area VALUES ('2160', '451031', '隆林各族自治县', '451000');INSERT INTO area VALUES ('2161', '451101', '市辖区', '451100');INSERT INTO area VALUES ('2162', '451102', '八步区', '451100');INSERT INTO area VALUES ('2163', '451121', '昭平县', '451100');INSERT INTO area VALUES ('2164', '451122', '钟山县', '451100');INSERT INTO area VALUES ('2165', '451123', '富川瑶族自治县', '451100');INSERT INTO area VALUES ('2166', '451201', '市辖区', '451200');INSERT INTO area VALUES ('2167', '451202', '金城江区', '451200');INSERT INTO area VALUES ('2168', '451221', '南丹县', '451200');INSERT INTO area VALUES ('2169', '451222', '天峨县', '451200');INSERT INTO area VALUES ('2170', '451223', '凤山县', '451200');INSERT INTO area VALUES ('2171', '451224', '东兰县', '451200');INSERT INTO area VALUES ('2172', '451225', '罗城仫佬族自治县', '451200');INSERT INTO area VALUES ('2173', '451226', '环江毛南族自治县', '451200');INSERT INTO area VALUES ('2174', '451227', '巴马瑶族自治县', '451200');INSERT INTO area VALUES ('2175', '451228', '都安瑶族自治县', '451200');INSERT INTO area VALUES ('2176', '451229', '大化瑶族自治县', '451200');INSERT INTO area VALUES ('2177', '451281', '宜州市', '451200');INSERT INTO area VALUES ('2178', '451301', '市辖区', '451300');INSERT INTO area VALUES ('2179', '451302', '兴宾区', '451300');INSERT INTO area VALUES ('2180', '451321', '忻城县', '451300');INSERT INTO area VALUES ('2181', '451322', '象州县', '451300');INSERT INTO area VALUES ('2182', '451323', '武宣县', '451300');INSERT INTO area VALUES ('2183', '451324', '金秀瑶族自治县', '451300');INSERT INTO area VALUES ('2184', '451381', '合山市', '451300');INSERT INTO area VALUES ('2185', '451401', '市辖区', '451400');INSERT INTO area VALUES ('2186', '451402', '江洲区', '451400');INSERT INTO area VALUES ('2187', '451421', '扶绥县', '451400');INSERT INTO area VALUES ('2188', '451422', '宁明县', '451400');INSERT INTO area VALUES ('2189', '451423', '龙州县', '451400');INSERT INTO area VALUES ('2190', '451424', '大新县', '451400');INSERT INTO area VALUES ('2191', '451425', '天等县', '451400');INSERT INTO area VALUES ('2192', '451481', '凭祥市', '451400');INSERT INTO area VALUES ('2193', '460101', '市辖区', '460100');INSERT INTO area VALUES ('2194', '460105', '秀英区', '460100');INSERT INTO area VALUES ('2195', '460106', '龙华区', '460100');INSERT INTO area VALUES ('2196', '460107', '琼山区', '460100');INSERT INTO area VALUES ('2197', '460108', '美兰区', '460100');INSERT INTO area VALUES ('2198', '460201', '市辖区', '460200');INSERT INTO area VALUES ('2199', '469001', '五指山市', '469000');INSERT INTO area VALUES ('2200', '469002', '琼海市', '469000');INSERT INTO area VALUES ('2201', '469003', '儋州市', '469000');INSERT INTO area VALUES ('2202', '469005', '文昌市', '469000');INSERT INTO area VALUES ('2203', '469006', '万宁市', '469000');INSERT INTO area VALUES ('2204', '469007', '西方市', '469000');INSERT INTO area VALUES ('2205', '469025', '定安县', '469000');INSERT INTO area VALUES ('2206', '469026', '屯昌县', '469000');INSERT INTO area VALUES ('2207', '469027', '澄迈县', '469000');INSERT INTO area VALUES ('2208', '469028', '临高县', '469000');INSERT INTO area VALUES ('2209', '469030', '白沙黎族自治县', '469000');INSERT INTO area VALUES ('2210', '469031', '昌江黎族自治县', '469000');INSERT INTO area VALUES ('2211', '469033', '乐东黎族自治县', '469000');INSERT INTO area VALUES ('2212', '469034', '陵水黎族自治县', '469000');INSERT INTO area VALUES ('2213', '469035', '保亭黎族苗族自治县', '469000');INSERT INTO area VALUES ('2214', '469036', '琼中黎族苗族自治县', '469000');INSERT INTO area VALUES ('2215', '469037', '西沙群岛', '469000');INSERT INTO area VALUES ('2216', '469038', '南沙群岛', '469000');INSERT INTO area VALUES ('2217', '469039', '中沙群岛的岛礁及其海域', '469000');INSERT INTO area VALUES ('2218', '500101', '万州区', '500100');INSERT INTO area VALUES ('2219', '500102', '涪陵区', '500100');INSERT INTO area VALUES ('2220', '500103', '渝中区', '500100');INSERT INTO area VALUES ('2221', '500104', '大渡口区', '500100');INSERT INTO area VALUES ('2222', '500105', '江北区', '500100');INSERT INTO area VALUES ('2223', '500106', '沙坪坝区', '500100');INSERT INTO area VALUES ('2224', '500107', '九龙坡区', '500100');INSERT INTO area VALUES ('2225', '500108', '南岸区', '500100');INSERT INTO area VALUES ('2226', '500109', '北碚区', '500100');INSERT INTO area VALUES ('2227', '500110', '万盛区', '500100');INSERT INTO area VALUES ('2228', '500111', '双桥区', '500100');INSERT INTO area VALUES ('2229', '500112', '渝北区', '500100');INSERT INTO area VALUES ('2230', '500113', '巴南区', '500100');INSERT INTO area VALUES ('2231', '500114', '黔江区', '500100');INSERT INTO area VALUES ('2232', '500115', '长寿区', '500100');INSERT INTO area VALUES ('2233', '500222', '綦江县', '500100');INSERT INTO area VALUES ('2234', '500223', '潼南县', '500100');INSERT INTO area VALUES ('2235', '500224', '铜梁县', '500100');INSERT INTO area VALUES ('2236', '500225', '大足县', '500100');INSERT INTO area VALUES ('2237', '500226', '荣昌县', '500100');INSERT INTO area VALUES ('2238', '500227', '璧山县', '500100');INSERT INTO area VALUES ('2239', '500228', '梁平县', '500100');INSERT INTO area VALUES ('2240', '500229', '城口县', '500100');INSERT INTO area VALUES ('2241', '500230', '丰都县', '500100');INSERT INTO area VALUES ('2242', '500231', '垫江县', '500100');INSERT INTO area VALUES ('2243', '500232', '武隆县', '500100');INSERT INTO area VALUES ('2244', '500233', '忠 县', '500100');INSERT INTO area VALUES ('2245', '500234', '开 县', '500100');INSERT INTO area VALUES ('2246', '500235', '云阳县', '500100');INSERT INTO area VALUES ('2247', '500236', '奉节县', '500100');INSERT INTO area VALUES ('2248', '500237', '巫山县', '500100');INSERT INTO area VALUES ('2249', '500238', '巫溪县', '500100');INSERT INTO area VALUES ('2250', '500240', '石柱土家族自治县', '500100');INSERT INTO area VALUES ('2251', '500241', '秀山土家族苗族自治县', '500100');INSERT INTO area VALUES ('2252', '500242', '酉阳土家族苗族自治县', '500100');INSERT INTO area VALUES ('2253', '500243', '彭水苗族土家族自治县', '500100');INSERT INTO area VALUES ('2254', '500381', '江津市', '500100');INSERT INTO area VALUES ('2255', '500382', '合川市', '500100');INSERT INTO area VALUES ('2256', '500383', '永川市', '500100');INSERT INTO area VALUES ('2257', '500384', '南川市', '500100');INSERT INTO area VALUES ('2258', '510101', '市辖区', '510100');INSERT INTO area VALUES ('2259', '510104', '锦江区', '510100');INSERT INTO area VALUES ('2260', '510105', '青羊区', '510100');INSERT INTO area VALUES ('2261', '510106', '金牛区', '510100');INSERT INTO area VALUES ('2262', '510107', '武侯区', '510100');INSERT INTO area VALUES ('2263', '510108', '成华区', '510100');INSERT INTO area VALUES ('2264', '510112', '龙泉驿区', '510100');INSERT INTO area VALUES ('2265', '510113', '青白江区', '510100');INSERT INTO area VALUES ('2266', '510114', '新都区', '510100');INSERT INTO area VALUES ('2267', '510115', '温江区', '510100');INSERT INTO area VALUES ('2268', '510121', '金堂县', '510100');INSERT INTO area VALUES ('2269', '510122', '双流县', '510100');INSERT INTO area VALUES ('2270', '510124', '郫 县', '510100');INSERT INTO area VALUES ('2271', '510129', '大邑县', '510100');INSERT INTO area VALUES ('2272', '510131', '蒲江县', '510100');INSERT INTO area VALUES ('2273', '510132', '新津县', '510100');INSERT INTO area VALUES ('2274', '510181', '都江堰市', '510100');INSERT INTO area VALUES ('2275', '510182', '彭州市', '510100');INSERT INTO area VALUES ('2276', '510183', '邛崃市', '510100');INSERT INTO area VALUES ('2277', '510184', '崇州市', '510100');INSERT INTO area VALUES ('2278', '510301', '市辖区', '510300');INSERT INTO area VALUES ('2279', '510302', '自流井区', '510300');INSERT INTO area VALUES ('2280', '510303', '贡井区', '510300');INSERT INTO area VALUES ('2281', '510304', '大安区', '510300');INSERT INTO area VALUES ('2282', '510311', '沿滩区', '510300');INSERT INTO area VALUES ('2283', '510321', '荣 县', '510300');INSERT INTO area VALUES ('2284', '510322', '富顺县', '510300');INSERT INTO area VALUES ('2285', '510401', '市辖区', '510400');INSERT INTO area VALUES ('2286', '510402', '东 区', '510400');INSERT INTO area VALUES ('2287', '510403', '西 区', '510400');INSERT INTO area VALUES ('2288', '510411', '仁和区', '510400');INSERT INTO area VALUES ('2289', '510421', '米易县', '510400');INSERT INTO area VALUES ('2290', '510422', '盐边县', '510400');INSERT INTO area VALUES ('2291', '510501', '市辖区', '510500');INSERT INTO area VALUES ('2292', '510502', '江阳区', '510500');INSERT INTO area VALUES ('2293', '510503', '纳溪区', '510500');INSERT INTO area VALUES ('2294', '510504', '龙马潭区', '510500');INSERT INTO area VALUES ('2295', '510521', '泸 县', '510500');INSERT INTO area VALUES ('2296', '510522', '合江县', '510500');INSERT INTO area VALUES ('2297', '510524', '叙永县', '510500');INSERT INTO area VALUES ('2298', '510525', '古蔺县', '510500');INSERT INTO area VALUES ('2299', '510601', '市辖区', '510600');INSERT INTO area VALUES ('2300', '510603', '旌阳区', '510600');INSERT INTO area VALUES ('2301', '510623', '中江县', '510600');INSERT INTO area VALUES ('2302', '510626', '罗江县', '510600');INSERT INTO area VALUES ('2303', '510681', '广汉市', '510600');INSERT INTO area VALUES ('2304', '510682', '什邡市', '510600');INSERT INTO area VALUES ('2305', '510683', '绵竹市', '510600');INSERT INTO area VALUES ('2306', '510701', '市辖区', '510700');INSERT INTO area VALUES ('2307', '510703', '涪城区', '510700');INSERT INTO area VALUES ('2308', '510704', '游仙区', '510700');INSERT INTO area VALUES ('2309', '510722', '三台县', '510700');INSERT INTO area VALUES ('2310', '510723', '盐亭县', '510700');INSERT INTO area VALUES ('2311', '510724', '安 县', '510700');INSERT INTO area VALUES ('2312', '510725', '梓潼县', '510700');INSERT INTO area VALUES ('2313', '510726', '北川羌族自治县', '510700');INSERT INTO area VALUES ('2314', '510727', '平武县', '510700');INSERT INTO area VALUES ('2315', '510781', '江油市', '510700');INSERT INTO area VALUES ('2316', '510801', '市辖区', '510800');INSERT INTO area VALUES ('2317', '510802', '市中区', '510800');INSERT INTO area VALUES ('2318', '510811', '元坝区', '510800');INSERT INTO area VALUES ('2319', '510812', '朝天区', '510800');INSERT INTO area VALUES ('2320', '510821', '旺苍县', '510800');INSERT INTO area VALUES ('2321', '510822', '青川县', '510800');INSERT INTO area VALUES ('2322', '510823', '剑阁县', '510800');INSERT INTO area VALUES ('2323', '510824', '苍溪县', '510800');INSERT INTO area VALUES ('2324', '510901', '市辖区', '510900');INSERT INTO area VALUES ('2325', '510903', '船山区', '510900');INSERT INTO area VALUES ('2326', '510904', '安居区', '510900');INSERT INTO area VALUES ('2327', '510921', '蓬溪县', '510900');INSERT INTO area VALUES ('2328', '510922', '射洪县', '510900');INSERT INTO area VALUES ('2329', '510923', '大英县', '510900');INSERT INTO area VALUES ('2330', '511001', '市辖区', '511000');INSERT INTO area VALUES ('2331', '511002', '市中区', '511000');INSERT INTO area VALUES ('2332', '511011', '东兴区', '511000');INSERT INTO area VALUES ('2333', '511024', '威远县', '511000');INSERT INTO area VALUES ('2334', '511025', '资中县', '511000');INSERT INTO area VALUES ('2335', '511028', '隆昌县', '511000');INSERT INTO area VALUES ('2336', '511101', '市辖区', '511100');INSERT INTO area VALUES ('2337', '511102', '市中区', '511100');INSERT INTO area VALUES ('2338', '511111', '沙湾区', '511100');INSERT INTO area VALUES ('2339', '511112', '五通桥区', '511100');INSERT INTO area VALUES ('2340', '511113', '金口河区', '511100');INSERT INTO area VALUES ('2341', '511123', '犍为县', '511100');INSERT INTO area VALUES ('2342', '511124', '井研县', '511100');INSERT INTO area VALUES ('2343', '511126', '夹江县', '511100');INSERT INTO area VALUES ('2344', '511129', '沐川县', '511100');INSERT INTO area VALUES ('2345', '511132', '峨边彝族自治县', '511100');INSERT INTO area VALUES ('2346', '511133', '马边彝族自治县', '511100');INSERT INTO area VALUES ('2347', '511181', '峨眉山市', '511100');INSERT INTO area VALUES ('2348', '511301', '市辖区', '511300');INSERT INTO area VALUES ('2349', '511302', '顺庆区', '511300');INSERT INTO area VALUES ('2350', '511303', '高坪区', '511300');INSERT INTO area VALUES ('2351', '511304', '嘉陵区', '511300');INSERT INTO area VALUES ('2352', '511321', '南部县', '511300');INSERT INTO area VALUES ('2353', '511322', '营山县', '511300');INSERT INTO area VALUES ('2354', '511323', '蓬安县', '511300');INSERT INTO area VALUES ('2355', '511324', '仪陇县', '511300');INSERT INTO area VALUES ('2356', '511325', '西充县', '511300');INSERT INTO area VALUES ('2357', '511381', '阆中市', '511300');INSERT INTO area VALUES ('2358', '511401', '市辖区', '511400');INSERT INTO area VALUES ('2359', '511402', '东坡区', '511400');INSERT INTO area VALUES ('2360', '511421', '仁寿县', '511400');INSERT INTO area VALUES ('2361', '511422', '彭山县', '511400');INSERT INTO area VALUES ('2362', '511423', '洪雅县', '511400');INSERT INTO area VALUES ('2363', '511424', '丹棱县', '511400');INSERT INTO area VALUES ('2364', '511425', '青神县', '511400');INSERT INTO area VALUES ('2365', '511501', '市辖区', '511500');INSERT INTO area VALUES ('2366', '511502', '翠屏区', '511500');INSERT INTO area VALUES ('2367', '511521', '宜宾县', '511500');INSERT INTO area VALUES ('2368', '511522', '南溪县', '511500');INSERT INTO area VALUES ('2369', '511523', '江安县', '511500');INSERT INTO area VALUES ('2370', '511524', '长宁县', '511500');INSERT INTO area VALUES ('2371', '511525', '高 县', '511500');INSERT INTO area VALUES ('2372', '511526', '珙 县', '511500');INSERT INTO area VALUES ('2373', '511527', '筠连县', '511500');INSERT INTO area VALUES ('2374', '511528', '兴文县', '511500');INSERT INTO area VALUES ('2375', '511529', '屏山县', '511500');INSERT INTO area VALUES ('2376', '511601', '市辖区', '511600');INSERT INTO area VALUES ('2377', '511602', '广安区', '511600');INSERT INTO area VALUES ('2378', '511621', '岳池县', '511600');INSERT INTO area VALUES ('2379', '511622', '武胜县', '511600');INSERT INTO area VALUES ('2380', '511623', '邻水县', '511600');INSERT INTO area VALUES ('2381', '511681', '华莹市', '511600');INSERT INTO area VALUES ('2382', '511701', '市辖区', '511700');INSERT INTO area VALUES ('2383', '511702', '通川区', '511700');INSERT INTO area VALUES ('2384', '511721', '达 县', '511700');INSERT INTO area VALUES ('2385', '511722', '宣汉县', '511700');INSERT INTO area VALUES ('2386', '511723', '开江县', '511700');INSERT INTO area VALUES ('2387', '511724', '大竹县', '511700');INSERT INTO area VALUES ('2388', '511725', '渠 县', '511700');INSERT INTO area VALUES ('2389', '511781', '万源市', '511700');INSERT INTO area VALUES ('2390', '511801', '市辖区', '511800');INSERT INTO area VALUES ('2391', '511802', '雨城区', '511800');INSERT INTO area VALUES ('2392', '511821', '名山县', '511800');INSERT INTO area VALUES ('2393', '511822', '荥经县', '511800');INSERT INTO area VALUES ('2394', '511823', '汉源县', '511800');INSERT INTO area VALUES ('2395', '511824', '石棉县', '511800');INSERT INTO area VALUES ('2396', '511825', '天全县', '511800');INSERT INTO area VALUES ('2397', '511826', '芦山县', '511800');INSERT INTO area VALUES ('2398', '511827', '宝兴县', '511800');INSERT INTO area VALUES ('2399', '511901', '市辖区', '511900');INSERT INTO area VALUES ('2400', '511902', '巴州区', '511900');INSERT INTO area VALUES ('2401', '511921', '通江县', '511900');INSERT INTO area VALUES ('2402', '511922', '南江县', '511900');INSERT INTO area VALUES ('2403', '511923', '平昌县', '511900');INSERT INTO area VALUES ('2404', '512001', '市辖区', '512000');INSERT INTO area VALUES ('2405', '512002', '雁江区', '512000');INSERT INTO area VALUES ('2406', '512021', '安岳县', '512000');INSERT INTO area VALUES ('2407', '512022', '乐至县', '512000');INSERT INTO area VALUES ('2408', '512081', '简阳市', '512000');INSERT INTO area VALUES ('2409', '513221', '汶川县', '513200');INSERT INTO area VALUES ('2410', '513222', '理 县', '513200');INSERT INTO area VALUES ('2411', '513223', '茂 县', '513200');INSERT INTO area VALUES ('2412', '513224', '松潘县', '513200');INSERT INTO area VALUES ('2413', '513225', '九寨沟县', '513200');INSERT INTO area VALUES ('2414', '513226', '金川县', '513200');INSERT INTO area VALUES ('2415', '513227', '小金县', '513200');INSERT INTO area VALUES ('2416', '513228', '黑水县', '513200');INSERT INTO area VALUES ('2417', '513229', '马尔康县', '513200');INSERT INTO area VALUES ('2418', '513230', '壤塘县', '513200');INSERT INTO area VALUES ('2419', '513231', '阿坝县', '513200');INSERT INTO area VALUES ('2420', '513232', '若尔盖县', '513200');INSERT INTO area VALUES ('2421', '513233', '红原县', '513200');INSERT INTO area VALUES ('2422', '513321', '康定县', '513300');INSERT INTO area VALUES ('2423', '513322', '泸定县', '513300');INSERT INTO area VALUES ('2424', '513323', '丹巴县', '513300');INSERT INTO area VALUES ('2425', '513324', '九龙县', '513300');INSERT INTO area VALUES ('2426', '513325', '雅江县', '513300');INSERT INTO area VALUES ('2427', '513326', '道孚县', '513300');INSERT INTO area VALUES ('2428', '513327', '炉霍县', '513300');INSERT INTO area VALUES ('2429', '513328', '甘孜县', '513300');INSERT INTO area VALUES ('2430', '513329', '新龙县', '513300');INSERT INTO area VALUES ('2431', '513330', '德格县', '513300');INSERT INTO area VALUES ('2432', '513331', '白玉县', '513300');INSERT INTO area VALUES ('2433', '513332', '石渠县', '513300');INSERT INTO area VALUES ('2434', '513333', '色达县', '513300');INSERT INTO area VALUES ('2435', '513334', '理塘县', '513300');INSERT INTO area VALUES ('2436', '513335', '巴塘县', '513300');INSERT INTO area VALUES ('2437', '513336', '乡城县', '513300');INSERT INTO area VALUES ('2438', '513337', '稻城县', '513300');INSERT INTO area VALUES ('2439', '513338', '得荣县', '513300');INSERT INTO area VALUES ('2440', '513401', '西昌市', '513400');INSERT INTO area VALUES ('2441', '513422', '木里藏族自治县', '513400');INSERT INTO area VALUES ('2442', '513423', '盐源县', '513400');INSERT INTO area VALUES ('2443', '513424', '德昌县', '513400');INSERT INTO area VALUES ('2444', '513425', '会理县', '513400');INSERT INTO area VALUES ('2445', '513426', '会东县', '513400');INSERT INTO area VALUES ('2446', '513427', '宁南县', '513400');INSERT INTO area VALUES ('2447', '513428', '普格县', '513400');INSERT INTO area VALUES ('2448', '513429', '布拖县', '513400');INSERT INTO area VALUES ('2449', '513430', '金阳县', '513400');INSERT INTO area VALUES ('2450', '513431', '昭觉县', '513400');INSERT INTO area VALUES ('2451', '513432', '喜德县', '513400');INSERT INTO area VALUES ('2452', '513433', '冕宁县', '513400');INSERT INTO area VALUES ('2453', '513434', '越西县', '513400');INSERT INTO area VALUES ('2454', '513435', '甘洛县', '513400');INSERT INTO area VALUES ('2455', '513436', '美姑县', '513400');INSERT INTO area VALUES ('2456', '513437', '雷波县', '513400');INSERT INTO area VALUES ('2457', '520101', '市辖区', '520100');INSERT INTO area VALUES ('2458', '520102', '南明区', '520100');INSERT INTO area VALUES ('2459', '520103', '云岩区', '520100');INSERT INTO area VALUES ('2460', '520111', '花溪区', '520100');INSERT INTO area VALUES ('2461', '520112', '乌当区', '520100');INSERT INTO area VALUES ('2462', '520113', '白云区', '520100');INSERT INTO area VALUES ('2463', '520114', '小河区', '520100');INSERT INTO area VALUES ('2464', '520121', '开阳县', '520100');INSERT INTO area VALUES ('2465', '520122', '息烽县', '520100');INSERT INTO area VALUES ('2466', '520123', '修文县', '520100');INSERT INTO area VALUES ('2467', '520181', '清镇市', '520100');INSERT INTO area VALUES ('2468', '520201', '钟山区', '520200');INSERT INTO area VALUES ('2469', '520203', '六枝特区', '520200');INSERT INTO area VALUES ('2470', '520221', '水城县', '520200');INSERT INTO area VALUES ('2471', '520222', '盘 县', '520200');INSERT INTO area VALUES ('2472', '520301', '市辖区', '520300');INSERT INTO area VALUES ('2473', '520302', '红花岗区', '520300');INSERT INTO area VALUES ('2474', '520303', '汇川区', '520300');INSERT INTO area VALUES ('2475', '520321', '遵义县', '520300');INSERT INTO area VALUES ('2476', '520322', '桐梓县', '520300');INSERT INTO area VALUES ('2477', '520323', '绥阳县', '520300');INSERT INTO area VALUES ('2478', '520324', '正安县', '520300');INSERT INTO area VALUES ('2479', '520325', '道真仡佬族苗族自治县', '520300');INSERT INTO area VALUES ('2480', '520326', '务川仡佬族苗族自治县', '520300');INSERT INTO area VALUES ('2481', '520327', '凤冈县', '520300');INSERT INTO area VALUES ('2482', '520328', '湄潭县', '520300');INSERT INTO area VALUES ('2483', '520329', '余庆县', '520300');INSERT INTO area VALUES ('2484', '520330', '习水县', '520300');INSERT INTO area VALUES ('2485', '520381', '赤水市', '520300');INSERT INTO area VALUES ('2486', '520382', '仁怀市', '520300');INSERT INTO area VALUES ('2487', '520401', '市辖区', '520400');INSERT INTO area VALUES ('2488', '520402', '西秀区', '520400');INSERT INTO area VALUES ('2489', '520421', '平坝县', '520400');INSERT INTO area VALUES ('2490', '520422', '普定县', '520400');INSERT INTO area VALUES ('2491', '520423', '镇宁布依族苗族自治县', '520400');INSERT INTO area VALUES ('2492', '520424', '关岭布依族苗族自治县', '520400');INSERT INTO area VALUES ('2493', '520425', '紫云苗族布依族自治县', '520400');INSERT INTO area VALUES ('2494', '522201', '铜仁市', '522200');INSERT INTO area VALUES ('2495', '522222', '江口县', '522200');INSERT INTO area VALUES ('2496', '522223', '玉屏侗族自治县', '522200');INSERT INTO area VALUES ('2497', '522224', '石阡县', '522200');INSERT INTO area VALUES ('2498', '522225', '思南县', '522200');INSERT INTO area VALUES ('2499', '522226', '印江土家族苗族自治县', '522200');INSERT INTO area VALUES ('2500', '522227', '德江县', '522200');INSERT INTO area VALUES ('2501', '522228', '沿河土家族自治县', '522200');INSERT INTO area VALUES ('2502', '522229', '松桃苗族自治县', '522200');INSERT INTO area VALUES ('2503', '522230', '万山特区', '522200');INSERT INTO area VALUES ('2504', '522301', '兴义市', '522300');INSERT INTO area VALUES ('2505', '522322', '兴仁县', '522300');INSERT INTO area VALUES ('2506', '522323', '普安县', '522300');INSERT INTO area VALUES ('2507', '522324', '晴隆县', '522300');INSERT INTO area VALUES ('2508', '522325', '贞丰县', '522300');INSERT INTO area VALUES ('2509', '522326', '望谟县', '522300');INSERT INTO area VALUES ('2510', '522327', '册亨县', '522300');INSERT INTO area VALUES ('2511', '522328', '安龙县', '522300');INSERT INTO area VALUES ('2512', '522401', '毕节市', '522400');INSERT INTO area VALUES ('2513', '522422', '大方县', '522400');INSERT INTO area VALUES ('2514', '522423', '黔西县', '522400');INSERT INTO area VALUES ('2515', '522424', '金沙县', '522400');INSERT INTO area VALUES ('2516', '522425', '织金县', '522400');INSERT INTO area VALUES ('2517', '522426', '纳雍县', '522400');INSERT INTO area VALUES ('2518', '522427', '威宁彝族回族苗族自治县', '522400');INSERT INTO area VALUES ('2519', '522428', '赫章县', '522400');INSERT INTO area VALUES ('2520', '522601', '凯里市', '522600');INSERT INTO area VALUES ('2521', '522622', '黄平县', '522600');INSERT INTO area VALUES ('2522', '522623', '施秉县', '522600');INSERT INTO area VALUES ('2523', '522624', '三穗县', '522600');INSERT INTO area VALUES ('2524', '522625', '镇远县', '522600');INSERT INTO area VALUES ('2525', '522626', '岑巩县', '522600');INSERT INTO area VALUES ('2526', '522627', '天柱县', '522600');INSERT INTO area VALUES ('2527', '522628', '锦屏县', '522600');INSERT INTO area VALUES ('2528', '522629', '剑河县', '522600');INSERT INTO area VALUES ('2529', '522630', '台江县', '522600');INSERT INTO area VALUES ('2530', '522631', '黎平县', '522600');INSERT INTO area VALUES ('2531', '522632', '榕江县', '522600');INSERT INTO area VALUES ('2532', '522633', '从江县', '522600');INSERT INTO area VALUES ('2533', '522634', '雷山县', '522600');INSERT INTO area VALUES ('2534', '522635', '麻江县', '522600');INSERT INTO area VALUES ('2535', '522636', '丹寨县', '522600');INSERT INTO area VALUES ('2536', '522701', '都匀市', '522700');INSERT INTO area VALUES ('2537', '522702', '福泉市', '522700');INSERT INTO area VALUES ('2538', '522722', '荔波县', '522700');INSERT INTO area VALUES ('2539', '522723', '贵定县', '522700');INSERT INTO area VALUES ('2540', '522725', '瓮安县', '522700');INSERT INTO area VALUES ('2541', '522726', '独山县', '522700');INSERT INTO area VALUES ('2542', '522727', '平塘县', '522700');INSERT INTO area VALUES ('2543', '522728', '罗甸县', '522700');INSERT INTO area VALUES ('2544', '522729', '长顺县', '522700');INSERT INTO area VALUES ('2545', '522730', '龙里县', '522700');INSERT INTO area VALUES ('2546', '522731', '惠水县', '522700');INSERT INTO area VALUES ('2547', '522732', '三都水族自治县', '522700');INSERT INTO area VALUES ('2548', '530101', '市辖区', '530100');INSERT INTO area VALUES ('2549', '530102', '五华区', '530100');INSERT INTO area VALUES ('2550', '530103', '盘龙区', '530100');INSERT INTO area VALUES ('2551', '530111', '官渡区', '530100');INSERT INTO area VALUES ('2552', '530112', '西山区', '530100');INSERT INTO area VALUES ('2553', '530113', '东川区', '530100');INSERT INTO area VALUES ('2554', '530121', '呈贡县', '530100');INSERT INTO area VALUES ('2555', '530122', '晋宁县', '530100');INSERT INTO area VALUES ('2556', '530124', '富民县', '530100');INSERT INTO area VALUES ('2557', '530125', '宜良县', '530100');INSERT INTO area VALUES ('2558', '530126', '石林彝族自治县', '530100');INSERT INTO area VALUES ('2559', '530127', '嵩明县', '530100');INSERT INTO area VALUES ('2560', '530128', '禄劝彝族苗族自治县', '530100');INSERT INTO area VALUES ('2561', '530129', '寻甸回族彝族自治县', '530100');INSERT INTO area VALUES ('2562', '530181', '安宁市', '530100');INSERT INTO area VALUES ('2563', '530301', '市辖区', '530300');INSERT INTO area VALUES ('2564', '530302', '麒麟区', '530300');INSERT INTO area VALUES ('2565', '530321', '马龙县', '530300');INSERT INTO area VALUES ('2566', '530322', '陆良县', '530300');INSERT INTO area VALUES ('2567', '530323', '师宗县', '530300');INSERT INTO area VALUES ('2568', '530324', '罗平县', '530300');INSERT INTO area VALUES ('2569', '530325', '富源县', '530300');INSERT INTO area VALUES ('2570', '530326', '会泽县', '530300');INSERT INTO area VALUES ('2571', '530328', '沾益县', '530300');INSERT INTO area VALUES ('2572', '530381', '宣威市', '530300');INSERT INTO area VALUES ('2573', '530401', '市辖区', '530400');INSERT INTO area VALUES ('2574', '530402', '红塔区', '530400');INSERT INTO area VALUES ('2575', '530421', '江川县', '530400');INSERT INTO area VALUES ('2576', '530422', '澄江县', '530400');INSERT INTO area VALUES ('2577', '530423', '通海县', '530400');INSERT INTO area VALUES ('2578', '530424', '华宁县', '530400');INSERT INTO area VALUES ('2579', '530425', '易门县', '530400');INSERT INTO area VALUES ('2580', '530426', '峨山彝族自治县', '530400');INSERT INTO area VALUES ('2581', '530427', '新平彝族傣族自治县', '530400');INSERT INTO area VALUES ('2582', '530428', '元江哈尼族彝族傣族自治县', '530400');INSERT INTO area VALUES ('2583', '530501', '市辖区', '530500');INSERT INTO area VALUES ('2584', '530502', '隆阳区', '530500');INSERT INTO area VALUES ('2585', '530521', '施甸县', '530500');INSERT INTO area VALUES ('2586', '530522', '腾冲县', '530500');INSERT INTO area VALUES ('2587', '530523', '龙陵县', '530500');INSERT INTO area VALUES ('2588', '530524', '昌宁县', '530500');INSERT INTO area VALUES ('2589', '530601', '市辖区', '530600');INSERT INTO area VALUES ('2590', '530602', '昭阳区', '530600');INSERT INTO area VALUES ('2591', '530621', '鲁甸县', '530600');INSERT INTO area VALUES ('2592', '530622', '巧家县', '530600');INSERT INTO area VALUES ('2593', '530623', '盐津县', '530600');INSERT INTO area VALUES ('2594', '530624', '大关县', '530600');INSERT INTO area VALUES ('2595', '530625', '永善县', '530600');INSERT INTO area VALUES ('2596', '530626', '绥江县', '530600');INSERT INTO area VALUES ('2597', '530627', '镇雄县', '530600');INSERT INTO area VALUES ('2598', '530628', '彝良县', '530600');INSERT INTO area VALUES ('2599', '530629', '威信县', '530600');INSERT INTO area VALUES ('2600', '530630', '水富县', '530600');INSERT INTO area VALUES ('2601', '530701', '市辖区', '530700');INSERT INTO area VALUES ('2602', '530702', '古城区', '530700');INSERT INTO area VALUES ('2603', '530721', '玉龙纳西族自治县', '530700');INSERT INTO area VALUES ('2604', '530722', '永胜县', '530700');INSERT INTO area VALUES ('2605', '530723', '华坪县', '530700');INSERT INTO area VALUES ('2606', '530724', '宁蒗彝族自治县', '530700');INSERT INTO area VALUES ('2607', '530801', '市辖区', '530800');INSERT INTO area VALUES ('2608', '530802', '翠云区', '530800');INSERT INTO area VALUES ('2609', '530821', '普洱哈尼族彝族自治县', '530800');INSERT INTO area VALUES ('2610', '530822', '墨江哈尼族自治县', '530800');INSERT INTO area VALUES ('2611', '530823', '景东彝族自治县', '530800');INSERT INTO area VALUES ('2612', '530824', '景谷傣族彝族自治县', '530800');INSERT INTO area VALUES ('2613', '530825', '镇沅彝族哈尼族拉祜族自治县', '530800');INSERT INTO area VALUES ('2614', '530826', '江城哈尼族彝族自治县', '530800');INSERT INTO area VALUES ('2615', '530827', '孟连傣族拉祜族佤族自治县', '530800');INSERT INTO area VALUES ('2616', '530828', '澜沧拉祜族自治县', '530800');INSERT INTO area VALUES ('2617', '530829', '西盟佤族自治县', '530800');INSERT INTO area VALUES ('2618', '530901', '市辖区', '530900');INSERT INTO area VALUES ('2619', '530902', '临翔区', '530900');INSERT INTO area VALUES ('2620', '530921', '凤庆县', '530900');INSERT INTO area VALUES ('2621', '530922', '云 县', '530900');INSERT INTO area VALUES ('2622', '530923', '永德县', '530900');INSERT INTO area VALUES ('2623', '530924', '镇康县', '530900');INSERT INTO area VALUES ('2624', '530925', '双江拉祜族佤族布朗族傣族自治县', '530900');INSERT INTO area VALUES ('2625', '530926', '耿马傣族佤族自治县', '530900');INSERT INTO area VALUES ('2626', '530927', '沧源佤族自治县', '530900');INSERT INTO area VALUES ('2627', '532301', '楚雄市', '532300');INSERT INTO area VALUES ('2628', '532322', '双柏县', '532300');INSERT INTO area VALUES ('2629', '532323', '牟定县', '532300');INSERT INTO area VALUES ('2630', '532324', '南华县', '532300');INSERT INTO area VALUES ('2631', '532325', '姚安县', '532300');INSERT INTO area VALUES ('2632', '532326', '大姚县', '532300');INSERT INTO area VALUES ('2633', '532327', '永仁县', '532300');INSERT INTO area VALUES ('2634', '532328', '元谋县', '532300');INSERT INTO area VALUES ('2635', '532329', '武定县', '532300');INSERT INTO area VALUES ('2636', '532331', '禄丰县', '532300');INSERT INTO area VALUES ('2637', '532501', '个旧市', '532500');INSERT INTO area VALUES ('2638', '532502', '开远市', '532500');INSERT INTO area VALUES ('2639', '532522', '蒙自县', '532500');INSERT INTO area VALUES ('2640', '532523', '屏边苗族自治县', '532500');INSERT INTO area VALUES ('2641', '532524', '建水县', '532500');INSERT INTO area VALUES ('2642', '532525', '石屏县', '532500');INSERT INTO area VALUES ('2643', '532526', '弥勒县', '532500');INSERT INTO area VALUES ('2644', '532527', '泸西县', '532500');INSERT INTO area VALUES ('2645', '532528', '元阳县', '532500');INSERT INTO area VALUES ('2646', '532529', '红河县', '532500');INSERT INTO area VALUES ('2647', '532530', '金平苗族瑶族傣族自治县', '532500');INSERT INTO area VALUES ('2648', '532531', '绿春县', '532500');INSERT INTO area VALUES ('2649', '532532', '河口瑶族自治县', '532500');INSERT INTO area VALUES ('2650', '532621', '文山县', '532600');INSERT INTO area VALUES ('2651', '532622', '砚山县', '532600');INSERT INTO area VALUES ('2652', '532623', '西畴县', '532600');INSERT INTO area VALUES ('2653', '532624', '麻栗坡县', '532600');INSERT INTO area VALUES ('2654', '532625', '马关县', '532600');INSERT INTO area VALUES ('2655', '532626', '丘北县', '532600');INSERT INTO area VALUES ('2656', '532627', '广南县', '532600');INSERT INTO area VALUES ('2657', '532628', '富宁县', '532600');INSERT INTO area VALUES ('2658', '532801', '景洪市', '532800');INSERT INTO area VALUES ('2659', '532822', '勐海县', '532800');INSERT INTO area VALUES ('2660', '532823', '勐腊县', '532800');INSERT INTO area VALUES ('2661', '532901', '大理市', '532900');INSERT INTO area VALUES ('2662', '532922', '漾濞彝族自治县', '532900');INSERT INTO area VALUES ('2663', '532923', '祥云县', '532900');INSERT INTO area VALUES ('2664', '532924', '宾川县', '532900');INSERT INTO area VALUES ('2665', '532925', '弥渡县', '532900');INSERT INTO area VALUES ('2666', '532926', '南涧彝族自治县', '532900');INSERT INTO area VALUES ('2667', '532927', '巍山彝族回族自治县', '532900');INSERT INTO area VALUES ('2668', '532928', '永平县', '532900');INSERT INTO area VALUES ('2669', '532929', '云龙县', '532900');INSERT INTO area VALUES ('2670', '532930', '洱源县', '532900');INSERT INTO area VALUES ('2671', '532931', '剑川县', '532900');INSERT INTO area VALUES ('2672', '532932', '鹤庆县', '532900');INSERT INTO area VALUES ('2673', '533102', '瑞丽市', '533100');INSERT INTO area VALUES ('2674', '533103', '潞西市', '533100');INSERT INTO area VALUES ('2675', '533122', '梁河县', '533100');INSERT INTO area VALUES ('2676', '533123', '盈江县', '533100');INSERT INTO area VALUES ('2677', '533124', '陇川县', '533100');INSERT INTO area VALUES ('2678', '533321', '泸水县', '533300');INSERT INTO area VALUES ('2679', '533323', '福贡县', '533300');INSERT INTO area VALUES ('2680', '533324', '贡山独龙族怒族自治县', '533300');INSERT INTO area VALUES ('2681', '533325', '兰坪白族普米族自治县', '533300');INSERT INTO area VALUES ('2682', '533421', '香格里拉县', '533400');INSERT INTO area VALUES ('2683', '533422', '德钦县', '533400');INSERT INTO area VALUES ('2684', '533423', '维西傈僳族自治县', '533400');INSERT INTO area VALUES ('2685', '540101', '市辖区', '540100');INSERT INTO area VALUES ('2686', '540102', '城关区', '540100');INSERT INTO area VALUES ('2687', '540121', '林周县', '540100');INSERT INTO area VALUES ('2688', '540122', '当雄县', '540100');INSERT INTO area VALUES ('2689', '540123', '尼木县', '540100');INSERT INTO area VALUES ('2690', '540124', '曲水县', '540100');INSERT INTO area VALUES ('2691', '540125', '堆龙德庆县', '540100');INSERT INTO area VALUES ('2692', '540126', '达孜县', '540100');INSERT INTO area VALUES ('2693', '540127', '墨竹工卡县', '540100');INSERT INTO area VALUES ('2694', '542121', '昌都县', '542100');INSERT INTO area VALUES ('2695', '542122', '江达县', '542100');INSERT INTO area VALUES ('2696', '542123', '贡觉县', '542100');INSERT INTO area VALUES ('2697', '542124', '类乌齐县', '542100');INSERT INTO area VALUES ('2698', '542125', '丁青县', '542100');INSERT INTO area VALUES ('2699', '542126', '察雅县', '542100');INSERT INTO area VALUES ('2700', '542127', '八宿县', '542100');INSERT INTO area VALUES ('2701', '542128', '左贡县', '542100');INSERT INTO area VALUES ('2702', '542129', '芒康县', '542100');INSERT INTO area VALUES ('2703', '542132', '洛隆县', '542100');INSERT INTO area VALUES ('2704', '542133', '边坝县', '542100');INSERT INTO area VALUES ('2705', '542221', '乃东县', '542200');INSERT INTO area VALUES ('2706', '542222', '扎囊县', '542200');INSERT INTO area VALUES ('2707', '542223', '贡嘎县', '542200');INSERT INTO area VALUES ('2708', '542224', '桑日县', '542200');INSERT INTO area VALUES ('2709', '542225', '琼结县', '542200');INSERT INTO area VALUES ('2710', '542226', '曲松县', '542200');INSERT INTO area VALUES ('2711', '542227', '措美县', '542200');INSERT INTO area VALUES ('2712', '542228', '洛扎县', '542200');INSERT INTO area VALUES ('2713', '542229', '加查县', '542200');INSERT INTO area VALUES ('2714', '542231', '隆子县', '542200');INSERT INTO area VALUES ('2715', '542232', '错那县', '542200');INSERT INTO area VALUES ('2716', '542233', '浪卡子县', '542200');INSERT INTO area VALUES ('2717', '542301', '日喀则市', '542300');INSERT INTO area VALUES ('2718', '542322', '南木林县', '542300');INSERT INTO area VALUES ('2719', '542323', '江孜县', '542300');INSERT INTO area VALUES ('2720', '542324', '定日县', '542300');INSERT INTO area VALUES ('2721', '542325', '萨迦县', '542300');INSERT INTO area VALUES ('2722', '542326', '拉孜县', '542300');INSERT INTO area VALUES ('2723', '542327', '昂仁县', '542300');INSERT INTO area VALUES ('2724', '542328', '谢通门县', '542300');INSERT INTO area VALUES ('2725', '542329', '白朗县', '542300');INSERT INTO area VALUES ('2726', '542330', '仁布县', '542300');INSERT INTO area VALUES ('2727', '542331', '康马县', '542300');INSERT INTO area VALUES ('2728', '542332', '定结县', '542300');INSERT INTO area VALUES ('2729', '542333', '仲巴县', '542300');INSERT INTO area VALUES ('2730', '542334', '亚东县', '542300');INSERT INTO area VALUES ('2731', '542335', '吉隆县', '542300');INSERT INTO area VALUES ('2732', '542336', '聂拉木县', '542300');INSERT INTO area VALUES ('2733', '542337', '萨嘎县', '542300');INSERT INTO area VALUES ('2734', '542338', '岗巴县', '542300');INSERT INTO area VALUES ('2735', '542421', '那曲县', '542400');INSERT INTO area VALUES ('2736', '542422', '嘉黎县', '542400');INSERT INTO area VALUES ('2737', '542423', '比如县', '542400');INSERT INTO area VALUES ('2738', '542424', '聂荣县', '542400');INSERT INTO area VALUES ('2739', '542425', '安多县', '542400');INSERT INTO area VALUES ('2740', '542426', '申扎县', '542400');INSERT INTO area VALUES ('2741', '542427', '索 县', '542400');INSERT INTO area VALUES ('2742', '542428', '班戈县', '542400');INSERT INTO area VALUES ('2743', '542429', '巴青县', '542400');INSERT INTO area VALUES ('2744', '542430', '尼玛县', '542400');INSERT INTO area VALUES ('2745', '542521', '普兰县', '542500');INSERT INTO area VALUES ('2746', '542522', '札达县', '542500');INSERT INTO area VALUES ('2747', '542523', '噶尔县', '542500');INSERT INTO area VALUES ('2748', '542524', '日土县', '542500');INSERT INTO area VALUES ('2749', '542525', '革吉县', '542500');INSERT INTO area VALUES ('2750', '542526', '改则县', '542500');INSERT INTO area VALUES ('2751', '542527', '措勤县', '542500');INSERT INTO area VALUES ('2752', '542621', '林芝县', '542600');INSERT INTO area VALUES ('2753', '542622', '工布江达县', '542600');INSERT INTO area VALUES ('2754', '542623', '米林县', '542600');INSERT INTO area VALUES ('2755', '542624', '墨脱县', '542600');INSERT INTO area VALUES ('2756', '542625', '波密县', '542600');INSERT INTO area VALUES ('2757', '542626', '察隅县', '542600');INSERT INTO area VALUES ('2758', '542627', '朗 县', '542600');INSERT INTO area VALUES ('2759', '610101', '市辖区', '610100');INSERT INTO area VALUES ('2760', '610102', '新城区', '610100');INSERT INTO area VALUES ('2761', '610103', '碑林区', '610100');INSERT INTO area VALUES ('2762', '610104', '莲湖区', '610100');INSERT INTO area VALUES ('2763', '610111', '灞桥区', '610100');INSERT INTO area VALUES ('2764', '610112', '未央区', '610100');INSERT INTO area VALUES ('2765', '610113', '雁塔区', '610100');INSERT INTO area VALUES ('2766', '610114', '阎良区', '610100');INSERT INTO area VALUES ('2767', '610115', '临潼区', '610100');INSERT INTO area VALUES ('2768', '610116', '长安区', '610100');INSERT INTO area VALUES ('2769', '610122', '蓝田县', '610100');INSERT INTO area VALUES ('2770', '610124', '周至县', '610100');INSERT INTO area VALUES ('2771', '610125', '户 县', '610100');INSERT INTO area VALUES ('2772', '610126', '高陵县', '610100');INSERT INTO area VALUES ('2773', '610201', '市辖区', '610200');INSERT INTO area VALUES ('2774', '610202', '王益区', '610200');INSERT INTO area VALUES ('2775', '610203', '印台区', '610200');INSERT INTO area VALUES ('2776', '610204', '耀州区', '610200');INSERT INTO area VALUES ('2777', '610222', '宜君县', '610200');INSERT INTO area VALUES ('2778', '610301', '市辖区', '610300');INSERT INTO area VALUES ('2779', '610302', '渭滨区', '610300');INSERT INTO area VALUES ('2780', '610303', '金台区', '610300');INSERT INTO area VALUES ('2781', '610304', '陈仓区', '610300');INSERT INTO area VALUES ('2782', '610322', '凤翔县', '610300');INSERT INTO area VALUES ('2783', '610323', '岐山县', '610300');INSERT INTO area VALUES ('2784', '610324', '扶风县', '610300');INSERT INTO area VALUES ('2785', '610326', '眉 县', '610300');INSERT INTO area VALUES ('2786', '610327', '陇 县', '610300');INSERT INTO area VALUES ('2787', '610328', '千阳县', '610300');INSERT INTO area VALUES ('2788', '610329', '麟游县', '610300');INSERT INTO area VALUES ('2789', '610330', '凤 县', '610300');INSERT INTO area VALUES ('2790', '610331', '太白县', '610300');INSERT INTO area VALUES ('2791', '610401', '市辖区', '610400');INSERT INTO area VALUES ('2792', '610402', '秦都区', '610400');INSERT INTO area VALUES ('2793', '610403', '杨凌区', '610400');INSERT INTO area VALUES ('2794', '610404', '渭城区', '610400');INSERT INTO area VALUES ('2795', '610422', '三原县', '610400');INSERT INTO area VALUES ('2796', '610423', '泾阳县', '610400');INSERT INTO area VALUES ('2797', '610424', '乾 县', '610400');INSERT INTO area VALUES ('2798', '610425', '礼泉县', '610400');INSERT INTO area VALUES ('2799', '610426', '永寿县', '610400');INSERT INTO area VALUES ('2800', '610427', '彬 县', '610400');INSERT INTO area VALUES ('2801', '610428', '长武县', '610400');INSERT INTO area VALUES ('2802', '610429', '旬邑县', '610400');INSERT INTO area VALUES ('2803', '610430', '淳化县', '610400');INSERT INTO area VALUES ('2804', '610431', '文治县', '610400');INSERT INTO area VALUES ('2805', '610481', '兴平市', '610400');INSERT INTO area VALUES ('2806', '610501', '市辖区', '610500');INSERT INTO area VALUES ('2807', '610502', '临渭区', '610500');INSERT INTO area VALUES ('2808', '610521', '华 县', '610500');INSERT INTO area VALUES ('2809', '610522', '潼关县', '610500');INSERT INTO area VALUES ('2810', '610523', '大荔县', '610500');INSERT INTO area VALUES ('2811', '610524', '合阳县', '610500');INSERT INTO area VALUES ('2812', '610525', '澄城县', '610500');INSERT INTO area VALUES ('2813', '610526', '蒲城县', '610500');INSERT INTO area VALUES ('2814', '610527', '白水县', '610500');INSERT INTO area VALUES ('2815', '610528', '富平县', '610500');INSERT INTO area VALUES ('2816', '610581', '韩城市', '610500');INSERT INTO area VALUES ('2817', '610582', '华阴市', '610500');INSERT INTO area VALUES ('2818', '610601', '市辖区', '610600');INSERT INTO area VALUES ('2819', '610602', '宝塔区', '610600');INSERT INTO area VALUES ('2820', '610621', '延长县', '610600');INSERT INTO area VALUES ('2821', '610622', '延川县', '610600');INSERT INTO area VALUES ('2822', '610623', '子长县', '610600');INSERT INTO area VALUES ('2823', '610624', '安塞县', '610600');INSERT INTO area VALUES ('2824', '610625', '志丹县', '610600');INSERT INTO area VALUES ('2825', '610626', '吴旗县', '610600');INSERT INTO area VALUES ('2826', '610627', '甘泉县', '610600');INSERT INTO area VALUES ('2827', '610628', '富 县', '610600');INSERT INTO area VALUES ('2828', '610629', '洛川县', '610600');INSERT INTO area VALUES ('2829', '610630', '宜川县', '610600');INSERT INTO area VALUES ('2830', '610631', '黄龙县', '610600');INSERT INTO area VALUES ('2831', '610632', '黄陵县', '610600');INSERT INTO area VALUES ('2832', '610701', '市辖区', '610700');INSERT INTO area VALUES ('2833', '610702', '汉台区', '610700');INSERT INTO area VALUES ('2834', '610721', '南郑县', '610700');INSERT INTO area VALUES ('2835', '610722', '城固县', '610700');INSERT INTO area VALUES ('2836', '610723', '洋 县', '610700');INSERT INTO area VALUES ('2837', '610724', '西乡县', '610700');INSERT INTO area VALUES ('2838', '610725', '勉 县', '610700');INSERT INTO area VALUES ('2839', '610726', '宁强县', '610700');INSERT INTO area VALUES ('2840', '610727', '略阳县', '610700');INSERT INTO area VALUES ('2841', '610728', '镇巴县', '610700');INSERT INTO area VALUES ('2842', '610729', '留坝县', '610700');INSERT INTO area VALUES ('2843', '610730', '佛坪县', '610700');INSERT INTO area VALUES ('2844', '610801', '市辖区', '610800');INSERT INTO area VALUES ('2845', '610802', '榆阳区', '610800');INSERT INTO area VALUES ('2846', '610821', '神木县', '610800');INSERT INTO area VALUES ('2847', '610822', '府谷县', '610800');INSERT INTO area VALUES ('2848', '610823', '横山县', '610800');INSERT INTO area VALUES ('2849', '610824', '靖边县', '610800');INSERT INTO area VALUES ('2850', '610825', '定边县', '610800');INSERT INTO area VALUES ('2851', '610826', '绥德县', '610800');INSERT INTO area VALUES ('2852', '610827', '米脂县', '610800');INSERT INTO area VALUES ('2853', '610828', '佳 县', '610800');INSERT INTO area VALUES ('2854', '610829', '吴堡县', '610800');INSERT INTO area VALUES ('2855', '610830', '清涧县', '610800');INSERT INTO area VALUES ('2856', '610831', '子洲县', '610800');INSERT INTO area VALUES ('2857', '610901', '市辖区', '610900');INSERT INTO area VALUES ('2858', '610902', '汉滨区', '610900');INSERT INTO area VALUES ('2859', '610921', '汉阴县', '610900');INSERT INTO area VALUES ('2860', '610922', '石泉县', '610900');INSERT INTO area VALUES ('2861', '610923', '宁陕县', '610900');INSERT INTO area VALUES ('2862', '610924', '紫阳县', '610900');INSERT INTO area VALUES ('2863', '610925', '岚皋县', '610900');INSERT INTO area VALUES ('2864', '610926', '平利县', '610900');INSERT INTO area VALUES ('2865', '610927', '镇坪县', '610900');INSERT INTO area VALUES ('2866', '610928', '旬阳县', '610900');INSERT INTO area VALUES ('2867', '610929', '白河县', '610900');INSERT INTO area VALUES ('2868', '611001', '市辖区', '611000');INSERT INTO area VALUES ('2869', '611002', '商州区', '611000');INSERT INTO area VALUES ('2870', '611021', '洛南县', '611000');INSERT INTO area VALUES ('2871', '611022', '丹凤县', '611000');INSERT INTO area VALUES ('2872', '611023', '商南县', '611000');INSERT INTO area VALUES ('2873', '611024', '山阳县', '611000');INSERT INTO area VALUES ('2874', '611025', '镇安县', '611000');INSERT INTO area VALUES ('2875', '611026', '柞水县', '611000');INSERT INTO area VALUES ('2876', '620101', '市辖区', '620100');INSERT INTO area VALUES ('2877', '620102', '城关区', '620100');INSERT INTO area VALUES ('2878', '620103', '七里河区', '620100');INSERT INTO area VALUES ('2879', '620104', '西固区', '620100');INSERT INTO area VALUES ('2880', '620105', '安宁区', '620100');INSERT INTO area VALUES ('2881', '620111', '红古区', '620100');INSERT INTO area VALUES ('2882', '620121', '永登县', '620100');INSERT INTO area VALUES ('2883', '620122', '皋兰县', '620100');INSERT INTO area VALUES ('2884', '620123', '榆中县', '620100');INSERT INTO area VALUES ('2885', '620201', '市辖区', '620200');INSERT INTO area VALUES ('2886', '620301', '市辖区', '620300');INSERT INTO area VALUES ('2887', '620302', '金川区', '620300');INSERT INTO area VALUES ('2888', '620321', '永昌县', '620300');INSERT INTO area VALUES ('2889', '620401', '市辖区', '620400');INSERT INTO area VALUES ('2890', '620402', '白银区', '620400');INSERT INTO area VALUES ('2891', '620403', '平川区', '620400');INSERT INTO area VALUES ('2892', '620421', '靖远县', '620400');INSERT INTO area VALUES ('2893', '620422', '会宁县', '620400');INSERT INTO area VALUES ('2894', '620423', '景泰县', '620400');INSERT INTO area VALUES ('2895', '620501', '市辖区', '620500');INSERT INTO area VALUES ('2896', '620502', '秦城区', '620500');INSERT INTO area VALUES ('2897', '620503', '北道区', '620500');INSERT INTO area VALUES ('2898', '620521', '清水县', '620500');INSERT INTO area VALUES ('2899', '620522', '秦安县', '620500');INSERT INTO area VALUES ('2900', '620523', '甘谷县', '620500');INSERT INTO area VALUES ('2901', '620524', '武山县', '620500');INSERT INTO area VALUES ('2902', '620525', '张家川回族自治县', '620500');INSERT INTO area VALUES ('2903', '620601', '市辖区', '620600');INSERT INTO area VALUES ('2904', '620602', '凉州区', '620600');INSERT INTO area VALUES ('2905', '620621', '民勤县', '620600');INSERT INTO area VALUES ('2906', '620622', '古浪县', '620600');INSERT INTO area VALUES ('2907', '620623', '天祝藏族自治县', '620600');INSERT INTO area VALUES ('2908', '620701', '市辖区', '620700');INSERT INTO area VALUES ('2909', '620702', '甘州区', '620700');INSERT INTO area VALUES ('2910', '620721', '肃南裕固族自治县', '620700');INSERT INTO area VALUES ('2911', '620722', '民乐县', '620700');INSERT INTO area VALUES ('2912', '620723', '临泽县', '620700');INSERT INTO area VALUES ('2913', '620724', '高台县', '620700');INSERT INTO area VALUES ('2914', '620725', '山丹县', '620700');INSERT INTO area VALUES ('2915', '620801', '市辖区', '620800');INSERT INTO area VALUES ('2916', '620802', '崆峒区', '620800');INSERT INTO area VALUES ('2917', '620821', '泾川县', '620800');INSERT INTO area VALUES ('2918', '620822', '灵台县', '620800');INSERT INTO area VALUES ('2919', '620823', '崇信县', '620800');INSERT INTO area VALUES ('2920', '620824', '华亭县', '620800');INSERT INTO area VALUES ('2921', '620825', '庄浪县', '620800');INSERT INTO area VALUES ('2922', '620826', '静宁县', '620800');INSERT INTO area VALUES ('2923', '620901', '市辖区', '620900');INSERT INTO area VALUES ('2924', '620902', '肃州区', '620900');INSERT INTO area VALUES ('2925', '620921', '金塔县', '620900');INSERT INTO area VALUES ('2926', '620922', '安西县', '620900');INSERT INTO area VALUES ('2927', '620923', '肃北蒙古族自治县', '620900');INSERT INTO area VALUES ('2928', '620924', '阿克塞哈萨克族自治县', '620900');INSERT INTO area VALUES ('2929', '620981', '玉门市', '620900');INSERT INTO area VALUES ('2930', '620982', '敦煌市', '620900');INSERT INTO area VALUES ('2931', '621001', '市辖区', '621000');INSERT INTO area VALUES ('2932', '621002', '西峰区', '621000');INSERT INTO area VALUES ('2933', '621021', '庆城县', '621000');INSERT INTO area VALUES ('2934', '621022', '环 县', '621000');INSERT INTO area VALUES ('2935', '621023', '华池县', '621000');INSERT INTO area VALUES ('2936', '621024', '合水县', '621000');INSERT INTO area VALUES ('2937', '621025', '正宁县', '621000');INSERT INTO area VALUES ('2938', '621026', '宁 县', '621000');INSERT INTO area VALUES ('2939', '621027', '镇原县', '621000');INSERT INTO area VALUES ('2940', '621101', '市辖区', '621100');INSERT INTO area VALUES ('2941', '621102', '安定区', '621100');INSERT INTO area VALUES ('2942', '621121', '通渭县', '621100');INSERT INTO area VALUES ('2943', '621122', '陇西县', '621100');INSERT INTO area VALUES ('2944', '621123', '渭源县', '621100');INSERT INTO area VALUES ('2945', '621124', '临洮县', '621100');INSERT INTO area VALUES ('2946', '621125', '漳 县', '621100');INSERT INTO area VALUES ('2947', '621126', '岷 县', '621100');INSERT INTO area VALUES ('2948', '621201', '市辖区', '621200');INSERT INTO area VALUES ('2949', '621202', '武都区', '621200');INSERT INTO area VALUES ('2950', '621221', '成 县', '621200');INSERT INTO area VALUES ('2951', '621222', '文 县', '621200');INSERT INTO area VALUES ('2952', '621223', '宕昌县', '621200');INSERT INTO area VALUES ('2953', '621224', '康 县', '621200');INSERT INTO area VALUES ('2954', '621225', '西和县', '621200');INSERT INTO area VALUES ('2955', '621226', '礼 县', '621200');INSERT INTO area VALUES ('2956', '621227', '徽 县', '621200');INSERT INTO area VALUES ('2957', '621228', '两当县', '621200');INSERT INTO area VALUES ('2958', '622901', '临夏市', '622900');INSERT INTO area VALUES ('2959', '622921', '临夏县', '622900');INSERT INTO area VALUES ('2960', '622922', '康乐县', '622900');INSERT INTO area VALUES ('2961', '622923', '永靖县', '622900');INSERT INTO area VALUES ('2962', '622924', '广河县', '622900');INSERT INTO area VALUES ('2963', '622925', '和政县', '622900');INSERT INTO area VALUES ('2964', '622926', '东乡族自治县', '622900');INSERT INTO area VALUES ('2965', '622927', '积石山保安族东乡族撒拉族自治县', '622900');INSERT INTO area VALUES ('2966', '623001', '单干市', '623000');INSERT INTO area VALUES ('2967', '623021', '临潭县', '623000');INSERT INTO area VALUES ('2968', '623022', '卓尼县', '623000');INSERT INTO area VALUES ('2969', '623023', '舟曲县', '623000');INSERT INTO area VALUES ('2970', '623024', '迭部县', '623000');INSERT INTO area VALUES ('2971', '623025', '玛曲县', '623000');INSERT INTO area VALUES ('2972', '623026', '碌曲县', '623000');INSERT INTO area VALUES ('2973', '623027', '夏河县', '623000');INSERT INTO area VALUES ('2974', '630101', '市辖区', '630100');INSERT INTO area VALUES ('2975', '630102', '城东区', '630100');INSERT INTO area VALUES ('2976', '630103', '城中区', '630100');INSERT INTO area VALUES ('2977', '630104', '城西区', '630100');INSERT INTO area VALUES ('2978', '630105', '城北区', '630100');INSERT INTO area VALUES ('2979', '630121', '大通回族土族自治县', '630100');INSERT INTO area VALUES ('2980', '630122', '湟中县', '630100');INSERT INTO area VALUES ('2981', '630123', '湟源县', '630100');INSERT INTO area VALUES ('2982', '632121', '平安县', '632100');INSERT INTO area VALUES ('2983', '632122', '民和回族土族自治县', '632100');INSERT INTO area VALUES ('2984', '632123', '乐都县', '632100');INSERT INTO area VALUES ('2985', '632126', '互助土族自治县', '632100');INSERT INTO area VALUES ('2986', '632127', '化隆回族自治县', '632100');INSERT INTO area VALUES ('2987', '632128', '循化撒拉族自治县', '632100');INSERT INTO area VALUES ('2988', '632221', '门源回族自治县', '632200');INSERT INTO area VALUES ('2989', '632222', '祁连县', '632200');INSERT INTO area VALUES ('2990', '632223', '海晏县', '632200');INSERT INTO area VALUES ('2991', '632224', '刚察县', '632200');INSERT INTO area VALUES ('2992', '632321', '同仁县', '632300');INSERT INTO area VALUES ('2993', '632322', '尖扎县', '632300');INSERT INTO area VALUES ('2994', '632323', '泽库县', '632300');INSERT INTO area VALUES ('2995', '632324', '河南蒙古族自治县', '632300');INSERT INTO area VALUES ('2996', '632521', '共和县', '632500');INSERT INTO area VALUES ('2997', '632522', '同德县', '632500');INSERT INTO area VALUES ('2998', '632523', '贵德县', '632500');INSERT INTO area VALUES ('2999', '632524', '兴海县', '632500');INSERT INTO area VALUES ('3000', '632525', '贵南县', '632500');INSERT INTO area VALUES ('3001', '632621', '玛沁县', '632600');INSERT INTO area VALUES ('3002', '632622', '班玛县', '632600');INSERT INTO area VALUES ('3003', '632623', '甘德县', '632600');INSERT INTO area VALUES ('3004', '632624', '达日县', '632600');INSERT INTO area VALUES ('3005', '632625', '久治县', '632600');INSERT INTO area VALUES ('3006', '632626', '玛多县', '632600');INSERT INTO area VALUES ('3007', '632721', '玉树县', '632700');INSERT INTO area VALUES ('3008', '632722', '杂多县', '632700');INSERT INTO area VALUES ('3009', '632723', '称多县', '632700');INSERT INTO area VALUES ('3010', '632724', '治多县', '632700');INSERT INTO area VALUES ('3011', '632725', '囊谦县', '632700');INSERT INTO area VALUES ('3012', '632726', '曲麻莱县', '632700');INSERT INTO area VALUES ('3013', '632801', '格尔木市', '632800');INSERT INTO area VALUES ('3014', '632802', '德令哈市', '632800');INSERT INTO area VALUES ('3015', '632821', '乌兰县', '632800');INSERT INTO area VALUES ('3016', '632822', '都兰县', '632800');INSERT INTO area VALUES ('3017', '632823', '天峻县', '632800');INSERT INTO area VALUES ('3018', '640101', '市辖区', '640100');INSERT INTO area VALUES ('3019', '640104', '兴庆区', '640100');INSERT INTO area VALUES ('3020', '640105', '西夏区', '640100');INSERT INTO area VALUES ('3021', '640106', '金凤区', '640100');INSERT INTO area VALUES ('3022', '640121', '永宁县', '640100');INSERT INTO area VALUES ('3023', '640122', '贺兰县', '640100');INSERT INTO area VALUES ('3024', '640181', '灵武市', '640100');INSERT INTO area VALUES ('3025', '640201', '市辖区', '640200');INSERT INTO area VALUES ('3026', '640202', '大武口区', '640200');INSERT INTO area VALUES ('3027', '640205', '惠农区', '640200');INSERT INTO area VALUES ('3028', '640221', '平罗县', '640200');INSERT INTO area VALUES ('3029', '640301', '市辖区', '640300');INSERT INTO area VALUES ('3030', '640302', '利通区', '640300');INSERT INTO area VALUES ('3031', '640323', '盐池县', '640300');INSERT INTO area VALUES ('3032', '640324', '同心县', '640300');INSERT INTO area VALUES ('3033', '640381', '青铜峡市', '640300');INSERT INTO area VALUES ('3034', '640401', '市辖区', '640400');INSERT INTO area VALUES ('3035', '640402', '原州区', '640400');INSERT INTO area VALUES ('3036', '640422', '西吉县', '640400');INSERT INTO area VALUES ('3037', '640423', '隆德县', '640400');INSERT INTO area VALUES ('3038', '640424', '泾源县', '640400');INSERT INTO area VALUES ('3039', '640425', '彭阳县', '640400');INSERT INTO area VALUES ('3040', '640501', '市辖区', '640500');INSERT INTO area VALUES ('3041', '640502', '沙坡头区', '640500');INSERT INTO area VALUES ('3042', '640521', '中宁县', '640500');INSERT INTO area VALUES ('3043', '640522', '海原县', '640500');INSERT INTO area VALUES ('3044', '650101', '市辖区', '650100');INSERT INTO area VALUES ('3045', '650102', '天山区', '650100');INSERT INTO area VALUES ('3046', '650103', '沙依巴克区', '650100');INSERT INTO area VALUES ('3047', '650104', '新市区', '650100');INSERT INTO area VALUES ('3048', '650105', '水磨沟区', '650100');INSERT INTO area VALUES ('3049', '650106', '头屯河区', '650100');INSERT INTO area VALUES ('3050', '650107', '达坂城区', '650100');INSERT INTO area VALUES ('3051', '650108', '东山区', '650100');INSERT INTO area VALUES ('3052', '650121', '乌鲁木齐县', '650100');INSERT INTO area VALUES ('3053', '650201', '市辖区', '650200');INSERT INTO area VALUES ('3054', '650202', '独山子区', '650200');INSERT INTO area VALUES ('3055', '650203', '克拉玛依区', '650200');INSERT INTO area VALUES ('3056', '650204', '白碱滩区', '650200');INSERT INTO area VALUES ('3057', '650205', '乌尔禾区', '650200');INSERT INTO area VALUES ('3058', '652101', '吐鲁番市', '652100');INSERT INTO area VALUES ('3059', '652122', '鄯善县', '652100');INSERT INTO area VALUES ('3060', '652123', '托克逊县', '652100');INSERT INTO area VALUES ('3061', '652201', '哈密市', '652200');INSERT INTO area VALUES ('3062', '652222', '巴里坤哈萨克自治县', '652200');INSERT INTO area VALUES ('3063', '652223', '伊吾县', '652200');INSERT INTO area VALUES ('3064', '652301', '昌吉市', '652300');INSERT INTO area VALUES ('3065', '652302', '阜康市', '652300');INSERT INTO area VALUES ('3066', '652303', '米泉市', '652300');INSERT INTO area VALUES ('3067', '652323', '呼图壁县', '652300');INSERT INTO area VALUES ('3068', '652324', '玛纳斯县', '652300');INSERT INTO area VALUES ('3069', '652325', '奇台县', '652300');INSERT INTO area VALUES ('3070', '652327', '吉木萨尔县', '652300');INSERT INTO area VALUES ('3071', '652328', '木垒哈萨克自治县', '652300');INSERT INTO area VALUES ('3072', '652701', '博乐市', '652700');INSERT INTO area VALUES ('3073', '652722', '精河县', '652700');INSERT INTO area VALUES ('3074', '652723', '温泉县', '652700');INSERT INTO area VALUES ('3075', '652801', '库尔勒市', '652800');INSERT INTO area VALUES ('3076', '652822', '轮台县', '652800');INSERT INTO area VALUES ('3077', '652823', '尉犁县', '652800');INSERT INTO area VALUES ('3078', '652824', '若羌县', '652800');INSERT INTO area VALUES ('3079', '652825', '且末县', '652800');INSERT INTO area VALUES ('3080', '652826', '焉耆回族自治县', '652800');INSERT INTO area VALUES ('3081', '652827', '和静县', '652800');INSERT INTO area VALUES ('3082', '652828', '和硕县', '652800');INSERT INTO area VALUES ('3083', '652829', '博湖县', '652800');INSERT INTO area VALUES ('3084', '652901', '阿克苏市', '652900');INSERT INTO area VALUES ('3085', '652922', '温宿县', '652900');INSERT INTO area VALUES ('3086', '652923', '库车县', '652900');INSERT INTO area VALUES ('3087', '652924', '沙雅县', '652900');INSERT INTO area VALUES ('3088', '652925', '新和县', '652900');INSERT INTO area VALUES ('3089', '652926', '拜城县', '652900');INSERT INTO area VALUES ('3090', '652927', '乌什县', '652900');INSERT INTO area VALUES ('3091', '652928', '阿瓦提县', '652900');INSERT INTO area VALUES ('3092', '652929', '柯坪县', '652900');INSERT INTO area VALUES ('3093', '653001', '阿图什市', '653000');INSERT INTO area VALUES ('3094', '653022', '阿克陶县', '653000');INSERT INTO area VALUES ('3095', '653023', '阿合奇县', '653000');INSERT INTO area VALUES ('3096', '653024', '乌恰县', '653000');INSERT INTO area VALUES ('3097', '653101', '喀什市', '653100');INSERT INTO area VALUES ('3098', '653121', '疏附县', '653100');INSERT INTO area VALUES ('3099', '653122', '疏勒县', '653100');INSERT INTO area VALUES ('3100', '653123', '英吉沙县', '653100');INSERT INTO area VALUES ('3101', '653124', '泽普县', '653100');INSERT INTO area VALUES ('3102', '653125', '莎车县', '653100');INSERT INTO area VALUES ('3103', '653126', '叶城县', '653100');INSERT INTO area VALUES ('3104', '653127', '麦盖提县', '653100');INSERT INTO area VALUES ('3105', '653128', '岳普湖县', '653100');INSERT INTO area VALUES ('3106', '653129', '伽师县', '653100');INSERT INTO area VALUES ('3107', '653130', '巴楚县', '653100');INSERT INTO area VALUES ('3108', '653131', '塔什库尔干塔吉克自治县', '653100');INSERT INTO area VALUES ('3109', '653201', '和田市', '653200');INSERT INTO area VALUES ('3110', '653221', '和田县', '653200');INSERT INTO area VALUES ('3111', '653222', '墨玉县', '653200');INSERT INTO area VALUES ('3112', '653223', '皮山县', '653200');INSERT INTO area VALUES ('3113', '653224', '洛浦县', '653200');INSERT INTO area VALUES ('3114', '653225', '策勒县', '653200');INSERT INTO area VALUES ('3115', '653226', '于田县', '653200');INSERT INTO area VALUES ('3116', '653227', '民丰县', '653200');INSERT INTO area VALUES ('3117', '654002', '伊宁市', '654000');INSERT INTO area VALUES ('3118', '654003', '奎屯市', '654000');INSERT INTO area VALUES ('3119', '654021', '伊宁县', '654000');INSERT INTO area VALUES ('3120', '654022', '察布查尔锡伯自治县', '654000');INSERT INTO area VALUES ('3121', '654023', '霍城县', '654000');INSERT INTO area VALUES ('3122', '654024', '巩留县', '654000');INSERT INTO area VALUES ('3123', '654025', '新源县', '654000');INSERT INTO area VALUES ('3124', '654026', '昭苏县', '654000');INSERT INTO area VALUES ('3125', '654027', '特克斯县', '654000');INSERT INTO area VALUES ('3126', '654028', '尼勒克县', '654000');INSERT INTO area VALUES ('3127', '654201', '塔城市', '654200');INSERT INTO area VALUES ('3128', '654202', '乌苏市', '654200');INSERT INTO area VALUES ('3129', '654221', '额敏县', '654200');INSERT INTO area VALUES ('3130', '654223', '沙湾县', '654200');INSERT INTO area VALUES ('3131', '654224', '托里县', '654200');INSERT INTO area VALUES ('3132', '654225', '裕民县', '654200');INSERT INTO area VALUES ('3133', '654226', '和布克赛尔蒙古自治县', '654200');INSERT INTO area VALUES ('3134', '654301', '阿勒泰市', '654300');INSERT INTO area VALUES ('3135', '654321', '布尔津县', '654300');INSERT INTO area VALUES ('3136', '654322', '富蕴县', '654300');INSERT INTO area VALUES ('3137', '654323', '福海县', '654300');INSERT INTO area VALUES ('3138', '654324', '哈巴河县', '654300');INSERT INTO area VALUES ('3139', '654325', '青河县', '654300');INSERT INTO area VALUES ('3140', '654326', '吉木乃县', '654300');INSERT INTO area VALUES ('3141', '659001', '石河子市', '659000');INSERT INTO area VALUES ('3142', '659002', '阿拉尔市', '659000');INSERT INTO area VALUES ('3143', '659003', '图木舒克市', '659000');INSERT INTO area VALUES ('3144', '659004', '五家渠市', '659000');-- ------------------------------ Table structure for `city`-- ----------------------------DROP TABLE IF EXISTS `city`;CREATE TABLE `city` ( `id` int(11) NOT NULL AUTO_INCREMENT, `cityid` int(11) NOT NULL, `city` varchar(20) NOT NULL, `fatherid` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=346 DEFAULT CHARSET=gbk;-- ------------------------------ Records of city-- ----------------------------INSERT INTO city VALUES ('1', '110100', '北京市', '110000');INSERT INTO city VALUES ('3', '120100', '天津市', '120000');INSERT INTO city VALUES ('5', '130100', '石家庄市', '130000');INSERT INTO city VALUES ('6', '130200', '唐山市', '130000');INSERT INTO city VALUES ('7', '130300', '秦皇岛市', '130000');INSERT INTO city VALUES ('8', '130400', '邯郸市', '130000');INSERT INTO city VALUES ('9', '130500', '邢台市', '130000');INSERT INTO city VALUES ('10', '130600', '保定市', '130000');INSERT INTO city VALUES ('11', '130700', '张家口市', '130000');INSERT INTO city VALUES ('12', '130800', '承德市', '130000');INSERT INTO city VALUES ('13', '130900', '沧州市', '130000');INSERT INTO city VALUES ('14', '131000', '廊坊市', '130000');INSERT INTO city VALUES ('15', '131100', '衡水市', '130000');INSERT INTO city VALUES ('16', '140100', '太原市', '140000');INSERT INTO city VALUES ('17', '140200', '大同市', '140000');INSERT INTO city VALUES ('18', '140300', '阳泉市', '140000');INSERT INTO city VALUES ('19', '140400', '长治市', '140000');INSERT INTO city VALUES ('20', '140500', '晋城市', '140000');INSERT INTO city VALUES ('21', '140600', '朔州市', '140000');INSERT INTO city VALUES ('22', '140700', '晋中市', '140000');INSERT INTO city VALUES ('23', '140800', '运城市', '140000');INSERT INTO city VALUES ('24', '140900', '忻州市', '140000');INSERT INTO city VALUES ('25', '141000', '临汾市', '140000');INSERT INTO city VALUES ('26', '141100', '吕梁市', '140000');INSERT INTO city VALUES ('27', '150100', '呼和浩特市', '150000');INSERT INTO city VALUES ('28', '150200', '包头市', '150000');INSERT INTO city VALUES ('29', '150300', '乌海市', '150000');INSERT INTO city VALUES ('30', '150400', '赤峰市', '150000');INSERT INTO city VALUES ('31', '150500', '通辽市', '150000');INSERT INTO city VALUES ('32', '150600', '鄂尔多斯市', '150000');INSERT INTO city VALUES ('33', '150700', '呼伦贝尔市', '150000');INSERT INTO city VALUES ('34', '150800', '巴彦淖尔市', '150000');INSERT INTO city VALUES ('35', '150900', '乌兰察布市', '150000');INSERT INTO city VALUES ('36', '152200', '兴安盟', '150000');INSERT INTO city VALUES ('37', '152500', '锡林郭勒盟', '150000');INSERT INTO city VALUES ('38', '152900', '阿拉善盟', '150000');INSERT INTO city VALUES ('39', '210100', '沈阳市', '210000');INSERT INTO city VALUES ('40', '210200', '大连市', '210000');INSERT INTO city VALUES ('41', '210300', '鞍山市', '210000');INSERT INTO city VALUES ('42', '210400', '抚顺市', '210000');INSERT INTO city VALUES ('43', '210500', '本溪市', '210000');INSERT INTO city VALUES ('44', '210600', '丹东市', '210000');INSERT INTO city VALUES ('45', '210700', '锦州市', '210000');INSERT INTO city VALUES ('46', '210800', '营口市', '210000');INSERT INTO city VALUES ('47', '210900', '阜新市', '210000');INSERT INTO city VALUES ('48', '211000', '辽阳市', '210000');INSERT INTO city VALUES ('49', '211100', '盘锦市', '210000');INSERT INTO city VALUES ('50', '211200', '铁岭市', '210000');INSERT INTO city VALUES ('51', '211300', '朝阳市', '210000');INSERT INTO city VALUES ('52', '211400', '葫芦岛市', '210000');INSERT INTO city VALUES ('53', '220100', '长春市', '220000');INSERT INTO city VALUES ('54', '220200', '吉林市', '220000');INSERT INTO city VALUES ('55', '220300', '四平市', '220000');INSERT INTO city VALUES ('56', '220400', '辽源市', '220000');INSERT INTO city VALUES ('57', '220500', '通化市', '220000');INSERT INTO city VALUES ('58', '220600', '白山市', '220000');INSERT INTO city VALUES ('59', '220700', '松原市', '220000');INSERT INTO city VALUES ('60', '220800', '白城市', '220000');INSERT INTO city VALUES ('61', '222400', '延边朝鲜族自治州', '220000');INSERT INTO city VALUES ('62', '230100', '哈尔滨市', '230000');INSERT INTO city VALUES ('63', '230200', '齐齐哈尔市', '230000');INSERT INTO city VALUES ('64', '230300', '鸡西市', '230000');INSERT INTO city VALUES ('65', '230400', '鹤岗市', '230000');INSERT INTO city VALUES ('66', '230500', '双鸭山市', '230000');INSERT INTO city VALUES ('67', '230600', '大庆市', '230000');INSERT INTO city VALUES ('68', '230700', '伊春市', '230000');INSERT INTO city VALUES ('69', '230800', '佳木斯市', '230000');INSERT INTO city VALUES ('70', '230900', '七台河市', '230000');INSERT INTO city VALUES ('71', '231000', '牡丹江市', '230000');INSERT INTO city VALUES ('72', '231100', '黑河市', '230000');INSERT INTO city VALUES ('73', '231200', '绥化市', '230000');INSERT INTO city VALUES ('74', '232700', '大兴安岭地区', '230000');INSERT INTO city VALUES ('75', '310100', '上海市', '310000');INSERT INTO city VALUES ('77', '320100', '南京市', '320000');INSERT INTO city VALUES ('78', '320200', '无锡市', '320000');INSERT INTO city VALUES ('79', '320300', '徐州市', '320000');INSERT INTO city VALUES ('80', '320400', '常州市', '320000');INSERT INTO city VALUES ('81', '320500', '苏州市', '320000');INSERT INTO city VALUES ('82', '320600', '南通市', '320000');INSERT INTO city VALUES ('83', '320700', '连云港市', '320000');INSERT INTO city VALUES ('84', '320800', '淮安市', '320000');INSERT INTO city VALUES ('85', '320900', '盐城市', '320000');INSERT INTO city VALUES ('86', '321000', '扬州市', '320000');INSERT INTO city VALUES ('87', '321100', '镇江市', '320000');INSERT INTO city VALUES ('88', '321200', '泰州市', '320000');INSERT INTO city VALUES ('89', '321300', '宿迁市', '320000');INSERT INTO city VALUES ('90', '330100', '杭州市', '330000');INSERT INTO city VALUES ('91', '330200', '宁波市', '330000');INSERT INTO city VALUES ('92', '330300', '温州市', '330000');INSERT INTO city VALUES ('93', '330400', '嘉兴市', '330000');INSERT INTO city VALUES ('94', '330500', '湖州市', '330000');INSERT INTO city VALUES ('95', '330600', '绍兴市', '330000');INSERT INTO city VALUES ('96', '330700', '金华市', '330000');INSERT INTO city VALUES ('97', '330800', '衢州市', '330000');INSERT INTO city VALUES ('98', '330900', '舟山市', '330000');INSERT INTO city VALUES ('99', '331000', '台州市', '330000');INSERT INTO city VALUES ('100', '331100', '丽水市', '330000');INSERT INTO city VALUES ('101', '340100', '合肥市', '340000');INSERT INTO city VALUES ('102', '340200', '芜湖市', '340000');INSERT INTO city VALUES ('103', '340300', '蚌埠市', '340000');INSERT INTO city VALUES ('104', '340400', '淮南市', '340000');INSERT INTO city VALUES ('105', '340500', '马鞍山市', '340000');INSERT INTO city VALUES ('106', '340600', '淮北市', '340000');INSERT INTO city VALUES ('107', '340700', '铜陵市', '340000');INSERT INTO city VALUES ('108', '340800', '安庆市', '340000');INSERT INTO city VALUES ('109', '341000', '黄山市', '340000');INSERT INTO city VALUES ('110', '341100', '滁州市', '340000');INSERT INTO city VALUES ('111', '341200', '阜阳市', '340000');INSERT INTO city VALUES ('112', '341300', '宿州市', '340000');INSERT INTO city VALUES ('113', '341400', '巢湖市', '340000');INSERT INTO city VALUES ('114', '341500', '六安市', '340000');INSERT INTO city VALUES ('115', '341600', '亳州市', '340000');INSERT INTO city VALUES ('116', '341700', '池州市', '340000');INSERT INTO city VALUES ('117', '341800', '宣城市', '340000');INSERT INTO city VALUES ('118', '350100', '福州市', '350000');INSERT INTO city VALUES ('119', '350200', '厦门市', '350000');INSERT INTO city VALUES ('120', '350300', '莆田市', '350000');INSERT INTO city VALUES ('121', '350400', '三明市', '350000');INSERT INTO city VALUES ('122', '350500', '泉州市', '350000');INSERT INTO city VALUES ('123', '350600', '漳州市', '350000');INSERT INTO city VALUES ('124', '350700', '南平市', '350000');INSERT INTO city VALUES ('125', '350800', '龙岩市', '350000');INSERT INTO city VALUES ('126', '350900', '宁德市', '350000');INSERT INTO city VALUES ('127', '360100', '南昌市', '360000');INSERT INTO city VALUES ('128', '360200', '景德镇市', '360000');INSERT INTO city VALUES ('129', '360300', '萍乡市', '360000');INSERT INTO city VALUES ('130', '360400', '九江市', '360000');INSERT INTO city VALUES ('131', '360500', '新余市', '360000');INSERT INTO city VALUES ('132', '360600', '鹰潭市', '360000');INSERT INTO city VALUES ('133', '360700', '赣州市', '360000');INSERT INTO city VALUES ('134', '360800', '吉安市', '360000');INSERT INTO city VALUES ('135', '360900', '宜春市', '360000');INSERT INTO city VALUES ('136', '361000', '抚州市', '360000');INSERT INTO city VALUES ('137', '361100', '上饶市', '360000');INSERT INTO city VALUES ('138', '370100', '济南市', '370000');INSERT INTO city VALUES ('139', '370200', '青岛市', '370000');INSERT INTO city VALUES ('140', '370300', '淄博市', '370000');INSERT INTO city VALUES ('141', '370400', '枣庄市', '370000');INSERT INTO city VALUES ('142', '370500', '东营市', '370000');INSERT INTO city VALUES ('143', '370600', '烟台市', '370000');INSERT INTO city VALUES ('144', '370700', '潍坊市', '370000');INSERT INTO city VALUES ('145', '370800', '济宁市', '370000');INSERT INTO city VALUES ('146', '370900', '泰安市', '370000');INSERT INTO city VALUES ('147', '371000', '威海市', '370000');INSERT INTO city VALUES ('148', '371100', '日照市', '370000');INSERT INTO city VALUES ('149', '371200', '莱芜市', '370000');INSERT INTO city VALUES ('150', '371300', '临沂市', '370000');INSERT INTO city VALUES ('151', '371400', '德州市', '370000');INSERT INTO city VALUES ('152', '371500', '聊城市', '370000');INSERT INTO city VALUES ('153', '371600', '滨州市', '370000');INSERT INTO city VALUES ('154', '371700', '荷泽市', '370000');INSERT INTO city VALUES ('155', '410100', '郑州市', '410000');INSERT INTO city VALUES ('156', '410200', '开封市', '410000');INSERT INTO city VALUES ('157', '410300', '洛阳市', '410000');INSERT INTO city VALUES ('158', '410400', '平顶山市', '410000');INSERT INTO city VALUES ('159', '410500', '安阳市', '410000');INSERT INTO city VALUES ('160', '410600', '鹤壁市', '410000');INSERT INTO city VALUES ('161', '410700', '新乡市', '410000');INSERT INTO city VALUES ('162', '410800', '焦作市', '410000');INSERT INTO city VALUES ('163', '410900', '濮阳市', '410000');INSERT INTO city VALUES ('164', '411000', '许昌市', '410000');INSERT INTO city VALUES ('165', '411100', '漯河市', '410000');INSERT INTO city VALUES ('166', '411200', '三门峡市', '410000');INSERT INTO city VALUES ('167', '411300', '南阳市', '410000');INSERT INTO city VALUES ('168', '411400', '商丘市', '410000');INSERT INTO city VALUES ('169', '411500', '信阳市', '410000');INSERT INTO city VALUES ('170', '411600', '周口市', '410000');INSERT INTO city VALUES ('171', '411700', '驻马店市', '410000');INSERT INTO city VALUES ('172', '420100', '武汉市', '420000');INSERT INTO city VALUES ('173', '420200', '黄石市', '420000');INSERT INTO city VALUES ('174', '420300', '十堰市', '420000');INSERT INTO city VALUES ('175', '420500', '宜昌市', '420000');INSERT INTO city VALUES ('176', '420600', '襄樊市', '420000');INSERT INTO city VALUES ('177', '420700', '鄂州市', '420000');INSERT INTO city VALUES ('178', '420800', '荆门市', '420000');INSERT INTO city VALUES ('179', '420900', '孝感市', '420000');INSERT INTO city VALUES ('180', '421000', '荆州市', '420000');INSERT INTO city VALUES ('181', '421100', '黄冈市', '420000');INSERT INTO city VALUES ('182', '421200', '咸宁市', '420000');INSERT INTO city VALUES ('183', '421300', '随州市', '420000');INSERT INTO city VALUES ('184', '422800', '恩施土家族苗族自治州', '420000');INSERT INTO city VALUES ('185', '429000', '省直辖行政单位', '420000');INSERT INTO city VALUES ('186', '430100', '长沙市', '430000');INSERT INTO city VALUES ('187', '430200', '株洲市', '430000');INSERT INTO city VALUES ('188', '430300', '湘潭市', '430000');INSERT INTO city VALUES ('189', '430400', '衡阳市', '430000');INSERT INTO city VALUES ('190', '430500', '邵阳市', '430000');INSERT INTO city VALUES ('191', '430600', '岳阳市', '430000');INSERT INTO city VALUES ('192', '430700', '常德市', '430000');INSERT INTO city VALUES ('193', '430800', '张家界市', '430000');INSERT INTO city VALUES ('194', '430900', '益阳市', '430000');INSERT INTO city VALUES ('195', '431000', '郴州市', '430000');INSERT INTO city VALUES ('196', '431100', '永州市', '430000');INSERT INTO city VALUES ('197', '431200', '怀化市', '430000');INSERT INTO city VALUES ('198', '431300', '娄底市', '430000');INSERT INTO city VALUES ('199', '433100', '湘西土家族苗族自治州', '430000');INSERT INTO city VALUES ('200', '440100', '广州市', '440000');INSERT INTO city VALUES ('201', '440200', '韶关市', '440000');INSERT INTO city VALUES ('202', '440300', '深圳市', '440000');INSERT INTO city VALUES ('203', '440400', '珠海市', '440000');INSERT INTO city VALUES ('204', '440500', '汕头市', '440000');INSERT INTO city VALUES ('205', '440600', '佛山市', '440000');INSERT INTO city VALUES ('206', '440700', '江门市', '440000');INSERT INTO city VALUES ('207', '440800', '湛江市', '440000');INSERT INTO city VALUES ('208', '440900', '茂名市', '440000');INSERT INTO city VALUES ('209', '441200', '肇庆市', '440000');INSERT INTO city VALUES ('210', '441300', '惠州市', '440000');INSERT INTO city VALUES ('211', '441400', '梅州市', '440000');INSERT INTO city VALUES ('212', '441500', '汕尾市', '440000');INSERT INTO city VALUES ('213', '441600', '河源市', '440000');INSERT INTO city VALUES ('214', '441700', '阳江市', '440000');INSERT INTO city VALUES ('215', '441800', '清远市', '440000');INSERT INTO city VALUES ('216', '441900', '东莞市', '440000');INSERT INTO city VALUES ('217', '442000', '中山市', '440000');INSERT INTO city VALUES ('218', '445100', '潮州市', '440000');INSERT INTO city VALUES ('219', '445200', '揭阳市', '440000');INSERT INTO city VALUES ('220', '445300', '云浮市', '440000');INSERT INTO city VALUES ('221', '450100', '南宁市', '450000');INSERT INTO city VALUES ('222', '450200', '柳州市', '450000');INSERT INTO city VALUES ('223', '450300', '桂林市', '450000');INSERT INTO city VALUES ('224', '450400', '梧州市', '450000');INSERT INTO city VALUES ('225', '450500', '北海市', '450000');INSERT INTO city VALUES ('226', '450600', '防城港市', '450000');INSERT INTO city VALUES ('227', '450700', '钦州市', '450000');INSERT INTO city VALUES ('228', '450800', '贵港市', '450000');INSERT INTO city VALUES ('229', '450900', '玉林市', '450000');INSERT INTO city VALUES ('230', '451000', '百色市', '450000');INSERT INTO city VALUES ('231', '451100', '贺州市', '450000');INSERT INTO city VALUES ('232', '451200', '河池市', '450000');INSERT INTO city VALUES ('233', '451300', '来宾市', '450000');INSERT INTO city VALUES ('234', '451400', '崇左市', '450000');INSERT INTO city VALUES ('235', '460100', '海口市', '460000');INSERT INTO city VALUES ('236', '460200', '三亚市', '460000');INSERT INTO city VALUES ('237', '469000', '省直辖县级行政单位', '460000');INSERT INTO city VALUES ('238', '500100', '重庆市', '500000');INSERT INTO city VALUES ('241', '510100', '成都市', '510000');INSERT INTO city VALUES ('242', '510300', '自贡市', '510000');INSERT INTO city VALUES ('243', '510400', '攀枝花市', '510000');INSERT INTO city VALUES ('244', '510500', '泸州市', '510000');INSERT INTO city VALUES ('245', '510600', '德阳市', '510000');INSERT INTO city VALUES ('246', '510700', '绵阳市', '510000');INSERT INTO city VALUES ('247', '510800', '广元市', '510000');INSERT INTO city VALUES ('248', '510900', '遂宁市', '510000');INSERT INTO city VALUES ('249', '511000', '内江市', '510000');INSERT INTO city VALUES ('250', '511100', '乐山市', '510000');INSERT INTO city VALUES ('251', '511300', '南充市', '510000');INSERT INTO city VALUES ('252', '511400', '眉山市', '510000');INSERT INTO city VALUES ('253', '511500', '宜宾市', '510000');INSERT INTO city VALUES ('254', '511600', '广安市', '510000');INSERT INTO city VALUES ('255', '511700', '达州市', '510000');INSERT INTO city VALUES ('256', '511800', '雅安市', '510000');INSERT INTO city VALUES ('257', '511900', '巴中市', '510000');INSERT INTO city VALUES ('258', '512000', '资阳市', '510000');INSERT INTO city VALUES ('259', '513200', '阿坝藏族羌族自治州', '510000');INSERT INTO city VALUES ('260', '513300', '甘孜藏族自治州', '510000');INSERT INTO city VALUES ('261', '513400', '凉山彝族自治州', '510000');INSERT INTO city VALUES ('262', '520100', '贵阳市', '520000');INSERT INTO city VALUES ('263', '520200', '六盘水市', '520000');INSERT INTO city VALUES ('264', '520300', '遵义市', '520000');INSERT INTO city VALUES ('265', '520400', '安顺市', '520000');INSERT INTO city VALUES ('266', '522200', '铜仁地区', '520000');INSERT INTO city VALUES ('267', '522300', '黔西南布依族苗族自治州', '520000');INSERT INTO city VALUES ('268', '522400', '毕节地区', '520000');INSERT INTO city VALUES ('269', '522600', '黔东南苗族侗族自治州', '520000');INSERT INTO city VALUES ('270', '522700', '黔南布依族苗族自治州', '520000');INSERT INTO city VALUES ('271', '530100', '昆明市', '530000');INSERT INTO city VALUES ('272', '530300', '曲靖市', '530000');INSERT INTO city VALUES ('273', '530400', '玉溪市', '530000');INSERT INTO city VALUES ('274', '530500', '保山市', '530000');INSERT INTO city VALUES ('275', '530600', '昭通市', '530000');INSERT INTO city VALUES ('276', '530700', '丽江市', '530000');INSERT INTO city VALUES ('277', '530800', '思茅市', '530000');INSERT INTO city VALUES ('278', '530900', '临沧市', '530000');INSERT INTO city VALUES ('279', '532300', '楚雄彝族自治州', '530000');INSERT INTO city VALUES ('280', '532500', '红河哈尼族彝族自治州', '530000');INSERT INTO city VALUES ('281', '532600', '文山壮族苗族自治州', '530000');INSERT INTO city VALUES ('282', '532800', '西双版纳傣族自治州', '530000');INSERT INTO city VALUES ('283', '532900', '大理白族自治州', '530000');INSERT INTO city VALUES ('284', '533100', '德宏傣族景颇族自治州', '530000');INSERT INTO city VALUES ('285', '533300', '怒江傈僳族自治州', '530000');INSERT INTO city VALUES ('286', '533400', '迪庆藏族自治州', '530000');INSERT INTO city VALUES ('287', '540100', '拉萨市', '540000');INSERT INTO city VALUES ('288', '542100', '昌都地区', '540000');INSERT INTO city VALUES ('289', '542200', '山南地区', '540000');INSERT INTO city VALUES ('290', '542300', '日喀则地区', '540000');INSERT INTO city VALUES ('291', '542400', '那曲地区', '540000');INSERT INTO city VALUES ('292', '542500', '阿里地区', '540000');INSERT INTO city VALUES ('293', '542600', '林芝地区', '540000');INSERT INTO city VALUES ('294', '610100', '西安市', '610000');INSERT INTO city VALUES ('295', '610200', '铜川市', '610000');INSERT INTO city VALUES ('296', '610300', '宝鸡市', '610000');INSERT INTO city VALUES ('297', '610400', '咸阳市', '610000');INSERT INTO city VALUES ('298', '610500', '渭南市', '610000');INSERT INTO city VALUES ('299', '610600', '延安市', '610000');INSERT INTO city VALUES ('300', '610700', '汉中市', '610000');INSERT INTO city VALUES ('301', '610800', '榆林市', '610000');INSERT INTO city VALUES ('302', '610900', '安康市', '610000');INSERT INTO city VALUES ('303', '611000', '商洛市', '610000');INSERT INTO city VALUES ('304', '620100', '兰州市', '620000');INSERT INTO city VALUES ('305', '620200', '嘉峪关市', '620000');INSERT INTO city VALUES ('306', '620300', '金昌市', '620000');INSERT INTO city VALUES ('307', '620400', '白银市', '620000');INSERT INTO city VALUES ('308', '620500', '天水市', '620000');INSERT INTO city VALUES ('309', '620600', '武威市', '620000');INSERT INTO city VALUES ('310', '620700', '张掖市', '620000');INSERT INTO city VALUES ('311', '620800', '平凉市', '620000');INSERT INTO city VALUES ('312', '620900', '酒泉市', '620000');INSERT INTO city VALUES ('313', '621000', '庆阳市', '620000');INSERT INTO city VALUES ('314', '621100', '定西市', '620000');INSERT INTO city VALUES ('315', '621200', '陇南市', '620000');INSERT INTO city VALUES ('316', '622900', '临夏回族自治州', '620000');INSERT INTO city VALUES ('317', '623000', '甘南藏族自治州', '620000');INSERT INTO city VALUES ('318', '630100', '西宁市', '630000');INSERT INTO city VALUES ('319', '632100', '海东地区', '630000');INSERT INTO city VALUES ('320', '632200', '海北藏族自治州', '630000');INSERT INTO city VALUES ('321', '632300', '黄南藏族自治州', '630000');INSERT INTO city VALUES ('322', '632500', '海南藏族自治州', '630000');INSERT INTO city VALUES ('323', '632600', '果洛藏族自治州', '630000');INSERT INTO city VALUES ('324', '632700', '玉树藏族自治州', '630000');INSERT INTO city VALUES ('325', '632800', '海西蒙古族藏族自治州', '630000');INSERT INTO city VALUES ('326', '640100', '银川市', '640000');INSERT INTO city VALUES ('327', '640200', '石嘴山市', '640000');INSERT INTO city VALUES ('328', '640300', '吴忠市', '640000');INSERT INTO city VALUES ('329', '640400', '固原市', '640000');INSERT INTO city VALUES ('330', '640500', '中卫市', '640000');INSERT INTO city VALUES ('331', '650100', '乌鲁木齐市', '650000');INSERT INTO city VALUES ('332', '650200', '克拉玛依市', '650000');INSERT INTO city VALUES ('333', '652100', '吐鲁番地区', '650000');INSERT INTO city VALUES ('334', '652200', '哈密地区', '650000');INSERT INTO city VALUES ('335', '652300', '昌吉回族自治州', '650000');INSERT INTO city VALUES ('336', '652700', '博尔塔拉蒙古自治州', '650000');INSERT INTO city VALUES ('337', '652800', '巴音郭楞蒙古自治州', '650000');INSERT INTO city VALUES ('338', '652900', '阿克苏地区', '650000');INSERT INTO city VALUES ('339', '653000', '克孜勒苏柯尔克孜自治州', '650000');INSERT INTO city VALUES ('340', '653100', '喀什地区', '650000');INSERT INTO city VALUES ('341', '653200', '和田地区', '650000');INSERT INTO city VALUES ('342', '654000', '伊犁哈萨克自治州', '650000');INSERT INTO city VALUES ('343', '654200', '塔城地区', '650000');INSERT INTO city VALUES ('344', '654300', '阿勒泰地区', '650000');INSERT INTO city VALUES ('345', '659000', '省直辖行政单位', '650000');-- ------------------------------ Table structure for `province`-- ----------------------------DROP TABLE IF EXISTS `province`;CREATE TABLE `province` ( `id` int(11) NOT NULL AUTO_INCREMENT, `provinceid` int(11) NOT NULL, `province` varchar(20) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=35 DEFAULT CHARSET=gbk;-- ------------------------------ Records of province-- ----------------------------INSERT INTO province VALUES ('1', '110000', '北京市');INSERT INTO province VALUES ('2', '120000', '天津市');INSERT INTO province VALUES ('3', '130000', '河北省');INSERT INTO province VALUES ('4', '140000', '山西省');INSERT INTO province VALUES ('5', '150000', '内蒙古自治区');INSERT INTO province VALUES ('6', '210000', '辽宁省');INSERT INTO province VALUES ('7', '220000', '吉林省');INSERT INTO province VALUES ('8', '230000', '黑龙江省');INSERT INTO province VALUES ('9', '310000', '上海市');INSERT INTO province VALUES ('10', '320000', '江苏省');INSERT INTO province VALUES ('11', '330000', '浙江省');INSERT INTO province VALUES ('12', '340000', '安徽省');INSERT INTO province VALUES ('13', '350000', '福建省');INSERT INTO province VALUES ('14', '360000', '江西省');INSERT INTO province VALUES ('15', '370000', '山东省');INSERT INTO province VALUES ('16', '410000', '河南省');INSERT INTO province VALUES ('17', '420000', '湖北省');INSERT INTO province VALUES ('18', '430000', '湖南省');INSERT INTO province VALUES ('19', '440000', '广东省');INSERT INTO province VALUES ('20', '450000', '广西壮族自治区');INSERT INTO province VALUES ('21', '460000', '海南省');INSERT INTO province VALUES ('22', '500000', '重庆市');INSERT INTO province VALUES ('23', '510000', '四川省');INSERT INTO province VALUES ('24', '520000', '贵州省');INSERT INTO province VALUES ('25', '530000', '云南省');INSERT INTO province VALUES ('26', '540000', '西藏自治区');INSERT INTO province VALUES ('27', '610000', '陕西省');INSERT INTO province VALUES ('28', '620000', '甘肃省');INSERT INTO province VALUES ('29', '630000', '青海省');INSERT INTO province VALUES ('30', '640000', '宁夏回族自治区');INSERT INTO province VALUES ('31', '650000', '新疆维吾尔自治区');INSERT INTO province VALUES ('32', '710000', '台湾省');INSERT INTO province VALUES ('33', '810000', '香港特别行政区');INSERT INTO province VALUES ('34', '820000', '澳门特别行政区');jQuery代码:jquery.js/*! * jQuery JavaScript Library v1.3.2 * http://jquery.com/ * * Copyright (c) 2009 John Resig * Dual licensed under the MIT and GPL licenses. * http://docs.jquery.com/License * * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) * Revision: 6246 */(function(){var // Will speed up references to window, and allows munging its name. window = this, // Will speed up references to undefined, and allows munging its name. undefined, // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$, jQuery = window.jQuery = window.$ = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context ); }, // A simple way to check for HTML strings or ID strings // (both of which we optimize for) quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/, // Is it a simple selector isSimple = /^.[^:#\[\.,]*$/;jQuery.fn = jQuery.prototype = { init: function( selector, context ) { // Make sure that a selection was provided selector = selector || document; // Handle $(DOMElement) if ( selector.nodeType ) { this[0] = selector; this.length = 1; this.context = selector; return this; } // Handle HTML strings if ( typeof selector === "string" ) { // Are we dealing with HTML string or an ID? var match = quickExpr.exec( selector ); // Verify a match, and that no context was specified for #id if ( match && (match[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( match[1] ) selector = jQuery.clean( [ match[1] ], context ); // HANDLE: $("#id") else { var elem = document.getElementById( match[3] ); // Handle the case where IE and Opera return items // by name instead of ID if ( elem && elem.id != match[3] ) return jQuery().find( selector ); // Otherwise, we inject the element directly into the jQuery object var ret = jQuery( elem || [] ); ret.context = document; ret.selector = selector; return ret; } // HANDLE: $(expr, [context]) // (which is just equivalent to: $(content).find(expr) } else return jQuery( context ).find( selector ); // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) return jQuery( document ).ready( selector ); // Make sure that old selector state is passed along if ( selector.selector && selector.context ) { this.selector = selector.selector; this.context = selector.context; } return this.setArray(jQuery.isArray( selector ) ? selector : jQuery.makeArray(selector)); }, // Start with an empty selector selector: "", // The current version of jQuery being used jquery: "1.3.2", // The number of elements contained in the matched element set size: function() { return this.length; }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num === undefined ? // Return a 'clean' array Array.prototype.slice.call( this ) : // Return just the object this[ num ]; }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems, name, selector ) { // Build a new jQuery matched element set var ret = jQuery( elems ); // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; if ( name === "find" ) ret.selector = this.selector + (this.selector ? " " : "") + selector; else if ( name ) ret.selector = this.selector + "." + name + "(" + selector + ")"; // Return the newly-formed element set return ret; }, // Force the current matched set of elements to become // the specified array of elements (destroying the stack in the process) // You should use pushStack() in order to do this, but maintain the stack setArray: function( elems ) { // Resetting the length to 0, then using the native Array push // is a super-fast way to populate an object with array-like properties this.length = 0; Array.prototype.push.apply( this, elems ); return this; }, // Execute a callback for every element in the matched set. // (You can seed the arguments with an array of args, but this is // only used internally.) each: function( callback, args ) { return jQuery.each( this, callback, args ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem && elem.jquery ? elem[0] : elem , this ); }, attr: function( name, value, type ) { var options = name; // Look for the case where we're accessing a style value if ( typeof name === "string" ) if ( value === undefined ) return this[0] && jQuery[ type || "attr" ]( this[0], name ); else { options = {}; options[ name ] = value; } // Check to see if we're setting style values return this.each(function(i){ // Set all the styles for ( name in options ) jQuery.attr( type ? this.style : this, name, jQuery.prop( this, options[ name ], type, i, name ) ); }); }, css: function( key, value ) { // ignore negative width and height values if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) value = undefined; return this.attr( key, value, "curCSS" ); }, text: function( text ) { if ( typeof text !== "object" && text != null ) return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); var ret = ""; jQuery.each( text || this, function(){ jQuery.each( this.childNodes, function(){ if ( this.nodeType != 8 ) ret += this.nodeType != 1 ? this.nodeValue : jQuery.fn.text( [ this ] ); }); }); return ret; }, wrapAll: function( html ) { if ( this[0] ) { // The elements to wrap the target around var wrap = jQuery( html, this[0].ownerDocument ).clone(); if ( this[0].parentNode ) wrap.insertBefore( this[0] ); wrap.map(function(){ var elem = this; while ( elem.firstChild ) elem = elem.firstChild; return elem; }).append(this); } return this; }, wrapInner: function( html ) { return this.each(function(){ jQuery( this ).contents().wrapAll( html ); }); }, wrap: function( html ) { return this.each(function(){ jQuery( this ).wrapAll( html ); }); }, append: function() { return this.domManip(arguments, true, function(elem){ if (this.nodeType == 1) this.appendChild( elem ); }); }, prepend: function() { return this.domManip(arguments, true, function(elem){ if (this.nodeType == 1) this.insertBefore( elem, this.firstChild ); }); }, before: function() { return this.domManip(arguments, false, function(elem){ this.parentNode.insertBefore( elem, this ); }); }, after: function() { return this.domManip(arguments, false, function(elem){ this.parentNode.insertBefore( elem, this.nextSibling ); }); }, end: function() { return this.prevObject || jQuery( [] ); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: [].push, sort: [].sort, splice: [].splice, find: function( selector ) { if ( this.length === 1 ) { var ret = this.pushStack( [], "find", selector ); ret.length = 0; jQuery.find( selector, this[0], ret ); return ret; } else { return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){ return jQuery.find( selector, elem ); })), "find", selector ); } }, clone: function( events ) { // Do the clone var ret = this.map(function(){ if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) { // IE copies events bound via attachEvent when // using cloneNode. Calling detachEvent on the // clone will also remove the events from the orignal // In order to get around this, we use innerHTML. // Unfortunately, this means some modifications to // attributes in IE that are actually only stored // as properties will not be copied (such as the // the name attribute on an input). var html = this.outerHTML; if ( !html ) { var div = this.ownerDocument.createElement("div"); div.appendChild( this.cloneNode(true) ); html = div.innerHTML; } return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0]; } else return this.cloneNode(true); }); // Copy the events from the original to the clone if ( events === true ) { var orig = this.find("*").andSelf(), i = 0; ret.find("*").andSelf().each(function(){ if ( this.nodeName !== orig[i].nodeName ) return; var events = jQuery.data( orig[i], "events" ); for ( var type in events ) { for ( var handler in events[ type ] ) { jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); } } i++; }); } // Return the cloned set return ret; }, filter: function( selector ) { return this.pushStack( jQuery.isFunction( selector ) && jQuery.grep(this, function(elem, i){ return selector.call( elem, i ); }) || jQuery.multiFilter( selector, jQuery.grep(this, function(elem){ return elem.nodeType === 1; }) ), "filter", selector ); }, closest: function( selector ) { var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null, closer = 0; return this.map(function(){ var cur = this; while ( cur && cur.ownerDocument ) { if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) { jQuery.data(cur, "closest", closer); return cur; } cur = cur.parentNode; closer++; } }); }, not: function( selector ) { if ( typeof selector === "string" ) // test special case where just one selector is passed in if ( isSimple.test( selector ) ) return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector ); else selector = jQuery.multiFilter( selector, this ); var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; return this.filter(function() { return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; }); }, add: function( selector ) { return this.pushStack( jQuery.unique( jQuery.merge( this.get(), typeof selector === "string" ? jQuery( selector ) : jQuery.makeArray( selector ) ))); }, is: function( selector ) { return !!selector && jQuery.multiFilter( selector, this ).length > 0; }, hasClass: function( selector ) { return !!selector && this.is( "." + selector ); }, val: function( value ) { if ( value === undefined ) { var elem = this[0]; if ( elem ) { if( jQuery.nodeName( elem, 'option' ) ) return (elem.attributes.value || {}).specified ? elem.value : elem.text; // We need to handle select boxes special if ( jQuery.nodeName( elem, "select" ) ) { var index = elem.selectedIndex, values = [], options = elem.options, one = elem.type == "select-one"; // Nothing was selected if ( index < 0 ) return null; // Loop through all the selected options for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { var option = options[ i ]; if ( option.selected ) { // Get the specifc value for the option value = jQuery(option).val(); // We don't need an array for one selects if ( one ) return value; // Multi-Selects return an array values.push( value ); } } return values; } // Everything else, we just grab the value return (elem.value || "").replace(/\r/g, ""); } return undefined; } if ( typeof value === "number" ) value += ''; return this.each(function(){ if ( this.nodeType != 1 ) return; if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) ) this.checked = (jQuery.inArray(this.value, value) >= 0 || jQuery.inArray(this.name, value) >= 0); else if ( jQuery.nodeName( this, "select" ) ) { var values = jQuery.makeArray(value); jQuery( "option", this ).each(function(){ this.selected = (jQuery.inArray( this.value, values ) >= 0 || jQuery.inArray( this.text, values ) >= 0); }); if ( !values.length ) this.selectedIndex = -1; } else this.value = value; }); }, html: function( value ) { return value === undefined ? (this[0] ? this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : null) : this.empty().append( value ); }, replaceWith: function( value ) { return this.after( value ).remove(); }, eq: function( i ) { return this.slice( i, +i + 1 ); }, slice: function() { return this.pushStack( Array.prototype.slice.apply( this, arguments ), "slice", Array.prototype.slice.call(arguments).join(",") ); }, map: function( callback ) { return this.pushStack( jQuery.map(this, function(elem, i){ return callback.call( elem, i, elem ); })); }, andSelf: function() { return this.add( this.prevObject ); }, domManip: function( args, table, callback ) { if ( this[0] ) { var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(), scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ), first = fragment.firstChild; if ( first ) for ( var i = 0, l = this.length; i < l; i++ ) callback.call( root(this[i], first), this.length > 1 || i > 0 ? fragment.cloneNode(true) : fragment ); if ( scripts ) jQuery.each( scripts, evalScript ); } return this; function root( elem, cur ) { return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? (elem.getElementsByTagName("tbody")[0] || elem.appendChild(elem.ownerDocument.createElement("tbody"))) : elem; } }};// Give the init function the jQuery prototype for later instantiationjQuery.fn.init.prototype = jQuery.fn;function evalScript( i, elem ) { if ( elem.src ) jQuery.ajax({ url: elem.src, async: false, dataType: "script" }); else jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); if ( elem.parentNode ) elem.parentNode.removeChild( elem );}function now(){ return +new Date;}jQuery.extend = jQuery.fn.extend = function() { // copy reference to target object var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) target = {}; // extend jQuery itself if only one argument is passed if ( length == i ) { target = this; --i; } for ( ; i < length; i++ ) // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) // Extend the base object for ( var name in options ) { var src = target[ name ], copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) continue; // Recurse if we're merging object values if ( deep && copy && typeof copy === "object" && !copy.nodeType ) target[ name ] = jQuery.extend( deep, // Never move original objects, clone them src || ( copy.length != null ? [ ] : { } ) , copy ); // Don't bring in undefined values else if ( copy !== undefined ) target[ name ] = copy; } // Return the modified object return target;};// exclude the following css properties to add pxvar exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, // cache defaultView defaultView = document.defaultView || {}, toString = Object.prototype.toString;jQuery.extend({ noConflict: function( deep ) { window.$ = _$; if ( deep ) window.jQuery = _jQuery; return jQuery; }, // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return toString.call(obj) === "[object Function]"; }, isArray: function( obj ) { return toString.call(obj) === "[object Array]"; }, // check if an element is in a (or is an) XML document isXMLDoc: function( elem ) { return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument ); }, // Evalulates a script in a global context globalEval: function( data ) { if ( data && /\S/.test(data) ) { // Inspired by code by Andrea Giammarchi // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html var head = document.getElementsByTagName("head")[0] || document.documentElement, script = document.createElement("script"); script.type = "text/javascript"; if ( jQuery.support.scriptEval ) script.appendChild( document.createTextNode( data ) ); else script.text = data; // Use insertBefore instead of appendChild to circumvent an IE6 bug. // This arises when a base node is used (#2709). head.insertBefore( script, head.firstChild ); head.removeChild( script ); } }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); }, // args is for internal usage only each: function( object, callback, args ) { var name, i = 0, length = object.length; if ( args ) { if ( length === undefined ) { for ( name in object ) if ( callback.apply( object[ name ], args ) === false ) break; } else for ( ; i < length; ) if ( callback.apply( object[ i++ ], args ) === false ) break; // A special, fast, case for the most common use of each } else { if ( length === undefined ) { for ( name in object ) if ( callback.call( object[ name ], name, object[ name ] ) === false ) break; } else for ( var value = object[0]; i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} } return object; }, prop: function( elem, value, type, i, name ) { // Handle executable functions if ( jQuery.isFunction( value ) ) value = value.call( elem, i ); // Handle passing in a number to a CSS property return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ? value + "px" : value; }, className: { // internal only, use addClass("class") add: function( elem, classNames ) { jQuery.each((classNames || "").split(/\s+/), function(i, className){ if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) elem.className += (elem.className ? " " : "") + className; }); }, // internal only, use removeClass("class") remove: function( elem, classNames ) { if (elem.nodeType == 1) elem.className = classNames !== undefined ? jQuery.grep(elem.className.split(/\s+/), function(className){ return !jQuery.className.has( classNames, className ); }).join(" ") : ""; }, // internal only, use hasClass("class") has: function( elem, className ) { return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; } }, // A method for quickly swapping in/out CSS properties to get correct calculations swap: function( elem, options, callback ) { var old = {}; // Remember the old values, and insert the new ones for ( var name in options ) { old[ name ] = elem.style[ name ]; elem.style[ name ] = options[ name ]; } callback.call( elem ); // Revert the old values for ( var name in options ) elem.style[ name ] = old[ name ]; }, css: function( elem, name, force, extra ) { if ( name == "width" || name == "height" ) { var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; function getWH() { val = name == "width" ? elem.offsetWidth : elem.offsetHeight; if ( extra === "border" ) return; jQuery.each( which, function() { if ( !extra ) val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; if ( extra === "margin" ) val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0; else val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; }); } if ( elem.offsetWidth !== 0 ) getWH(); else jQuery.swap( elem, props, getWH ); return Math.max(0, Math.round(val)); } return jQuery.curCSS( elem, name, force ); }, curCSS: function( elem, name, force ) { var ret, style = elem.style; // We need to handle opacity special in IE if ( name == "opacity" && !jQuery.support.opacity ) { ret = jQuery.attr( style, "opacity" ); return ret == "" ? "1" : ret; } // Make sure we're using the right name for getting the float value if ( name.match( /float/i ) ) name = styleFloat; if ( !force && style && style[ name ] ) ret = style[ name ]; else if ( defaultView.getComputedStyle ) { // Only "float" is needed here if ( name.match( /float/i ) ) name = "float"; name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); var computedStyle = defaultView.getComputedStyle( elem, null ); if ( computedStyle ) ret = computedStyle.getPropertyValue( name ); // We should always get a number back from opacity if ( name == "opacity" && ret == "" ) ret = "1"; } else if ( elem.currentStyle ) { var camelCase = name.replace(/\-(\w)/g, function(all, letter){ return letter.toUpperCase(); }); ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; // From the awesome hack by Dean Edwards // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 // If we're not dealing with a regular pixel number // but a number that has a weird ending, we need to convert it to pixels if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { // Remember the original values var left = style.left, rsLeft = elem.runtimeStyle.left; // Put in the new values to get a computed value out elem.runtimeStyle.left = elem.currentStyle.left; style.left = ret || 0; ret = style.pixelLeft + "px"; // Revert the changed values style.left = left; elem.runtimeStyle.left = rsLeft; } } return ret; }, clean: function( elems, context, fragment ) { context = context || document; // !context.createElement fails in IE with an error but returns typeof 'object' if ( typeof context.createElement === "undefined" ) context = context.ownerDocument || context[0] && context[0].ownerDocument || document; // If a single string is passed in and it's a single tag // just do a createElement and skip the rest if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) { var match = /^<(\w+)\s*\/?>$/.exec(elems[0]); if ( match ) return [ context.createElement( match[1] ) ]; } var ret = [], scripts = [], div = context.createElement("div"); jQuery.each(elems, function(i, elem){ if ( typeof elem === "number" ) elem += ''; if ( !elem ) return; // Convert html string into DOM nodes if ( typeof elem === "string" ) { // Fix "XHTML"-style tags in all browsers elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? all : front + "></" + tag + ">"; }); // Trim whitespace, otherwise indexOf won't work as expected var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase(); var wrap = // option or optgroup !tags.indexOf("<opt") && [ 1, "<select multiple='multiple'>", "</select>" ] || !tags.indexOf("<leg") && [ 1, "<fieldset>", "</fieldset>" ] || tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && [ 1, "<table>", "</table>" ] || !tags.indexOf("<tr") && [ 2, "<table><tbody>", "</tbody></table>" ] || // <thead> matched above (!tags.indexOf("<td") || !tags.indexOf("<th")) && [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] || !tags.indexOf("<col") && [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] || // IE can't serialize <link> and <script> tags normally !jQuery.support.htmlSerialize && [ 1, "div<div>", "</div>" ] || [ 0, "", "" ]; // Go to html and back, then peel off extra wrappers div.innerHTML = wrap[1] + elem + wrap[2]; // Move to the right depth while ( wrap[0]-- ) div = div.lastChild; // Remove IE's autoinserted <tbody> from table fragments if ( !jQuery.support.tbody ) { // String was a <table>, *may* have spurious <tbody> var hasBody = /<tbody/i.test(elem), tbody = !tags.indexOf("<table") && !hasBody ? div.firstChild && div.firstChild.childNodes : // String was a bare <thead> or <tfoot> wrap[1] == "<table>" && !hasBody ? div.childNodes : []; for ( var j = tbody.length - 1; j >= 0 ; --j ) if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) tbody[ j ].parentNode.removeChild( tbody[ j ] ); } // IE completely kills leading whitespace when innerHTML is used if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) ) div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild ); elem = jQuery.makeArray( div.childNodes ); } if ( elem.nodeType ) ret.push( elem ); else ret = jQuery.merge( ret, elem ); }); if ( fragment ) { for ( var i = 0; ret[i]; i++ ) { if ( jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); } else { if ( ret[i].nodeType === 1 ) ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) ); fragment.appendChild( ret[i] ); } } return scripts; } return ret; }, attr: function( elem, name, value ) { // don't set attributes on text and comment nodes if (!elem || elem.nodeType == 3 || elem.nodeType == 8) return undefined; var notxml = !jQuery.isXMLDoc( elem ), // Whether we are setting (or getting) set = value !== undefined; // Try to normalize/fix the name name = notxml && jQuery.props[ name ] || name; // Only do all the following if this is a node (faster for style) // IE elem.getAttribute passes even for style if ( elem.tagName ) { // These attributes require special treatment var special = /href|src|style/.test( name ); // Safari mis-reports the default selected property of a hidden option // Accessing the parent's selectedIndex property fixes it if ( name == "selected" && elem.parentNode ) elem.parentNode.selectedIndex; // If applicable, access the attribute via the DOM 0 way if ( name in elem && notxml && !special ) { if ( set ){ // We can't allow the type property to be changed (since it causes problems in IE) if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode ) throw "type property can't be changed"; elem[ name ] = value; } // browsers index elements by id/name on forms, give priority to attributes. if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) return elem.getAttributeNode( name ).nodeValue; // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ if ( name == "tabIndex" ) { var attributeNode = elem.getAttributeNode( "tabIndex" ); return attributeNode && attributeNode.specified ? attributeNode.value : elem.nodeName.match(/(button|input|object|select|textarea)/i) ? 0 : elem.nodeName.match(/^(a|area)$/i) && elem.href ? 0 : undefined; } return elem[ name ]; } if ( !jQuery.support.style && notxml && name == "style" ) return jQuery.attr( elem.style, "cssText", value ); if ( set ) // convert the value to a string (all browsers do this but IE) see #1070 elem.setAttribute( name, "" + value ); var attr = !jQuery.support.hrefNormalized && notxml && special // Some attributes require a special call on IE ? elem.getAttribute( name, 2 ) : elem.getAttribute( name ); // Non-existent attributes return null, we normalize to undefined return attr === null ? undefined : attr; } // elem is actually elem.style ... set the style // IE uses filters for opacity if ( !jQuery.support.opacity && name == "opacity" ) { if ( set ) { // IE has trouble with opacity if it does not have layout // Force it by setting the zoom level elem.zoom = 1; // Set the alpha filter to set the opacity elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) + (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")"); } return elem.filter && elem.filter.indexOf("opacity=") >= 0 ? (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '': ""; } name = name.replace(/-([a-z])/ig, function(all, letter){ return letter.toUpperCase(); }); if ( set ) elem[ name ] = value; return elem[ name ]; }, trim: function( text ) { return (text || "").replace( /^\s+|\s+$/g, "" ); }, makeArray: function( array ) { var ret = []; if( array != null ){ var i = array.length; // The window, strings (and functions) also have 'length' if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval ) ret[0] = array; else while( i ) ret[--i] = array[i]; } return ret; }, inArray: function( elem, array ) { for ( var i = 0, length = array.length; i < length; i++ ) // Use === because on IE, window == document if ( array[ i ] === elem ) return i; return -1; }, merge: function( first, second ) { // We have to loop this way because IE & Opera overwrite the length // expando of getElementsByTagName var i = 0, elem, pos = first.length; // Also, we need to make sure that the correct elements are being returned // (IE returns comment nodes in a '*' query) if ( !jQuery.support.getAll ) { while ( (elem = second[ i++ ]) != null ) if ( elem.nodeType != 8 ) first[ pos++ ] = elem; } else while ( (elem = second[ i++ ]) != null ) first[ pos++ ] = elem; return first; }, unique: function( array ) { var ret = [], done = {}; try { for ( var i = 0, length = array.length; i < length; i++ ) { var id = jQuery.data( array[ i ] ); if ( !done[ id ] ) { done[ id ] = true; ret.push( array[ i ] ); } } } catch( e ) { ret = array; } return ret; }, grep: function( elems, callback, inv ) { var ret = []; // Go through the array, only saving the items // that pass the validator function for ( var i = 0, length = elems.length; i < length; i++ ) if ( !inv != !callback( elems[ i ], i ) ) ret.push( elems[ i ] ); return ret; }, map: function( elems, callback ) { var ret = []; // Go through the array, translating each of the items to their // new value (or values). for ( var i = 0, length = elems.length; i < length; i++ ) { var value = callback( elems[ i ], i ); if ( value != null ) ret[ ret.length ] = value; } return ret.concat.apply( [], ret ); }});// Use of jQuery.browser is deprecated.// It's included for backwards compatibility and plugins,// although they should work to migrate away.var userAgent = navigator.userAgent.toLowerCase();// Figure out what browser is being usedjQuery.browser = { version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1], safari: /webkit/.test( userAgent ), opera: /opera/.test( userAgent ), msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ), mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )};jQuery.each({ parent: function(elem){return elem.parentNode;}, parents: function(elem){return jQuery.dir(elem,"parentNode");}, next: function(elem){return jQuery.nth(elem,2,"nextSibling");}, prev: function(elem){return jQuery.nth(elem,2,"previousSibling");}, nextAll: function(elem){return jQuery.dir(elem,"nextSibling");}, prevAll: function(elem){return jQuery.dir(elem,"previousSibling");}, siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);}, children: function(elem){return jQuery.sibling(elem.firstChild);}, contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}}, function(name, fn){ jQuery.fn[ name ] = function( selector ) { var ret = jQuery.map( this, fn ); if ( selector && typeof selector == "string" ) ret = jQuery.multiFilter( selector, ret ); return this.pushStack( jQuery.unique( ret ), name, selector ); };});jQuery.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith"}, function(name, original){ jQuery.fn[ name ] = function( selector ) { var ret = [], insert = jQuery( selector ); for ( var i = 0, l = insert.length; i < l; i++ ) { var elems = (i > 0 ? this.clone(true) : this).get(); jQuery.fn[ original ].apply( jQuery(insert[i]), elems ); ret = ret.concat( elems ); } return this.pushStack( ret, name, selector ); };});jQuery.each({ removeAttr: function( name ) { jQuery.attr( this, name, "" ); if (this.nodeType == 1) this.removeAttribute( name ); }, addClass: function( classNames ) { jQuery.className.add( this, classNames ); }, removeClass: function( classNames ) { jQuery.className.remove( this, classNames ); }, toggleClass: function( classNames, state ) { if( typeof state !== "boolean" ) state = !jQuery.className.has( this, classNames ); jQuery.className[ state ? "add" : "remove" ]( this, classNames ); }, remove: function( selector ) { if ( !selector || jQuery.filter( selector, [ this ] ).length ) { // Prevent memory leaks jQuery( "*", this ).add([this]).each(function(){ jQuery.event.remove(this); jQuery.removeData(this); }); if (this.parentNode) this.parentNode.removeChild( this ); } }, empty: function() { // Remove element nodes and prevent memory leaks jQuery(this).children().remove(); // Remove any remaining nodes while ( this.firstChild ) this.removeChild( this.firstChild ); }}, function(name, fn){ jQuery.fn[ name ] = function(){ return this.each( fn, arguments ); };});// Helper function used by the dimensions and offset modulesfunction num(elem, prop) { return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;}var expando = "jQuery" + now(), uuid = 0, windowData = {};jQuery.extend({ cache: {}, data: function( elem, name, data ) { elem = elem == window ? windowData : elem; var id = elem[ expando ]; // Compute a unique ID for the element if ( !id ) id = elem[ expando ] = ++uuid; // Only generate the data cache if we're // trying to access or manipulate it if ( name && !jQuery.cache[ id ] ) jQuery.cache[ id ] = {}; // Prevent overriding the named cache with undefined values if ( data !== undefined ) jQuery.cache[ id ][ name ] = data; // Return the named cache data, or the ID for the element return name ? jQuery.cache[ id ][ name ] : id; }, removeData: function( elem, name ) { elem = elem == window ? windowData : elem; var id = elem[ expando ]; // If we want to remove a specific section of the element's data if ( name ) { if ( jQuery.cache[ id ] ) { // Remove the section of cache data delete jQuery.cache[ id ][ name ]; // If we've removed all the data, remove the element's cache name = ""; for ( name in jQuery.cache[ id ] ) break; if ( !name ) jQuery.removeData( elem ); } // Otherwise, we want to remove all of the element's data } else { // Clean up the element expando try { delete elem[ expando ]; } catch(e){ // IE has trouble directly removing the expando // but it's ok with using removeAttribute if ( elem.removeAttribute ) elem.removeAttribute( expando ); } // Completely remove the data cache delete jQuery.cache[ id ]; } }, queue: function( elem, type, data ) { if ( elem ){ type = (type || "fx") + "queue"; var q = jQuery.data( elem, type ); if ( !q || jQuery.isArray(data) ) q = jQuery.data( elem, type, jQuery.makeArray(data) ); else if( data ) q.push( data ); } return q; }, dequeue: function( elem, type ){ var queue = jQuery.queue( elem, type ), fn = queue.shift(); if( !type || type === "fx" ) fn = queue[0]; if( fn !== undefined ) fn.call(elem); }});jQuery.fn.extend({ data: function( key, value ){ var parts = key.split("."); parts[1] = parts[1] ? "." + parts[1] : ""; if ( value === undefined ) { var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); if ( data === undefined && this.length ) data = jQuery.data( this[0], key ); return data === undefined && parts[1] ? this.data( parts[0] ) : data; } else return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ jQuery.data( this, key, value ); }); }, removeData: function( key ){ return this.each(function(){ jQuery.removeData( this, key ); }); }, queue: function(type, data){ if ( typeof type !== "string" ) { data = type; type = "fx"; } if ( data === undefined ) return jQuery.queue( this[0], type ); return this.each(function(){ var queue = jQuery.queue( this, type, data ); if( type == "fx" && queue.length == 1 ) queue[0].call(this); }); }, dequeue: function(type){ return this.each(function(){ jQuery.dequeue( this, type ); }); }});/*! * Sizzle CSS Selector Engine - v0.9.3 * Copyright 2009, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */(function(){var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g, done = 0, toString = Object.prototype.toString;var Sizzle = function(selector, context, results, seed) { results = results || []; context = context || document; if ( context.nodeType !== 1 && context.nodeType !== 9 ) return []; if ( !selector || typeof selector !== "string" ) { return results; } var parts = [], m, set, checkSet, check, mode, extra, prune = true; // Reset the position of the chunker regexp (start from head) chunker.lastIndex = 0; while ( (m = chunker.exec(selector)) !== null ) { parts.push( m[1] ); if ( m[2] ) { extra = RegExp.rightContext; break; } } if ( parts.length > 1 && origPOS.exec( selector ) ) { if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { set = posProcess( parts[0] + parts[1], context ); } else { set = Expr.relative[ parts[0] ] ? [ context ] : Sizzle( parts.shift(), context ); while ( parts.length ) { selector = parts.shift(); if ( Expr.relative[ selector ] ) selector += parts.shift(); set = posProcess( selector, set ); } } } else { var ret = seed ? { expr: parts.pop(), set: makeArray(seed) } : Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context, isXML(context) ); set = Sizzle.filter( ret.expr, ret.set ); if ( parts.length > 0 ) { checkSet = makeArray(set); } else { prune = false; } while ( parts.length ) { var cur = parts.pop(), pop = cur; if ( !Expr.relative[ cur ] ) { cur = ""; } else { pop = parts.pop(); } if ( pop == null ) { pop = context; } Expr.relative[ cur ]( checkSet, pop, isXML(context) ); } } if ( !checkSet ) { checkSet = set; } if ( !checkSet ) { throw "Syntax error, unrecognized expression: " + (cur || selector); } if ( toString.call(checkSet) === "[object Array]" ) { if ( !prune ) { results.push.apply( results, checkSet ); } else if ( context.nodeType === 1 ) { for ( var i = 0; checkSet[i] != null; i++ ) { if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { results.push( set[i] ); } } } else { for ( var i = 0; checkSet[i] != null; i++ ) { if ( checkSet[i] && checkSet[i].nodeType === 1 ) { results.push( set[i] ); } } } } else { makeArray( checkSet, results ); } if ( extra ) { Sizzle( extra, context, results, seed ); if ( sortOrder ) { hasDuplicate = false; results.sort(sortOrder); if ( hasDuplicate ) { for ( var i = 1; i < results.length; i++ ) { if ( results[i] === results[i-1] ) { results.splice(i--, 1); } } } } } return results;};Sizzle.matches = function(expr, set){ return Sizzle(expr, null, null, set);};Sizzle.find = function(expr, context, isXML){ var set, match; if ( !expr ) { return []; } for ( var i = 0, l = Expr.order.length; i < l; i++ ) { var type = Expr.order[i], match; if ( (match = Expr.match[ type ].exec( expr )) ) { var left = RegExp.leftContext; if ( left.substr( left.length - 1 ) !== "\\" ) { match[1] = (match[1] || "").replace(/\\/g, ""); set = Expr.find[ type ]( match, context, isXML ); if ( set != null ) { expr = expr.replace( Expr.match[ type ], "" ); break; } } } } if ( !set ) { set = context.getElementsByTagName("*"); } return {set: set, expr: expr};};Sizzle.filter = function(expr, set, inplace, not){ var old = expr, result = [], curLoop = set, match, anyFound, isXMLFilter = set && set[0] && isXML(set[0]); while ( expr && set.length ) { for ( var type in Expr.filter ) { if ( (match = Expr.match[ type ].exec( expr )) != null ) { var filter = Expr.filter[ type ], found, item; anyFound = false; if ( curLoop == result ) { result = []; } if ( Expr.preFilter[ type ] ) { match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); if ( !match ) { anyFound = found = true; } else if ( match === true ) { continue; } } if ( match ) { for ( var i = 0; (item = curLoop[i]) != null; i++ ) { if ( item ) { found = filter( item, match, i, curLoop ); var pass = not ^ !!found; if ( inplace && found != null ) { if ( pass ) { anyFound = true; } else { curLoop[i] = false; } } else if ( pass ) { result.push( item ); anyFound = true; } } } } if ( found !== undefined ) { if ( !inplace ) { curLoop = result; } expr = expr.replace( Expr.match[ type ], "" ); if ( !anyFound ) { return []; } break; } } } // Improper expression if ( expr == old ) { if ( anyFound == null ) { throw "Syntax error, unrecognized expression: " + expr; } else { break; } } old = expr; } return curLoop;};var Expr = Sizzle.selectors = { order: [ "ID", "NAME", "TAG" ], match: { ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/, CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/, NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/, ATTR: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/, CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/ }, attrMap: { "class": "className", "for": "htmlFor" }, attrHandle: { href: function(elem){ return elem.getAttribute("href"); } }, relative: { "+": function(checkSet, part, isXML){ var isPartStr = typeof part === "string", isTag = isPartStr && !/\W/.test(part), isPartStrNotTag = isPartStr && !isTag; if ( isTag && !isXML ) { part = part.toUpperCase(); } for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { if ( (elem = checkSet[i]) ) { while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ? elem || false : elem === part; } } if ( isPartStrNotTag ) { Sizzle.filter( part, checkSet, true ); } }, ">": function(checkSet, part, isXML){ var isPartStr = typeof part === "string"; if ( isPartStr && !/\W/.test(part) ) { part = isXML ? part : part.toUpperCase(); for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; if ( elem ) { var parent = elem.parentNode; checkSet[i] = parent.nodeName === part ? parent : false; } } } else { for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; if ( elem ) { checkSet[i] = isPartStr ? elem.parentNode : elem.parentNode === part; } } if ( isPartStr ) { Sizzle.filter( part, checkSet, true ); } } }, "": function(checkSet, part, isXML){ var doneName = done++, checkFn = dirCheck; if ( !part.match(/\W/) ) { var nodeCheck = part = isXML ? part : part.toUpperCase(); checkFn = dirNodeCheck; } checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); }, "~": function(checkSet, part, isXML){ var doneName = done++, checkFn = dirCheck; if ( typeof part === "string" && !part.match(/\W/) ) { var nodeCheck = part = isXML ? part : part.toUpperCase(); checkFn = dirNodeCheck; } checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); } }, find: { ID: function(match, context, isXML){ if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); return m ? [m] : []; } }, NAME: function(match, context, isXML){ if ( typeof context.getElementsByName !== "undefined" ) { var ret = [], results = context.getElementsByName(match[1]); for ( var i = 0, l = results.length; i < l; i++ ) { if ( results[i].getAttribute("name") === match[1] ) { ret.push( results[i] ); } } return ret.length === 0 ? null : ret; } }, TAG: function(match, context){ return context.getElementsByTagName(match[1]); } }, preFilter: { CLASS: function(match, curLoop, inplace, result, not, isXML){ match = " " + match[1].replace(/\\/g, "") + " "; if ( isXML ) { return match; } for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { if ( elem ) { if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) { if ( !inplace ) result.push( elem ); } else if ( inplace ) { curLoop[i] = false; } } } return false; }, ID: function(match){ return match[1].replace(/\\/g, ""); }, TAG: function(match, curLoop){ for ( var i = 0; curLoop[i] === false; i++ ){} return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase(); }, CHILD: function(match){ if ( match[1] == "nth" ) { // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" || !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); // calculate the numbers (first)n+(last) including if they are negative match[2] = (test[1] + (test[2] || 1)) - 0; match[3] = test[3] - 0; } // TODO: Move to normal caching system match[0] = done++; return match; }, ATTR: function(match, curLoop, inplace, result, not, isXML){ var name = match[1].replace(/\\/g, ""); if ( !isXML && Expr.attrMap[name] ) { match[1] = Expr.attrMap[name]; } if ( match[2] === "~=" ) { match[4] = " " + match[4] + " "; } return match; }, PSEUDO: function(match, curLoop, inplace, result, not){ if ( match[1] === "not" ) { // If we're dealing with a complex expression, or a simple one if ( match[3].match(chunker).length > 1 || /^\w/.test(match[3]) ) { match[3] = Sizzle(match[3], null, null, curLoop); } else { var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); if ( !inplace ) { result.push.apply( result, ret ); } return false; } } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { return true; } return match; }, POS: function(match){ match.unshift( true ); return match; } }, filters: { enabled: function(elem){ return elem.disabled === false && elem.type !== "hidden"; }, disabled: function(elem){ return elem.disabled === true; }, checked: function(elem){ return elem.checked === true; }, selected: function(elem){ // Accessing this property makes selected-by-default // options in Safari work properly elem.parentNode.selectedIndex; return elem.selected === true; }, parent: function(elem){ return !!elem.firstChild; }, empty: function(elem){ return !elem.firstChild; }, has: function(elem, i, match){ return !!Sizzle( match[3], elem ).length; }, header: function(elem){ return /h\d/i.test( elem.nodeName ); }, text: function(elem){ return "text" === elem.type; }, radio: function(elem){ return "radio" === elem.type; }, checkbox: function(elem){ return "checkbox" === elem.type; }, file: function(elem){ return "file" === elem.type; }, password: function(elem){ return "password" === elem.type; }, submit: function(elem){ return "submit" === elem.type; }, image: function(elem){ return "image" === elem.type; }, reset: function(elem){ return "reset" === elem.type; }, button: function(elem){ return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON"; }, input: function(elem){ return /input|select|textarea|button/i.test(elem.nodeName); } }, setFilters: { first: function(elem, i){ return i === 0; }, last: function(elem, i, match, array){ return i === array.length - 1; }, even: function(elem, i){ return i % 2 === 0; }, odd: function(elem, i){ return i % 2 === 1; }, lt: function(elem, i, match){ return i < match[3] - 0; }, gt: function(elem, i, match){ return i > match[3] - 0; }, nth: function(elem, i, match){ return match[3] - 0 == i; }, eq: function(elem, i, match){ return match[3] - 0 == i; } }, filter: { PSEUDO: function(elem, match, i, array){ var name = match[1], filter = Expr.filters[ name ]; if ( filter ) { return filter( elem, i, match, array ); } else if ( name === "contains" ) { return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0; } else if ( name === "not" ) { var not = match[3]; for ( var i = 0, l = not.length; i < l; i++ ) { if ( not[i] === elem ) { return false; } } return true; } }, CHILD: function(elem, match){ var type = match[1], node = elem; switch (type) { case 'only': case 'first': while (node = node.previousSibling) { if ( node.nodeType === 1 ) return false; } if ( type == 'first') return true; node = elem; case 'last': while (node = node.nextSibling) { if ( node.nodeType === 1 ) return false; } return true; case 'nth': var first = match[2], last = match[3]; if ( first == 1 && last == 0 ) { return true; } var doneName = match[0], parent = elem.parentNode; if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { var count = 0; for ( node = parent.firstChild; node; node = node.nextSibling ) { if ( node.nodeType === 1 ) { node.nodeIndex = ++count; } } parent.sizcache = doneName; } var diff = elem.nodeIndex - last; if ( first == 0 ) { return diff == 0; } else { return ( diff % first == 0 && diff / first >= 0 ); } } }, ID: function(elem, match){ return elem.nodeType === 1 && elem.getAttribute("id") === match; }, TAG: function(elem, match){ return (match === "*" && elem.nodeType === 1) || elem.nodeName === match; }, CLASS: function(elem, match){ return (" " + (elem.className || elem.getAttribute("class")) + " ") .indexOf( match ) > -1; }, ATTR: function(elem, match){ var name = match[1], result = Expr.attrHandle[ name ] ? Expr.attrHandle[ name ]( elem ) : elem[ name ] != null ? elem[ name ] : elem.getAttribute( name ), value = result + "", type = match[2], check = match[4]; return result == null ? type === "!=" : type === "=" ? value === check : type === "*=" ? value.indexOf(check) >= 0 : type === "~=" ? (" " + value + " ").indexOf(check) >= 0 : !check ? value && result !== false : type === "!=" ? value != check : type === "^=" ? value.indexOf(check) === 0 : type === "$=" ? value.substr(value.length - check.length) === check : type === "|=" ? value === check || value.substr(0, check.length + 1) === check + "-" : false; }, POS: function(elem, match, i, array){ var name = match[2], filter = Expr.setFilters[ name ]; if ( filter ) { return filter( elem, i, match, array ); } } }};var origPOS = Expr.match.POS;for ( var type in Expr.match ) { Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );}var makeArray = function(array, results) { array = Array.prototype.slice.call( array ); if ( results ) { results.push.apply( results, array ); return results; } return array;};// Perform a simple check to determine if the browser is capable of// converting a NodeList to an array using builtin methods.try { Array.prototype.slice.call( document.documentElement.childNodes );// Provide a fallback method if it does not work} catch(e){ makeArray = function(array, results) { var ret = results || []; if ( toString.call(array) === "[object Array]" ) { Array.prototype.push.apply( ret, array ); } else { if ( typeof array.length === "number" ) { for ( var i = 0, l = array.length; i < l; i++ ) { ret.push( array[i] ); } } else { for ( var i = 0; array[i]; i++ ) { ret.push( array[i] ); } } } return ret; };}var sortOrder;if ( document.documentElement.compareDocumentPosition ) { sortOrder = function( a, b ) { var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; if ( ret === 0 ) { hasDuplicate = true; } return ret; };} else if ( "sourceIndex" in document.documentElement ) { sortOrder = function( a, b ) { var ret = a.sourceIndex - b.sourceIndex; if ( ret === 0 ) { hasDuplicate = true; } return ret; };} else if ( document.createRange ) { sortOrder = function( a, b ) { var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); aRange.selectNode(a); aRange.collapse(true); bRange.selectNode(b); bRange.collapse(true); var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); if ( ret === 0 ) { hasDuplicate = true; } return ret; };}// Check to see if the browser returns elements by name when// querying by getElementById (and provide a workaround)(function(){ // We're going to inject a fake input element with a specified name var form = document.createElement("form"), id = "script" + (new Date).getTime(); form.innerHTML = "<input name='" + id + "'/>"; // Inject it into the root element, check its status, and remove it quickly var root = document.documentElement; root.insertBefore( form, root.firstChild ); // The workaround has to do additional checks after a getElementById // Which slows things down for other browsers (hence the branching) if ( !!document.getElementById( id ) ) { Expr.find.ID = function(match, context, isXML){ if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; } }; Expr.filter.ID = function(elem, match){ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); return elem.nodeType === 1 && node && node.nodeValue === match; }; } root.removeChild( form );})();(function(){ // Check to see if the browser returns only elements // when doing getElementsByTagName("*") // Create a fake element var div = document.createElement("div"); div.appendChild( document.createComment("") ); // Make sure no comments are found if ( div.getElementsByTagName("*").length > 0 ) { Expr.find.TAG = function(match, context){ var results = context.getElementsByTagName(match[1]); // Filter out possible comments if ( match[1] === "*" ) { var tmp = []; for ( var i = 0; results[i]; i++ ) { if ( results[i].nodeType === 1 ) { tmp.push( results[i] ); } } results = tmp; } return results; }; } // Check to see if an attribute returns normalized href attributes div.innerHTML = "<a href='#'></a>"; if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && div.firstChild.getAttribute("href") !== "#" ) { Expr.attrHandle.href = function(elem){ return elem.getAttribute("href", 2); }; }})();if ( document.querySelectorAll ) (function(){ var oldSizzle = Sizzle, div = document.createElement("div"); div.innerHTML = "<p class='TEST'></p>"; // Safari can't handle uppercase or unicode characters when // in quirks mode. if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { return; } Sizzle = function(query, context, extra, seed){ context = context || document; // Only use querySelectorAll on non-XML documents // (ID selectors don't work in non-HTML documents) if ( !seed && context.nodeType === 9 && !isXML(context) ) { try { return makeArray( context.querySelectorAll(query), extra ); } catch(e){} } return oldSizzle(query, context, extra, seed); }; Sizzle.find = oldSizzle.find; Sizzle.filter = oldSizzle.filter; Sizzle.selectors = oldSizzle.selectors; Sizzle.matches = oldSizzle.matches;})();if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){ var div = document.createElement("div"); div.innerHTML = "<div class='test e'></div><div class='test'></div>"; // Opera can't find a second classname (in 9.6) if ( div.getElementsByClassName("e").length === 0 ) return; // Safari caches class attributes, doesn't catch changes (in 3.2) div.lastChild.className = "e"; if ( div.getElementsByClassName("e").length === 1 ) return; Expr.order.splice(1, 0, "CLASS"); Expr.find.CLASS = function(match, context, isXML) { if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { return context.getElementsByClassName(match[1]); } };})();function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { var sibDir = dir == "previousSibling" && !isXML; for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; if ( elem ) { if ( sibDir && elem.nodeType === 1 ){ elem.sizcache = doneName; elem.sizset = i; } elem = elem[dir]; var match = false; while ( elem ) { if ( elem.sizcache === doneName ) { match = checkSet[elem.sizset]; break; } if ( elem.nodeType === 1 && !isXML ){ elem.sizcache = doneName; elem.sizset = i; } if ( elem.nodeName === cur ) { match = elem; break; } elem = elem[dir]; } checkSet[i] = match; } }}function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { var sibDir = dir == "previousSibling" && !isXML; for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; if ( elem ) { if ( sibDir && elem.nodeType === 1 ) { elem.sizcache = doneName; elem.sizset = i; } elem = elem[dir]; var match = false; while ( elem ) { if ( elem.sizcache === doneName ) { match = checkSet[elem.sizset]; break; } if ( elem.nodeType === 1 ) { if ( !isXML ) { elem.sizcache = doneName; elem.sizset = i; } if ( typeof cur !== "string" ) { if ( elem === cur ) { match = true; break; } } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { match = elem; break; } } elem = elem[dir]; } checkSet[i] = match; } }}var contains = document.compareDocumentPosition ? function(a, b){ return a.compareDocumentPosition(b) & 16;} : function(a, b){ return a !== b && (a.contains ? a.contains(b) : true);};var isXML = function(elem){ return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || !!elem.ownerDocument && isXML( elem.ownerDocument );};var posProcess = function(selector, context){ var tmpSet = [], later = "", match, root = context.nodeType ? [context] : context; // Position selectors must be done after the filter // And so must :not(positional) so we move all PSEUDOs to the end while ( (match = Expr.match.PSEUDO.exec( selector )) ) { later += match[0]; selector = selector.replace( Expr.match.PSEUDO, "" ); } selector = Expr.relative[selector] ? selector + "*" : selector; for ( var i = 0, l = root.length; i < l; i++ ) { Sizzle( selector, root[i], tmpSet ); } return Sizzle.filter( later, tmpSet );};// EXPOSEjQuery.find = Sizzle;jQuery.filter = Sizzle.filter;jQuery.expr = Sizzle.selectors;jQuery.expr[":"] = jQuery.expr.filters;Sizzle.selectors.filters.hidden = function(elem){ return elem.offsetWidth === 0 || elem.offsetHeight === 0;};Sizzle.selectors.filters.visible = function(elem){ return elem.offsetWidth > 0 || elem.offsetHeight > 0;};Sizzle.selectors.filters.animated = function(elem){ return jQuery.grep(jQuery.timers, function(fn){ return elem === fn.elem; }).length;};jQuery.multiFilter = function( expr, elems, not ) { if ( not ) { expr = ":not(" + expr + ")"; } return Sizzle.matches(expr, elems);};jQuery.dir = function( elem, dir ){ var matched = [], cur = elem[dir]; while ( cur && cur != document ) { if ( cur.nodeType == 1 ) matched.push( cur ); cur = cur[dir]; } return matched;};jQuery.nth = function(cur, result, dir, elem){ result = result || 1; var num = 0; for ( ; cur; cur = cur[dir] ) if ( cur.nodeType == 1 && ++num == result ) break; return cur;};jQuery.sibling = function(n, elem){ var r = []; for ( ; n; n = n.nextSibling ) { if ( n.nodeType == 1 && n != elem ) r.push( n ); } return r;};return;window.Sizzle = Sizzle;})();/* * A number of helper functions used for managing events. * Many of the ideas behind this code originated from * Dean Edwards' addEvent library. */jQuery.event = { // Bind an event to an element // Original by Dean Edwards add: function(elem, types, handler, data) { if ( elem.nodeType == 3 || elem.nodeType == 8 ) return; // For whatever reason, IE has trouble passing the window object // around, causing it to be cloned in the process if ( elem.setInterval && elem != window ) elem = window; // Make sure that the function being executed has a unique ID if ( !handler.guid ) handler.guid = this.guid++; // if data is passed, bind to handler if ( data !== undefined ) { // Create temporary function pointer to original handler var fn = handler; // Create unique handler function, wrapped around original handler handler = this.proxy( fn ); // Store data in unique handler handler.data = data; } // Init the element's event structure var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}), handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){ // Handle the second event of a trigger and when // an event is called after a page has unloaded return typeof jQuery !== "undefined" && !jQuery.event.triggered ? jQuery.event.handle.apply(arguments.callee.elem, arguments) : undefined; }); // Add elem as a property of the handle function // This is to prevent a memory leak with non-native // event in IE. handle.elem = elem; // Handle multiple events separated by a space // jQuery(...).bind("mouseover mouseout", fn); jQuery.each(types.split(/\s+/), function(index, type) { // Namespaced event handlers var namespaces = type.split("."); type = namespaces.shift(); handler.type = namespaces.slice().sort().join("."); // Get the current list of functions bound to this event var handlers = events[type]; if ( jQuery.event.specialAll[type] ) jQuery.event.specialAll[type].setup.call(elem, data, namespaces); // Init the event handler queue if (!handlers) { handlers = events[type] = {}; // Check for a special event handler // Only use addEventListener/attachEvent if the special // events handler returns false if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem, data, namespaces) === false ) { // Bind the global event handler to the element if (elem.addEventListener) elem.addEventListener(type, handle, false); else if (elem.attachEvent) elem.attachEvent("on" + type, handle); } } // Add the function to the element's handler list handlers[handler.guid] = handler; // Keep track of which events have been used, for global triggering jQuery.event.global[type] = true; }); // Nullify elem to prevent memory leaks in IE elem = null; }, guid: 1, global: {}, // Detach an event or set of events from an element remove: function(elem, types, handler) { // don't do events on text and comment nodes if ( elem.nodeType == 3 || elem.nodeType == 8 ) return; var events = jQuery.data(elem, "events"), ret, index; if ( events ) { // Unbind all events for the element if ( types === undefined || (typeof types === "string" && types.charAt(0) == ".") ) for ( var type in events ) this.remove( elem, type + (types || "") ); else { // types is actually an event object here if ( types.type ) { handler = types.handler; types = types.type; } // Handle multiple events seperated by a space // jQuery(...).unbind("mouseover mouseout", fn); jQuery.each(types.split(/\s+/), function(index, type){ // Namespaced event handlers var namespaces = type.split("."); type = namespaces.shift(); var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)"); if ( events[type] ) { // remove the given handler for the given type if ( handler ) delete events[type][handler.guid]; // remove all handlers for the given type else for ( var handle in events[type] ) // Handle the removal of namespaced events if ( namespace.test(events[type][handle].type) ) delete events[type][handle]; if ( jQuery.event.specialAll[type] ) jQuery.event.specialAll[type].teardown.call(elem, namespaces); // remove generic event handler if no more handlers exist for ( ret in events[type] ) break; if ( !ret ) { if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem, namespaces) === false ) { if (elem.removeEventListener) elem.removeEventListener(type, jQuery.data(elem, "handle"), false); else if (elem.detachEvent) elem.detachEvent("on" + type, jQuery.data(elem, "handle")); } ret = null; delete events[type]; } } }); } // Remove the expando if it's no longer used for ( ret in events ) break; if ( !ret ) { var handle = jQuery.data( elem, "handle" ); if ( handle ) handle.elem = null; jQuery.removeData( elem, "events" ); jQuery.removeData( elem, "handle" ); } } }, // bubbling is internal trigger: function( event, data, elem, bubbling ) { // Event object or event type var type = event.type || event; if( !bubbling ){ event = typeof event === "object" ? // jQuery.Event object event[expando] ? event : // Object literal jQuery.extend( jQuery.Event(type), event ) : // Just the event type (string) jQuery.Event(type); if ( type.indexOf("!") >= 0 ) { event.type = type = type.slice(0, -1); event.exclusive = true; } // Handle a global trigger if ( !elem ) { // Don't bubble custom events when global (to avoid too much overhead) event.stopPropagation(); // Only trigger if we've ever bound an event for it if ( this.global[type] ) jQuery.each( jQuery.cache, function(){ if ( this.events && this.events[type] ) jQuery.event.trigger( event, data, this.handle.elem ); }); } // Handle triggering a single element // don't do events on text and comment nodes if ( !elem || elem.nodeType == 3 || elem.nodeType == 8 ) return undefined; // Clean up in case it is reused event.result = undefined; event.target = elem; // Clone the incoming data, if any data = jQuery.makeArray(data); data.unshift( event ); } event.currentTarget = elem; // Trigger the event, it is assumed that "handle" is a function var handle = jQuery.data(elem, "handle"); if ( handle ) handle.apply( elem, data ); // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links) if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false ) event.result = false; // Trigger the native events (except for clicks on links) if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) { this.triggered = true; try { elem[ type ](); // prevent IE from throwing an error for some hidden elements } catch (e) {} } this.triggered = false; if ( !event.isPropagationStopped() ) { var parent = elem.parentNode || elem.ownerDocument; if ( parent ) jQuery.event.trigger(event, data, parent, true); } }, handle: function(event) { // returned undefined or false var all, handlers; event = arguments[0] = jQuery.event.fix( event || window.event ); event.currentTarget = this; // Namespaced event handlers var namespaces = event.type.split("."); event.type = namespaces.shift(); // Cache this now, all = true means, any handler all = !namespaces.length && !event.exclusive; var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)"); handlers = ( jQuery.data(this, "events") || {} )[event.type]; for ( var j in handlers ) { var handler = handlers[j]; // Filter the functions by class if ( all || namespace.test(handler.type) ) { // Pass in a reference to the handler function itself // So that we can later remove it event.handler = handler; event.data = handler.data; var ret = handler.apply(this, arguments); if( ret !== undefined ){ event.result = ret; if ( ret === false ) { event.preventDefault(); event.stopPropagation(); } } if( event.isImmediatePropagationStopped() ) break; } } }, props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), fix: function(event) { if ( event[expando] ) return event; // store a copy of the original event object // and "clone" to set read-only properties var originalEvent = event; event = jQuery.Event( originalEvent ); for ( var i = this.props.length, prop; i; ){ prop = this.props[ --i ]; event[ prop ] = originalEvent[ prop ]; } // Fix target property, if necessary if ( !event.target ) event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either // check if target is a textnode (safari) if ( event.target.nodeType == 3 ) event.target = event.target.parentNode; // Add relatedTarget, if necessary if ( !event.relatedTarget && event.fromElement ) event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement; // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && event.clientX != null ) { var doc = document.documentElement, body = document.body; event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0); event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0); } // Add which for key events if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) event.which = event.charCode || event.keyCode; // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) if ( !event.metaKey && event.ctrlKey ) event.metaKey = event.ctrlKey; // Add which for click: 1 == left; 2 == middle; 3 == right // Note: button is not normalized, so don't use it if ( !event.which && event.button ) event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); return event; }, proxy: function( fn, proxy ){ proxy = proxy || function(){ return fn.apply(this, arguments); }; // Set the guid of unique handler to the same of original handler, so it can be removed proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++; // So proxy can be declared as an argument return proxy; }, special: { ready: { // Make sure the ready event is setup setup: bindReady, teardown: function() {} } }, specialAll: { live: { setup: function( selector, namespaces ){ jQuery.event.add( this, namespaces[0], liveHandler ); }, teardown: function( namespaces ){ if ( namespaces.length ) { var remove = 0, name = RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)"); jQuery.each( (jQuery.data(this, "events").live || {}), function(){ if ( name.test(this.type) ) remove++; }); if ( remove < 1 ) jQuery.event.remove( this, namespaces[0], liveHandler ); } } } }};jQuery.Event = function( src ){ // Allow instantiation without the 'new' keyword if( !this.preventDefault ) return new jQuery.Event(src); // Event object if( src && src.type ){ this.originalEvent = src; this.type = src.type; // Event type }else this.type = src; // timeStamp is buggy for some events on Firefox(#3843) // So we won't rely on the native value this.timeStamp = now(); // Mark it as fixed this[expando] = true;};function returnFalse(){ return false;}function returnTrue(){ return true;}// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.htmljQuery.Event.prototype = { preventDefault: function() { this.isDefaultPrevented = returnTrue; var e = this.originalEvent; if( !e ) return; // if preventDefault exists run it on the original event if (e.preventDefault) e.preventDefault(); // otherwise set the returnValue property of the original event to false (IE) e.returnValue = false; }, stopPropagation: function() { this.isPropagationStopped = returnTrue; var e = this.originalEvent; if( !e ) return; // if stopPropagation exists run it on the original event if (e.stopPropagation) e.stopPropagation(); // otherwise set the cancelBubble property of the original event to true (IE) e.cancelBubble = true; }, stopImmediatePropagation:function(){ this.isImmediatePropagationStopped = returnTrue; this.stopPropagation(); }, isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse};// Checks if an event happened on an element within another element// Used in jQuery.event.special.mouseenter and mouseleave handlersvar withinElement = function(event) { // Check if mouse(over|out) are still within the same parent element var parent = event.relatedTarget; // Traverse up the tree while ( parent && parent != this ) try { parent = parent.parentNode; } catch(e) { parent = this; } if( parent != this ){ // set the correct event type event.type = event.data; // handle event if we actually just moused on to a non sub-element jQuery.event.handle.apply( this, arguments ); }}; jQuery.each({ mouseover: 'mouseenter', mouseout: 'mouseleave'}, function( orig, fix ){ jQuery.event.special[ fix ] = { setup: function(){ jQuery.event.add( this, orig, withinElement, fix ); }, teardown: function(){ jQuery.event.remove( this, orig, withinElement ); } }; });jQuery.fn.extend({ bind: function( type, data, fn ) { return type == "unload" ? this.one(type, data, fn) : this.each(function(){ jQuery.event.add( this, type, fn || data, fn && data ); }); }, one: function( type, data, fn ) { var one = jQuery.event.proxy( fn || data, function(event) { jQuery(this).unbind(event, one); return (fn || data).apply( this, arguments ); }); return this.each(function(){ jQuery.event.add( this, type, one, fn && data); }); }, unbind: function( type, fn ) { return this.each(function(){ jQuery.event.remove( this, type, fn ); }); }, trigger: function( type, data ) { return this.each(function(){ jQuery.event.trigger( type, data, this ); }); }, triggerHandler: function( type, data ) { if( this[0] ){ var event = jQuery.Event(type); event.preventDefault(); event.stopPropagation(); jQuery.event.trigger( event, data, this[0] ); return event.result; } }, toggle: function( fn ) { // Save reference to arguments for access in closure var args = arguments, i = 1; // link all the functions, so any of them can unbind this click handler while( i < args.length ) jQuery.event.proxy( fn, args[i++] ); return this.click( jQuery.event.proxy( fn, function(event) { // Figure out which function to execute this.lastToggle = ( this.lastToggle || 0 ) % i; // Make sure that clicks stop event.preventDefault(); // and execute the function return args[ this.lastToggle++ ].apply( this, arguments ) || false; })); }, hover: function(fnOver, fnOut) { return this.mouseenter(fnOver).mouseleave(fnOut); }, ready: function(fn) { // Attach the listeners bindReady(); // If the DOM is already ready if ( jQuery.isReady ) // Execute the function immediately fn.call( document, jQuery ); // Otherwise, remember the function for later else // Add the function to the wait list jQuery.readyList.push( fn ); return this; }, live: function( type, fn ){ var proxy = jQuery.event.proxy( fn ); proxy.guid += this.selector + type; jQuery(document).bind( liveConvert(type, this.selector), this.selector, proxy ); return this; }, die: function( type, fn ){ jQuery(document).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null ); return this; }});function liveHandler( event ){ var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"), stop = true, elems = []; jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){ if ( check.test(fn.type) ) { var elem = jQuery(event.target).closest(fn.data)[0]; if ( elem ) elems.push({ elem: elem, fn: fn }); } }); elems.sort(function(a,b) { return jQuery.data(a.elem, "closest") - jQuery.data(b.elem, "closest"); }); jQuery.each(elems, function(){ if ( this.fn.call(this.elem, event, this.fn.data) === false ) return (stop = false); }); return stop;}function liveConvert(type, selector){ return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "|")].join(".");}jQuery.extend({ isReady: false, readyList: [], // Handle when the DOM is ready ready: function() { // Make sure that the DOM is not already loaded if ( !jQuery.isReady ) { // Remember that the DOM is ready jQuery.isReady = true; // If there are functions bound, to execute if ( jQuery.readyList ) { // Execute all of them jQuery.each( jQuery.readyList, function(){ this.call( document, jQuery ); }); // Reset the list of functions jQuery.readyList = null; } // Trigger any bound ready events jQuery(document).triggerHandler("ready"); } }});var readyBound = false;function bindReady(){ if ( readyBound ) return; readyBound = true; // Mozilla, Opera and webkit nightlies currently support this event if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", function(){ document.removeEventListener( "DOMContentLoaded", arguments.callee, false ); jQuery.ready(); }, false ); // If IE event model is used } else if ( document.attachEvent ) { // ensure firing before onload, // maybe late but safe also for iframes document.attachEvent("onreadystatechange", function(){ if ( document.readyState === "complete" ) { document.detachEvent( "onreadystatechange", arguments.callee ); jQuery.ready(); } }); // If IE and not an iframe // continually check to see if the document is ready if ( document.documentElement.doScroll && window == window.top ) (function(){ if ( jQuery.isReady ) return; try { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); } catch( error ) { setTimeout( arguments.callee, 0 ); return; } // and execute any waiting functions jQuery.ready(); })(); } // A fallback to window.onload, that will always work jQuery.event.add( window, "load", jQuery.ready );}jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," + "mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," + "change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){ // Handle event binding jQuery.fn[name] = function(fn){ return fn ? this.bind(name, fn) : this.trigger(name); };});// Prevent memory leaks in IE// And prevent errors on refresh with events like mouseover in other browsers// Window isn't included so as not to unbind existing unload eventsjQuery( window ).bind( 'unload', function(){ for ( var id in jQuery.cache ) // Skip the window if ( id != 1 && jQuery.cache[ id ].handle ) jQuery.event.remove( jQuery.cache[ id ].handle.elem );}); (function(){ jQuery.support = {}; var root = document.documentElement, script = document.createElement("script"), div = document.createElement("div"), id = "script" + (new Date).getTime(); div.style.display = "none"; div.innerHTML = ' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>'; var all = div.getElementsByTagName("*"), a = div.getElementsByTagName("a")[0]; // Can't get basic test support if ( !all || !all.length || !a ) { return; } jQuery.support = { // IE strips leading whitespace when .innerHTML is used leadingWhitespace: div.firstChild.nodeType == 3, // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables tbody: !div.getElementsByTagName("tbody").length, // Make sure that you can get all elements in an <object> element // IE 7 always returns no results objectAll: !!div.getElementsByTagName("object")[0] .getElementsByTagName("*").length, // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE htmlSerialize: !!div.getElementsByTagName("link").length, // Get the style information from getAttribute // (IE uses .cssText insted) style: /red/.test( a.getAttribute("style") ), // Make sure that URLs aren't manipulated // (IE normalizes it by default) hrefNormalized: a.getAttribute("href") === "/a", // Make sure that element opacity exists // (IE uses filter instead) opacity: a.style.opacity === "0.5", // Verify style float existence // (IE uses styleFloat instead of cssFloat) cssFloat: !!a.style.cssFloat, // Will be defined later scriptEval: false, noCloneEvent: true, boxModel: null }; script.type = "text/javascript"; try { script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); } catch(e){} root.insertBefore( script, root.firstChild ); // Make sure that the execution of code works by injecting a script // tag with appendChild/createTextNode // (IE doesn't support this, fails, and uses .text instead) if ( window[ id ] ) { jQuery.support.scriptEval = true; delete window[ id ]; } root.removeChild( script ); if ( div.attachEvent && div.fireEvent ) { div.attachEvent("onclick", function(){ // Cloning a node shouldn't copy over any // bound event handlers (IE does this) jQuery.support.noCloneEvent = false; div.detachEvent("onclick", arguments.callee); }); div.cloneNode(true).fireEvent("onclick"); } // Figure out if the W3C box model works as expected // document.body must exist before we can do this jQuery(function(){ var div = document.createElement("div"); div.style.width = div.style.paddingLeft = "1px"; document.body.appendChild( div ); jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; document.body.removeChild( div ).style.display = 'none'; });})();var styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat";jQuery.props = { "for": "htmlFor", "class": "className", "float": styleFloat, cssFloat: styleFloat, styleFloat: styleFloat, readonly: "readOnly", maxlength: "maxLength", cellspacing: "cellSpacing", rowspan: "rowSpan", tabindex: "tabIndex"};jQuery.fn.extend({ // Keep a copy of the old load _load: jQuery.fn.load, load: function( url, params, callback ) { if ( typeof url !== "string" ) return this._load( url ); var off = url.indexOf(" "); if ( off >= 0 ) { var selector = url.slice(off, url.length); url = url.slice(0, off); } // Default to a GET request var type = "GET"; // If the second parameter was provided if ( params ) // If it's a function if ( jQuery.isFunction( params ) ) { // We assume that it's the callback callback = params; params = null; // Otherwise, build a param string } else if( typeof params === "object" ) { params = jQuery.param( params ); type = "POST"; } var self = this; // Request the remote document jQuery.ajax({ url: url, type: type, dataType: "html", data: params, complete: function(res, status){ // If successful, inject the HTML into all the matched elements if ( status == "success" || status == "notmodified" ) // See if a selector was specified self.html( selector ? // Create a dummy div to hold the results jQuery("<div/>") // inject the contents of the document in, removing the scripts // to avoid any 'Permission Denied' errors in IE .append(res.responseText.replace(/<script(.|\s)*?\/script>/g, "")) // Locate the specified elements .find(selector) : // If not, just inject the full result res.responseText ); if( callback ) self.each( callback, [res.responseText, status, res] ); } }); return this; }, serialize: function() { return jQuery.param(this.serializeArray()); }, serializeArray: function() { return this.map(function(){ return this.elements ? jQuery.makeArray(this.elements) : this; }) .filter(function(){ return this.name && !this.disabled && (this.checked || /select|textarea/i.test(this.nodeName) || /text|hidden|password|search/i.test(this.type)); }) .map(function(i, elem){ var val = jQuery(this).val(); return val == null ? null : jQuery.isArray(val) ? jQuery.map( val, function(val, i){ return {name: elem.name, value: val}; }) : {name: elem.name, value: val}; }).get(); }});// Attach a bunch of functions for handling common AJAX eventsjQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){ jQuery.fn[o] = function(f){ return this.bind(o, f); };});var jsc = now();jQuery.extend({ get: function( url, data, callback, type ) { // shift arguments if data argument was ommited if ( jQuery.isFunction( data ) ) { callback = data; data = null; } return jQuery.ajax({ type: "GET", url: url, data: data, success: callback, dataType: type }); }, getScript: function( url, callback ) { return jQuery.get(url, null, callback, "script"); }, getJSON: function( url, data, callback ) { return jQuery.get(url, data, callback, "json"); }, post: function( url, data, callback, type ) { if ( jQuery.isFunction( data ) ) { callback = data; data = {}; } return jQuery.ajax({ type: "POST", url: url, data: data, success: callback, dataType: type }); }, ajaxSetup: function( settings ) { jQuery.extend( jQuery.ajaxSettings, settings ); }, ajaxSettings: { url: location.href, global: true, type: "GET", contentType: "application/x-www-form-urlencoded", processData: true, async: true, /* timeout: 0, data: null, username: null, password: null, */ // Create the request object; Microsoft failed to properly // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available // This function can be overriden by calling jQuery.ajaxSetup xhr:function(){ return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); }, accepts: { xml: "application/xml, text/xml", html: "text/html", script: "text/javascript, application/javascript", json: "application/json, text/javascript", text: "text/plain", _default: "*/*" } }, // Last-Modified header cache for next request lastModified: {}, ajax: function( s ) { // Extend the settings, but re-extend 's' so that it can be // checked again later (in the test suite, specifically) s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s)); var jsonp, jsre = /=\?(&|$)/g, status, data, type = s.type.toUpperCase(); // convert data if not already a string if ( s.data && s.processData && typeof s.data !== "string" ) s.data = jQuery.param(s.data); // Handle JSONP Parameter Callbacks if ( s.dataType == "jsonp" ) { if ( type == "GET" ) { if ( !s.url.match(jsre) ) s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?"; } else if ( !s.data || !s.data.match(jsre) ) s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?"; s.dataType = "json"; } // Build temporary JSONP function if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) { jsonp = "jsonp" + jsc++; // Replace the =? sequence both in the query string and the data if ( s.data ) s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1"); s.url = s.url.replace(jsre, "=" + jsonp + "$1"); // We need to make sure // that a JSONP style response is executed properly s.dataType = "script"; // Handle JSONP-style loading window[ jsonp ] = function(tmp){ data = tmp; success(); complete(); // Garbage collect window[ jsonp ] = undefined; try{ delete window[ jsonp ]; } catch(e){} if ( head ) head.removeChild( script ); }; } if ( s.dataType == "script" && s.cache == null ) s.cache = false; if ( s.cache === false && type == "GET" ) { var ts = now(); // try replacing _= if it is there var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2"); // if nothing was replaced, add timestamp to the end s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : ""); } // If data is available, append data to url for get requests if ( s.data && type == "GET" ) { s.url += (s.url.match(/\?/) ? "&" : "?") + s.data; // IE likes to send both get and post data, prevent this s.data = null; } // Watch for a new set of requests if ( s.global && ! jQuery.active++ ) jQuery.event.trigger( "ajaxStart" ); // Matches an absolute URL, and saves the domain var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url ); // If we're requesting a remote document // and trying to load JSON or Script with a GET if ( s.dataType == "script" && type == "GET" && parts && ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){ var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); script.src = s.url; if (s.scriptCharset) script.charset = s.scriptCharset; // Handle Script loading if ( !jsonp ) { var done = false; // Attach handlers for all browsers script.onload = script.onreadystatechange = function(){ if ( !done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") ) { done = true; success(); complete(); // Handle memory leak in IE script.onload = script.onreadystatechange = null; head.removeChild( script ); } }; } head.appendChild(script); // We handle everything using the script element injection return undefined; } var requestDone = false; // Create the request object var xhr = s.xhr(); // Open the socket // Passing null username, generates a login popup on Opera (#2865) if( s.username ) xhr.open(type, s.url, s.async, s.username, s.password); else xhr.open(type, s.url, s.async); // Need an extra try/catch for cross domain requests in Firefox 3 try { // Set the correct header, if data is being sent if ( s.data ) xhr.setRequestHeader("Content-Type", s.contentType); // Set the If-Modified-Since header, if ifModified mode. if ( s.ifModified ) xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" ); // Set header so the called script knows that it's an XMLHttpRequest xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); // Set the Accepts header for the server, depending on the dataType xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ? s.accepts[ s.dataType ] + ", */*" : s.accepts._default ); } catch(e){} // Allow custom headers/mimetypes and early abort if ( s.beforeSend && s.beforeSend(xhr, s) === false ) { // Handle the global AJAX counter if ( s.global && ! --jQuery.active ) jQuery.event.trigger( "ajaxStop" ); // close opended socket xhr.abort(); return false; } if ( s.global ) jQuery.event.trigger("ajaxSend", [xhr, s]); // Wait for a response to come back var onreadystatechange = function(isTimeout){ // The request was aborted, clear the interval and decrement jQuery.active if (xhr.readyState == 0) { if (ival) { // clear poll interval clearInterval(ival); ival = null; // Handle the global AJAX counter if ( s.global && ! --jQuery.active ) jQuery.event.trigger( "ajaxStop" ); } // The transfer is complete and the data is available, or the request timed out } else if ( !requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout") ) { requestDone = true; // clear poll interval if (ival) { clearInterval(ival); ival = null; } status = isTimeout == "timeout" ? "timeout" : !jQuery.httpSuccess( xhr ) ? "error" : s.ifModified && jQuery.httpNotModified( xhr, s.url ) ? "notmodified" : "success"; if ( status == "success" ) { // Watch for, and catch, XML document parse errors try { // process the data (runs the xml through httpData regardless of callback) data = jQuery.httpData( xhr, s.dataType, s ); } catch(e) { status = "parsererror"; } } // Make sure that the request was successful or notmodified if ( status == "success" ) { // Cache Last-Modified header, if ifModified mode. var modRes; try { modRes = xhr.getResponseHeader("Last-Modified"); } catch(e) {} // swallow exception thrown by FF if header is not available if ( s.ifModified && modRes ) jQuery.lastModified[s.url] = modRes; // JSONP handles its own success callback if ( !jsonp ) success(); } else jQuery.handleError(s, xhr, status); // Fire the complete handlers complete(); if ( isTimeout ) xhr.abort(); // Stop memory leaks if ( s.async ) xhr = null; } }; if ( s.async ) { // don't attach the handler to the request, just poll it instead var ival = setInterval(onreadystatechange, 13); // Timeout checker if ( s.timeout > 0 ) setTimeout(function(){ // Check to see if the request is still happening if ( xhr && !requestDone ) onreadystatechange( "timeout" ); }, s.timeout); } // Send the data try { xhr.send(s.data); } catch(e) { jQuery.handleError(s, xhr, null, e); } // firefox 1.5 doesn't fire statechange for sync requests if ( !s.async ) onreadystatechange(); function success(){ // If a local callback was specified, fire it and pass it the data if ( s.success ) s.success( data, status ); // Fire the global callback if ( s.global ) jQuery.event.trigger( "ajaxSuccess", [xhr, s] ); } function complete(){ // Process result if ( s.complete ) s.complete(xhr, status); // The request was completed if ( s.global ) jQuery.event.trigger( "ajaxComplete", [xhr, s] ); // Handle the global AJAX counter if ( s.global && ! --jQuery.active ) jQuery.event.trigger( "ajaxStop" ); } // return XMLHttpRequest to allow aborting the request etc. return xhr; }, handleError: function( s, xhr, status, e ) { // If a local callback was specified, fire it if ( s.error ) s.error( xhr, status, e ); // Fire the global callback if ( s.global ) jQuery.event.trigger( "ajaxError", [xhr, s, e] ); }, // Counter for holding the number of active queries active: 0, // Determines if an XMLHttpRequest was successful or not httpSuccess: function( xhr ) { try { // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450 return !xhr.status && location.protocol == "file:" || ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223; } catch(e){} return false; }, // Determines if an XMLHttpRequest returns NotModified httpNotModified: function( xhr, url ) { try { var xhrRes = xhr.getResponseHeader("Last-Modified"); // Firefox always returns 200. check Last-Modified date return xhr.status == 304 || xhrRes == jQuery.lastModified[url]; } catch(e){} return false; }, httpData: function( xhr, type, s ) { var ct = xhr.getResponseHeader("content-type"), xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0, data = xml ? xhr.responseXML : xhr.responseText; if ( xml && data.documentElement.tagName == "parsererror" ) throw "parsererror"; // Allow a pre-filtering function to sanitize the response // s != null is checked to keep backwards compatibility if( s && s.dataFilter ) data = s.dataFilter( data, type ); // The filter can actually parse the response if( typeof data === "string" ){ // If the type is "script", eval it in global context if ( type == "script" ) jQuery.globalEval( data ); // Get the JavaScript object, if JSON is used. if ( type == "json" ) data = window["eval"]("(" + data + ")"); } return data; }, // Serialize an array of form elements or a set of // key/values into a query string param: function( a ) { var s = [ ]; function add( key, value ){ s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(value); }; // If an array was passed in, assume that it is an array // of form elements if ( jQuery.isArray(a) || a.jquery ) // Serialize the form elements jQuery.each( a, function(){ add( this.name, this.value ); }); // Otherwise, assume that it's an object of key/value pairs else // Serialize the key/values for ( var j in a ) // If the value is an array then the key names need to be repeated if ( jQuery.isArray(a[j]) ) jQuery.each( a[j], function(){ add( j, this ); }); else add( j, jQuery.isFunction(a[j]) ? a[j]() : a[j] ); // Return the resulting serialization return s.join("&").replace(/%20/g, "+"); }});var elemdisplay = {}, timerId, fxAttrs = [ // height animations [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ], // width animations [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ], // opacity animations [ "opacity" ] ];function genFx( type, num ){ var obj = {}; jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function(){ obj[ this ] = type; }); return obj;}jQuery.fn.extend({ show: function(speed,callback){ if ( speed ) { return this.animate( genFx("show", 3), speed, callback); } else { for ( var i = 0, l = this.length; i < l; i++ ){ var old = jQuery.data(this[i], "olddisplay"); this[i].style.display = old || ""; if ( jQuery.css(this[i], "display") === "none" ) { var tagName = this[i].tagName, display; if ( elemdisplay[ tagName ] ) { display = elemdisplay[ tagName ]; } else { var elem = jQuery("<" + tagName + " />").appendTo("body"); display = elem.css("display"); if ( display === "none" ) display = "block"; elem.remove(); elemdisplay[ tagName ] = display; } jQuery.data(this[i], "olddisplay", display); } } // Set the display of the elements in a second loop // to avoid the constant reflow for ( var i = 0, l = this.length; i < l; i++ ){ this[i].style.display = jQuery.data(this[i], "olddisplay") || ""; } return this; } }, hide: function(speed,callback){ if ( speed ) { return this.animate( genFx("hide", 3), speed, callback); } else { for ( var i = 0, l = this.length; i < l; i++ ){ var old = jQuery.data(this[i], "olddisplay"); if ( !old && old !== "none" ) jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display")); } // Set the display of the elements in a second loop // to avoid the constant reflow for ( var i = 0, l = this.length; i < l; i++ ){ this[i].style.display = "none"; } return this; } }, // Save the old toggle function _toggle: jQuery.fn.toggle, toggle: function( fn, fn2 ){ var bool = typeof fn === "boolean"; return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ? this._toggle.apply( this, arguments ) : fn == null || bool ? this.each(function(){ var state = bool ? fn : jQuery(this).is(":hidden"); jQuery(this)[ state ? "show" : "hide" ](); }) : this.animate(genFx("toggle", 3), fn, fn2); }, fadeTo: function(speed,to,callback){ return this.animate({opacity: to}, speed, callback); }, animate: function( prop, speed, easing, callback ) { var optall = jQuery.speed(speed, easing, callback); return this[ optall.queue === false ? "each" : "queue" ](function(){ var opt = jQuery.extend({}, optall), p, hidden = this.nodeType == 1 && jQuery(this).is(":hidden"), self = this; for ( p in prop ) { if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden ) return opt.complete.call(this); if ( ( p == "height" || p == "width" ) && this.style ) { // Store display property opt.display = jQuery.css(this, "display"); // Make sure that nothing sneaks out opt.overflow = this.style.overflow; } } if ( opt.overflow != null ) this.style.overflow = "hidden"; opt.curAnim = jQuery.extend({}, prop); jQuery.each( prop, function(name, val){ var e = new jQuery.fx( self, opt, name ); if ( /toggle|show|hide/.test(val) ) e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop ); else { var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/), start = e.cur(true) || 0; if ( parts ) { var end = parseFloat(parts[2]), unit = parts[3] || "px"; // We need to compute starting value if ( unit != "px" ) { self.style[ name ] = (end || 1) + unit; start = ((end || 1) / e.cur(true)) * start; self.style[ name ] = start + unit; } // If a +=/-= token was provided, we're doing a relative animation if ( parts[1] ) end = ((parts[1] == "-=" ? -1 : 1) * end) + start; e.custom( start, end, unit ); } else e.custom( start, val, "" ); } }); // For JS strict compliance return true; }); }, stop: function(clearQueue, gotoEnd){ var timers = jQuery.timers; if (clearQueue) this.queue([]); this.each(function(){ // go in reverse order so anything added to the queue during the loop is ignored for ( var i = timers.length - 1; i >= 0; i-- ) if ( timers[i].elem == this ) { if (gotoEnd) // force the next step to be the last timers[i](true); timers.splice(i, 1); } }); // start the next in the queue if the last step wasn't forced if (!gotoEnd) this.dequeue(); return this; }});// Generate shortcuts for custom animationsjQuery.each({ slideDown: genFx("show", 1), slideUp: genFx("hide", 1), slideToggle: genFx("toggle", 1), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }}, function( name, props ){ jQuery.fn[ name ] = function( speed, callback ){ return this.animate( props, speed, callback ); };});jQuery.extend({ speed: function(speed, easing, fn) { var opt = typeof speed === "object" ? speed : { complete: fn || !fn && easing || jQuery.isFunction( speed ) && speed, duration: speed, easing: fn && easing || easing && !jQuery.isFunction(easing) && easing }; opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default; // Queueing opt.old = opt.complete; opt.complete = function(){ if ( opt.queue !== false ) jQuery(this).dequeue(); if ( jQuery.isFunction( opt.old ) ) opt.old.call( this ); }; return opt; }, easing: { linear: function( p, n, firstNum, diff ) { return firstNum + diff * p; }, swing: function( p, n, firstNum, diff ) { return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum; } }, timers: [], fx: function( elem, options, prop ){ this.options = options; this.elem = elem; this.prop = prop; if ( !options.orig ) options.orig = {}; }});jQuery.fx.prototype = { // Simple function for setting a style value update: function(){ if ( this.options.step ) this.options.step.call( this.elem, this.now, this ); (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this ); // Set display property to block for height/width animations if ( ( this.prop == "height" || this.prop == "width" ) && this.elem.style ) this.elem.style.display = "block"; }, // Get the current size cur: function(force){ if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) return this.elem[ this.prop ]; var r = parseFloat(jQuery.css(this.elem, this.prop, force)); return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0; }, // Start an animation from one number to another custom: function(from, to, unit){ this.startTime = now(); this.start = from; this.end = to; this.unit = unit || this.unit || "px"; this.now = this.start; this.pos = this.state = 0; var self = this; function t(gotoEnd){ return self.step(gotoEnd); } t.elem = this.elem; if ( t() && jQuery.timers.push(t) && !timerId ) { timerId = setInterval(function(){ var timers = jQuery.timers; for ( var i = 0; i < timers.length; i++ ) if ( !timers[i]() ) timers.splice(i--, 1); if ( !timers.length ) { clearInterval( timerId ); timerId = undefined; } }, 13); } }, // Simple 'show' function show: function(){ // Remember where we started, so that we can go back to it later this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop ); this.options.show = true; // Begin the animation // Make sure that we start at a small width/height to avoid any // flash of content this.custom(this.prop == "width" || this.prop == "height" ? 1 : 0, this.cur()); // Start by showing the element jQuery(this.elem).show(); }, // Simple 'hide' function hide: function(){ // Remember where we started, so that we can go back to it later this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop ); this.options.hide = true; // Begin the animation this.custom(this.cur(), 0); }, // Each step of an animation step: function(gotoEnd){ var t = now(); if ( gotoEnd || t >= this.options.duration + this.startTime ) { this.now = this.end; this.pos = this.state = 1; this.update(); this.options.curAnim[ this.prop ] = true; var done = true; for ( var i in this.options.curAnim ) if ( this.options.curAnim[i] !== true ) done = false; if ( done ) { if ( this.options.display != null ) { // Reset the overflow this.elem.style.overflow = this.options.overflow; // Reset the display this.elem.style.display = this.options.display; if ( jQuery.css(this.elem, "display") == "none" ) this.elem.style.display = "block"; } // Hide the element if the "hide" operation was done if ( this.options.hide ) jQuery(this.elem).hide(); // Reset the properties, if the item has been hidden or shown if ( this.options.hide || this.options.show ) for ( var p in this.options.curAnim ) jQuery.attr(this.elem.style, p, this.options.orig[p]); // Execute the complete function this.options.complete.call( this.elem ); } return false; } else { var n = t - this.startTime; this.state = n / this.options.duration; // Perform the easing function, defaults to swing this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration); this.now = this.start + ((this.end - this.start) * this.pos); // Perform the next step of the animation this.update(); } return true; }};jQuery.extend( jQuery.fx, { speeds:{ slow: 600, fast: 200, // Default speed _default: 400 }, step: { opacity: function(fx){ jQuery.attr(fx.elem.style, "opacity", fx.now); }, _default: function(fx){ if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) fx.elem.style[ fx.prop ] = fx.now + fx.unit; else fx.elem[ fx.prop ] = fx.now; } }});if ( document.documentElement["getBoundingClientRect"] ) jQuery.fn.offset = function() { if ( !this[0] ) return { top: 0, left: 0 }; if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] ); var box = this[0].getBoundingClientRect(), doc = this[0].ownerDocument, body = doc.body, docElem = doc.documentElement, clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0, top = box.top + (self.pageYOffset || jQuery.boxModel && docElem.scrollTop || body.scrollTop ) - clientTop, left = box.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft; return { top: top, left: left }; };else jQuery.fn.offset = function() { if ( !this[0] ) return { top: 0, left: 0 }; if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] ); jQuery.offset.initialized || jQuery.offset.initialize(); var elem = this[0], offsetParent = elem.offsetParent, prevOffsetParent = elem, doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement, body = doc.body, defaultView = doc.defaultView, prevComputedStyle = defaultView.getComputedStyle(elem, null), top = elem.offsetTop, left = elem.offsetLeft; while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) { computedStyle = defaultView.getComputedStyle(elem, null); top -= elem.scrollTop, left -= elem.scrollLeft; if ( elem === offsetParent ) { top += elem.offsetTop, left += elem.offsetLeft; if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.tagName)) ) top += parseInt( computedStyle.borderTopWidth, 10) || 0, left += parseInt( computedStyle.borderLeftWidth, 10) || 0; prevOffsetParent = offsetParent, offsetParent = elem.offsetParent; } if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) top += parseInt( computedStyle.borderTopWidth, 10) || 0, left += parseInt( computedStyle.borderLeftWidth, 10) || 0; prevComputedStyle = computedStyle; } if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) top += body.offsetTop, left += body.offsetLeft; if ( prevComputedStyle.position === "fixed" ) top += Math.max(docElem.scrollTop, body.scrollTop), left += Math.max(docElem.scrollLeft, body.scrollLeft); return { top: top, left: left }; };jQuery.offset = { initialize: function() { if ( this.initialized ) return; var body = document.body, container = document.createElement('div'), innerDiv, checkDiv, table, td, rules, prop, bodyMarginTop = body.style.marginTop, html = '<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>'; rules = { position: 'absolute', top: 0, left: 0, margin: 0, border: 0, width: '1px', height: '1px', visibility: 'hidden' }; for ( prop in rules ) container.style[prop] = rules[prop]; container.innerHTML = html; body.insertBefore(container, body.firstChild); innerDiv = container.firstChild, checkDiv = innerDiv.firstChild, td = innerDiv.nextSibling.firstChild.firstChild; this.doesNotAddBorder = (checkDiv.offsetTop !== 5); this.doesAddBorderForTableAndCells = (td.offsetTop === 5); innerDiv.style.overflow = 'hidden', innerDiv.style.position = 'relative'; this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5); body.style.marginTop = '1px'; this.doesNotIncludeMarginInBodyOffset = (body.offsetTop === 0); body.style.marginTop = bodyMarginTop; body.removeChild(container); this.initialized = true; }, bodyOffset: function(body) { jQuery.offset.initialized || jQuery.offset.initialize(); var top = body.offsetTop, left = body.offsetLeft; if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) top += parseInt( jQuery.curCSS(body, 'marginTop', true), 10 ) || 0, left += parseInt( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0; return { top: top, left: left }; }};jQuery.fn.extend({ position: function() { var left = 0, top = 0, results; if ( this[0] ) { // Get *real* offsetParent var offsetParent = this.offsetParent(), // Get correct offsets offset = this.offset(), parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset(); // Subtract element margins // note: when an element has margin: auto the offsetLeft and marginLeft // are the same in Safari causing offset.left to incorrectly be 0 offset.top -= num( this, 'marginTop' ); offset.left -= num( this, 'marginLeft' ); // Add offsetParent borders parentOffset.top += num( offsetParent, 'borderTopWidth' ); parentOffset.left += num( offsetParent, 'borderLeftWidth' ); // Subtract the two offsets results = { top: offset.top - parentOffset.top, left: offset.left - parentOffset.left }; } return results; }, offsetParent: function() { var offsetParent = this[0].offsetParent || document.body; while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static') ) offsetParent = offsetParent.offsetParent; return jQuery(offsetParent); }});// Create scrollLeft and scrollTop methodsjQuery.each( ['Left', 'Top'], function(i, name) { var method = 'scroll' + name; jQuery.fn[ method ] = function(val) { if (!this[0]) return null; return val !== undefined ? // Set the scroll offset this.each(function() { this == window || this == document ? window.scrollTo( !i ? val : jQuery(window).scrollLeft(), i ? val : jQuery(window).scrollTop() ) : this[ method ] = val; }) : // Return the scroll offset this[0] == window || this[0] == document ? self[ i ? 'pageYOffset' : 'pageXOffset' ] || jQuery.boxModel && document.documentElement[ method ] || document.body[ method ] : this[0][ method ]; };});// Create innerHeight, innerWidth, outerHeight and outerWidth methodsjQuery.each([ "Height", "Width" ], function(i, name){ var tl = i ? "Left" : "Top", // top or left br = i ? "Right" : "Bottom", // bottom or right lower = name.toLowerCase(); // innerHeight and innerWidth jQuery.fn["inner" + name] = function(){ return this[0] ? jQuery.css( this[0], lower, false, "padding" ) : null; }; // outerHeight and outerWidth jQuery.fn["outer" + name] = function(margin) { return this[0] ? jQuery.css( this[0], lower, false, margin ? "margin" : "border" ) : null; }; var type = name.toLowerCase(); jQuery.fn[ type ] = function( size ) { // Get window width or height return this[0] == window ? // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || document.body[ "client" + name ] : // Get document width or height this[0] == document ? // Either scroll[Width/Height] or offset[Width/Height], whichever is greater Math.max( document.documentElement["client" + name], document.body["scroll" + name], document.documentElement["scroll" + name], document.body["offset" + name], document.documentElement["offset" + name] ) : // Get or set width or height on the element size === undefined ? // Get width or height on the element (this.length ? jQuery.css( this[0], type ) : null) : // Set the width or height on the element (default to pixels if value is unitless) this.css( type, typeof size === "string" ? size : size + "px" ); };});})();应用办法将pcc.sql保留到数据库中,批改conn.php中的连贯数据库相干信息,关上index.php即可看到三级联动: ...

December 13, 2020 · 197 min · jiezi

关于php:PHP设计模式之抽象工厂模式

工厂模式系列中的重头戏来了,没错,那正是传闻中的形象工厂模式。首次听到这个名字的时候你有什么感觉?反正我是感觉这货应该是十分高大上的,毕竟蕴含着“形象”两个字。话说这两个字在开发中真的是有点高大上的感觉,一带上形象两字就如同哪哪都很厉害了呢。不过,形象工厂也的确能够说是工厂模式的大哥大。 Gof类图及解释其实只有了解了工厂办法模式,就很容易明确形象工厂模式。怎么说呢?还是一样的提早到子类,还是一样的返回指定的对象。只是形象工厂外面不仅仅只返回一个对象,而是返回一堆。 GoF定义:提供一个创立一系列相干或相互依赖对象的接口,而无需指定它们具体的类。 GoF类图 右边是两个工厂1和2,都继承一个形象工厂,都实现了CreateProductA和CreateProductB办法工厂1生产的是ProductA1和ProductB1同样的,工厂2生产的是ProductA2和ProductB2代码实现// 商品A形象接口interface AbstractProductA{ public function show(): void;}// 商品A1实现class ProductA1 implements AbstractProductA{ public function show(): void { echo 'ProductA1 is Show!' . PHP_EOL; }}// 商品A2实现class ProductA2 implements AbstractProductA{ public function show(): void { echo 'ProductA2 is Show!' . PHP_EOL; }}// 商品B形象接口interface AbstractProductB{ public function show(): void;}// 商品B1实现class ProductB1 implements AbstractProductB{ public function show(): void { echo 'ProductB1 is Show!' . PHP_EOL; }}// 商品B2实现class ProductB2 implements AbstractProductB{ public function show(): void { echo 'ProductB2 is Show!' . PHP_EOL; }}商品的实现,货色很多吧,这回其实是有四件商品了别离是A1、A2、B1和B2,他们之间假如有这样的关系,A1和B1是同类相干的商品,B1和B2是同类相干的商品 ...

December 12, 2020 · 2 min · jiezi

关于php:PHP-归并排序Merge-Sort

归并排序 工夫复杂度属于 O(nlogn) 级别的,相比于 O(n^2) 级别的排序算法,在解决大的数据量时,它的劣势非常明显,上面通过原理图和代码演示介绍归并排序是如何实现 O(nlogn) 工夫复杂度级别的。 1.将数组中有序的两部归并成一个过程原理图在学习 归并排序 之前,先学习一下应用长期空间将数组中有序的两个局部归并成一个有序局部的原理图 Tips:须要额定应用空间,最初将排好序的值赋值给原来的变量中。合并代码如下: <?phpfunction twoMergeSort($arr,$left,$mid,$right){ $aIndex = $left==$mid ? -1 : $left; $bIndex = $mid==$right ? -1 : $mid; $crr = []; while (($aIndex >= $left && $aIndex < $mid) || ($bIndex >= $mid && $bIndex <= $right)){ $aValue = $arr[$aIndex]??null; $bValue = $arr[$bIndex]??null; if(($aIndex < $left || $aIndex >= $mid) || ($bValue < $aValue && $bValue != null)){ $crr[] = $bValue; $bIndex++; }else{ $crr[] = $aValue; $aIndex++; } } for ($i = 0;$i < ($right - $left);$i++){ $arr[$i+$left] = $crr[$i]; } return $arr;}$arr = [1,4,7,10,15,8,11,13,19,24];print_r(twoMergeSort($arr,0,5,9));/**Array( [0] => 1 [1] => 4 [2] => 7 [3] => 8 [4] => 10 [5] => 11 [6] => 13 [7] => 15 [8] => 19 [9] => 24) */2. 无序数组合成示意图能够应用递归二分的思维把一个无序的数组合成为多个单元素的数组(单元素数组也能够看做有序数组) ...

December 12, 2020 · 2 min · jiezi

关于php:从binswoft开始阅读Swoft框架源码四ConfigProcessor

这个处理器非常简单,甚至都不必一个章节来介绍.Swoft把它作为一个独自的处理器,应该是为了满足它的设计思维吧. 因为Env处理器曾经把.env文件内容加载到php环境,所以Config处理器调用env办法(外部调用getenv办法)设置了APP_DEBUG和SWOFT_DEBUG两个常量. class ConfigProcessor extends Processor{ /** * Handle config */ public function handle(): bool { // Define constant $this->defineConstant(); if (!$this->application->beforeConfig()) { return false; } return $this->application->afterConfig(); } /** * Define constant */ protected function defineConstant(): void { // Define some global constants define('APP_DEBUG', (int)env('APP_DEBUG', 0)); define('SWOFT_DEBUG', (int)env('SWOFT_DEBUG', 0)); }}总结: 因为EnvProcessor曾经将.env文件的配置加载到php中,所以以后处理器可能应用env办法获取.env中的配置信息.

December 12, 2020 · 1 min · jiezi

关于php:在-docker-中搭建-swoole-运行环境

这里应用 swoole 官网的镜像:https://github.com/swoole/doc... 版本阐明:latest:应用的是最新版本的PHP和Swoole的master分支php7.x:应用的是7.x版本的PHP和Swoole的master分支4.x.x-php7.x:应用的是7.x.xx版本的PHP和Swoole的4.x.x分支装置测试:拉取指定版本的镜像: docker pull phpswoole/swoole:4.5.9-php7.4测试镜像环境: docker run --rm phpswoole/swoole:4.5.9-php7.4 "php -m"docker run --rm phpswoole/swoole:4.5.9-php7.4 "php --ri swoole"docker run --rm phpswoole/swoole:4.5.9-php7.4 "composer --version"根本应用:创立HTTP服务器端: # /d/swoole/www/server.php#!/usr/bin/env php<?phpdeclare(strict_types=1);$http = new Swoole\Http\Server("0.0.0.0", 9501);$http->on( "request", function (Swoole\Http\Request $request, Swoole\Http\Response $response) { $response->end( <<<EOT Hello, world! EOT ); });$http->start();启动容器: docker run --rm -p 8000:9501 --name swoole -v /d/swoole/www:/var/www phpswoole/swoole:4.5.9-php7.4测试拜访: curl http://127.0.0.1:8000容器启动后会尝试执行 php server.php 命令启动服务,所以无需手动进入容器执行。 应用 docker-compose 主动重启服务创立 docker-compose.yml 文件: # This docker-compose.yml file shows how Supervisor program(s) are reloaded automatically when file changes detected# under web root /var/www. There are two environment variables used:# 1. AUTORELOAD_PROGRAMS: space-separated Supervisor program(s) to be reloaded when file changes detected. e.g.,# AUTORELOAD_PROGRAMS: "swoole" # Autoreload Supervisor program "swoole" only.# AUTORELOAD_PROGRAMS: "swoole nginx" # Autoreload Supervisor program "swoole" and "nginx".# 2. AUTORELOAD_ANY_FILES: Optional. If set to "true", "1", "yes", or "y", reload Supervisor program(s) when any# files under the root directory (/var/www in this example) is changed; otherwise, reload only when PHP file(s)# are changed.#version: '3'services: app: build: . environment: AUTORELOAD_PROGRAMS: "swoole" AUTORELOAD_ANY_FILES: 0 ports: - 8000:9501 volumes: - ./www:/var/www同目录下创立 Dockerfile 文件: ...

December 11, 2020 · 3 min · jiezi

关于php:如何用Elementor制作Woocommerce产品列表

本文是LOYSEO的外贸网站建设教程内容之一,我将逐渐介绍如何应用Elementor Pro制作woocommerce产品列表模板,上面进入正题。 原文首发于:https://loyseo.com/creating-a... 视频教程<iframe frameborder="0" src="https://v.qq.com/txp/iframe/player.html?vid=a3208zk0jam" allowfullscreen="true" height="600"></iframe> 20201129备注:1.你也能够用上面图文教程中的post元素块来制作产品列表;2.在视频中,在侧边栏插入的搜寻按钮换行问题是主题Bug,你能够装置一个Ajax Search for WooCommerce来代替它(相干教程排期中)图文教程进入“ 模板”>“增加新模板”,抉择类型为 “Product archive”,为其命名,而后单击“ 创立模板” 而后,在弹出的模板库页面上,能够抉择一个模板,点击insert按钮导入 导入后,页面上只有两个元素,一个是archive title(列表题目)、一个是archive products(产品列表),请点选他们后右键删除,模板里的元素块都不好用,设置受限,咱们会换两个施展空间更大的元素;而后依照下图所示,将题目的context选项敞开,敞开后就不会在题目前显示文案“Archives:”了。 接下来按下图所示,咱们在左侧元素库中搜寻Heading元素,并将它拖拽到右侧的画布中,依照下图设置,点击title右侧的按钮,并抉择archive title,并在setting中将题目的include context选项敞开,敞开后就不会在题目前显示文案“Archives:”了;此外,将HTML tag从H2改为H1,示意以后题目为整个页面的大题目。 而后,咱们在左侧元素库中搜寻POST元素,并将它拖拽到右侧的画布中,而后按左侧图片所示,设置这个POST元素的Query,将source选为current query,因为默认post元素是展现Posts(文章)的,设置为current query,就能够依据页面的用处来选取展现的内容,这里咱们做的是产品列表,那么就会取产品展现,譬如关上某个产品分类页面时,就会取该分类下的产品展现。 再次,咱们能够按需调整一下产品的皮肤,见下图,有三种模式:classic、cards、full content,我比拟喜爱第二种card,也是下图中所示的成果。 接下来咱们进行细节调整,下图是调整后的成果: colunms:默认为3,示意一行展现3个产品,点击旁边的电脑图标,能够切换到平板、手机设施模式,这样能够配置在不同设施上一行能展现的产品数量Posts per page:默认为6,示意一页展现6个产品,你也能够设置为-1,那就是一页展现所有产品。Show image:默认为YES,示意展现产品图片,若抉择NO,那就不展现图片啦Masonry:默认是敞开的,敞开时,不管产品简介内容长短,每一行的产品都是等高的,如果一行中产品简介又长又短,那么短的下方会留有空白;若开启masonry时,那产品就像砌墙一样,不会留有空白,而是错落有致。(说了这么多不如你本人点一下按钮试试看了~)Image size:调整图片的尺寸,默认是300×300px,个别也不必改Image ratio:用于设置图片比例,通常放弃默认的0.66即可Title:默认为开启,滑动开关能够抉择显示或暗藏题目Title html tag:默认是H3,因为页面的题目是H1,如果页面没有其余H2的话,此处我倡议改为H2Excerpt:默认为开启,抉择显示或暗藏产品简介(又叫产品简短形容)Excerpt length:设置简介的文字长度,默认为25,按需增减吧Meta data:默认是data、comments,还有author、time两个选项,能够多选,但作为产品列表页,咱们将他们都去掉,去掉就不再显示在产品中了Separator between:默认是·,用于距离不同的mata dataRead more:默认是开启,滑动开关能够抉择显示或暗藏查看更多按钮Read more Text:在这里设置按钮的文案,默认是read moreopen in new windows:默认是敞开,滑动开关能够抉择是否须要开启在新窗口关上产品Badge:徽章,显示在图片上,滑动开关能够抉择显示或暗藏徽章Badge taxonomy:此处抉择徽章上显示的内容,如果是产品列表页,此处要改为product categoryAvatar:滑动开关能够抉择显示或暗藏发表以后产品或文章的用户头像,默认是开启,此案例中我将它敞开最初,咱们点击左下角的update,并将conditon设置为all product archive,保留后,产品列表模板页面就实现了,咱们就能够去找到任一产品分类,关上它的的页面查看一下了。 相干教程:对模板进行款式调整、增加自定义的产品字段查看更多Elementor教程 本文原文由LOYSEO 公布,LOYSEO专一于WordPress外贸网站建设教程、Elementor教程。

December 11, 2020 · 1 min · jiezi

关于php:从binswoft开始阅读Swoft框架源码三EnvProcessor

Swoft\Processor\EnvProcessor是利用执行run后第一个调用的处理器. handle办法代码: public function handle(): bool{ if (!$this->application->beforeEnv()) { CLog::warning('Stop env processor by beforeEnv return false'); return false; } // 依据env文件别名获取env文件实在门路 $envFile = Swoft::getAlias($this->application->getEnvFile()); // Fix: In phar package, remove phar:// prefix if (IN_PHAR) { $envFile = Str::rmPharPrefix($envFile); } // 如果env文件不存在 则控制台打印正告信息 if (!file_exists($envFile)) { CLog::warning('Env file(%s) is not exist! skip load it', $envFile); return $this->application->afterEnv(); } // 加载env信息 // 此处应用的是vlucas包 // vlucas官网镜像对此包的阐明如下: // Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically. // 翻译过去就是主动将.env文件中的内容加载到php的 // $_ENV和$_SERVER,应用getenv()函数能获取其中的内容 // Load env info $factory = new DotenvFactory([ new EnvConstAdapter, new PutenvAdapter, new ServerConstAdapter ]); $path = dirname($envFile); $name = basename($envFile); Dotenv::create($path, $name, $factory)->overload(); // 打印加载实现信息 CLog::info('Env file(%s) is loaded', $envFile); return $this->application->afterEnv();}总结: ...

December 11, 2020 · 1 min · jiezi

关于php:从binswoft开始阅读Swoft框架源码二Application的run方法

Application初始化实现之后只做了一个动作:run.本章就从run办法开始,逐渐深刻后续的调用. 先看run的代码: public function run(): void{ try { if (!$this->beforeRun()) { return; } $this->processor->handle(); } catch (Throwable $e) { // 如果代码执行出现异常,将被此处捕捉并打印在控制台 Console::colored(sprintf('%s(code:%d) %s', get_class($e), $e->getCode(), $e->getMessage()), 'red'); Console::colored('Code Trace:', 'comment'); echo $e->getTraceAsString(), "n"; }}内容简洁,所有逻辑都交给了以后对象的processor去解决.processor的代码: public function handle(): bool{ // 到目前为止程序中还未设置生效的处理器,所以此处为空数组 $disabled = $this->application->getDisabledProcessors(); // 遍历$this->processors调用每一个处理器的handle办法 // $this->processors就是上一章中初始化设置的那6个处理器 // 他们会被程序执行,执行程序是: // Swoft\Processor\EnvProcessor // Swoft\Processor\ConfigProcessor // Swoft\Processor\AnnotationProcessor // Swoft\Processor\BeanProcessor // Swoft\Processor\EventProcessor // Swoft\Processor\ConsoleProcessor foreach ($this->processors as $processor) { $class = get_class($processor); // If is disabled, skip handle. if (isset($disabled[$class])) { continue; } $processor->handle(); } return true;}从下一章开始,将依照调用程序,每一章解说一个处理器. ...

December 11, 2020 · 1 min · jiezi

关于php:好未来举办首届PHP开源技术大会

12月5日,好将来第一届PHP开源技术大会在北京举办。大会以“开源·分享·共建”为主题,由智慧教育国家新一代人工智能凋谢翻新平台和好将来联结主办,开源中国技术社区协办。 本次大会邀请了多位PHP畛域的技术大咖,为千余名开发者和技术爱好者进行全天的前沿技术干货分享,详尽展现了当下煊赫一时的PHP技术全貌和技术开源倒退新态势,为推动科技教育长线倒退注入新动能。 (好将来第一届PHP开源技术大会在京举行) 作为智慧教育国家新一代人工智能凋谢翻新平台建设单位,好将来提倡开源、分享、共建的理念,致力于用技术推动行业倒退。从2020年8月,好将来正式上线首个开源我的项目并颁布开源路线图开始,截至目前,已累计上线了30多个开源组件,在寰球某支流开源社区取得的Star数量已超3000个,并面向行业凋谢了超过10项智慧教育解决方案,超过5类教学数据集。 作为大会主办方代表,好将来团体CTO田密示意,好将来器重技术的长期价值,心愿通过开源放大技术的能量,实现人才聚合与协同翻新,将通过教育行业简单业务考验的技术和教训向开发者赋能,帮忙更多技术人进入行业,播种成长,独特构建一个“共生”“互生”“创生”的智慧教育新生态,这也是好将来举办开源技术大会的初心。 (好将来团体CTO田密发表收场致辞) 会上,好将来旗下学而思网校首席架构师、Swoole开源我的项目创始人韩天峰对扭转PHP将来的新技术做了瞻望,波及PHP 8、JIT、Docker、Composer2、Swoole、Golang、K8s、Service Mesh、QUIC、云原生、物联网等12项技术。他示意,学而思网校也将第一工夫利用这些新技术,实现响应性能、稳定性和解决效率的晋升,为学生和老师带来更“丝滑晦涩”的在线教育体验。 因为疫情无奈来到现场的德国PHP内核外围开发者Nikita,借助视频分享了值得开发者重点关注的PHP 8——PHP全新一代大版本的新个性,包含JIT,注解、联结类型,以及更严格的错误处理和加强的类型平安。长期沉闷于各大开源社区的PHP和Swoole内核开发者陈曹奇昊也从实操的角度“现场教学”,具体介绍了PHP 8与下一代协程技术的演进。KK团体技术负责人、Hyperf开源我的项目负责人黄朝晖分享了启动Hyperf我的项目的初心及外围逻辑,揭秘一个胜利的开源我的项目是如何灵便满足不同生命周期的企业需要的实战经验。 开发者每天都在和数据库打交道,“玩转”数据库是技术人从入门到精通的必经之路。阿里云数据库产品事业部高级技术专家陈宗志具体介绍了PolarDB云原生数据库的核心技术和内核优化。知数堂联结创始人吴炳锡将15年MySQL数据库从业教训娓娓道来,用技术剖析和业务实例阐释了如何利用MySQL 8.0帮业务增效的秘诀。PingCAP联结创始人兼CTO黄东旭则带开发者“遍历”当下支流分布式数据库的设计模式,并大开“脑洞”畅想了下一代数据库的新形态。 运维是产品可能稳固、平安、高效的根底保障,以教育行业为例,疫情期间面对在线教育流量的暴增,运维的技术响应能力是保障学而思网校面对百万并发、千万日均流量,实现“复课不停学”的关键因素之一。大会现场,云智慧技术副总裁高驰涛率领参会人员深入浅出地速览了AIOPS实现智能运维的关键技术、利用场景和将来瞻望。 PHP如何与风行的技术趋势相结合也是开发者关注的热门话题,其中“容器化”更是技术趋势中的“顶流”。好将来后端资深专家陈朝飞以学而思网校后端“网校云”的容器化落地实际为案例,分享如何从传统PHP利用向容器化迁徙的实战经验,以及用软件工程的方法论解决生产零碎稳固问题。 腾讯高级工程师,《PHP 7内核分析》一书的作者秦朋以本身的成长为例,分享了如何从只会PHP的技术小白成长为合格工程师,从技术人才倒退的角度帮忙更多开发者。 (大会现场技术人热情高涨) 流动最初,好将来开源我的项目负责人谢华亮于大会落幕发言中总结,以本次开源技术大会为终点,好将来心愿为技术人搭建业余、纯正、高水准的技术分享与成长平台,独特用技术推动教育提高。 补充材料:对于PHP开源技术大会的全副PPT材料及直播回放视频已上传至“好将来技术”公众号。各位有趣味的老师能够扫描下方二维码关注“好将来技术”公众号,回复"PHP"获取大会第一手材料! 

December 11, 2020 · 1 min · jiezi

关于php:从binswoft开始阅读Swoft框架源码一Application的初始化

bean/swoft中的代码如下: // 引入bootstrap.php文件// 实际上bootstrap.php只干了一件事:引入/vendor/autoload.php// 由autoload.php来加载我的项目中的库类// Bootstraprequire_once __DIR__ . '/bootstrap.php';// 设置最大协程数量SwooleCoroutine::set([ 'max_coroutine' => 300000,]);// 实例化application// 调用application的run办法执行利用// run办法申明在Swoft\Contract\ApplicationInterface// 实现在Swoft\SwoftApplication// Run application(new AppApplication())->run();AppApplication的实现很简略: class Application extends SwoftApplication{ protected function beforeInit(): void { parent::beforeInit(); // 设置时区 // you can init php setting. date_default_timezone_set('Asia/Shanghai'); } /** * @return array */ public function getCLoggerConfig(): array { $config = parent::getCLoggerConfig(); // False: Dont print log to terminal // 将控制台输入关上 $config['enable'] = true; return $config; }}外面只是重写了父类SwoftApplication的beforeInit办法和`getCLoggerConfig办法. ...

December 11, 2020 · 3 min · jiezi

关于php:Swoft的HttpServer启动及请求工作流程五补充startstoprestartreload命令

本章节补充一下命令行启动、敞开、重启和重载Http服务的实现类Swoft\Http\Server\Command\HttpServerCommand地位/vendor/swoft/http-server/src/Commond/HttpServerCommand.php 开启办法: public function start(): void{ // 创立服务,实质上是获取httpServer的单例 // 并给httpServer绑定以后执行的脚本和命令等参数 // 后附createServer的实现 $server = $this->createServer(); // 打印服务根本信息,设置是否后盾运行参数 // 后附实现代码 $this->showServerInfoPanel($server); // 启动服务,这一步调用的后续就到了本系列的第一章,Server的启动 // Start the server $server->start();}createServer的实现: private function createServer(): HttpServer{ // 通过命令行的input获取执行脚本 $script = input()->getScriptFile(); // 获取以后执行的命令 $command = $this->getFullCommand(); // 获取httpServer的单例bean对象 /** @var HttpServer $server */ $server = bean('httpServer'); // 将执行脚本和执行命令设置给httpServer $server->setScriptFile(Swoft::app()->getPath($script)); $server->setFullCommand($command); return $server;}showServerInfoPanel的实现: protected function showServerInfoPanel(Server $server): void{ // 打印swoft的banner图,也就是咱们在命令行看到的 // 后附打印成果 $this->showSwoftBanner(); // 如果服务曾经是运行状态,则打印错误信息并返回 // Check if it has started if ($server->isRunning()) { $masterPid = $server->getPid(); output()->writeln("<error>The server have been running!(PID: {$masterPid})</error>"); return; } // 配置启动选项,实际上就是设置是否后盾运行 // 后附实现代码 // Startup config $this->configStartOption($server); // 获取server的类型,因为咱们此处拿的是httpServer // 所以此处的返回是HTTP // Server startup parameters $sType = $server->getServerType(); // 面板信息 // Main server info $panel = [ // 依据传人的server参数,获取监听的地址和端口、服务模式、woerker数量、taskWorker数量等根底设置信息 $sType => $this->buildMainServerInfo($server), ]; // 将bean.php中配置的须要监听的rpc、tcp等更多的listener // 信息增加到面板信息中 // Port listeners $panel = $this->appendPortsToPanel($server, $panel); // 题目信息 $title = sprintf('SERVER INFORMATION(v%s)', Swoft::VERSION); // 将配置好的面板信息输入到管制台上 // 后附效果图 // Show server info Show::panel($panel, $title, [ 'titleStyle' => 'cyan', ]); // 输入服务启动胜利音讯,实际上此处还未真正的调用服务的start办法 $bgMsg = '!'; if ($server->isDaemonize()) { $bgMsg = '(Run in background)!'; } output()->writef("<success>$sType Server Start Success{$bgMsg}</success>");}swoftBanner效果图: ...

December 11, 2020 · 4 min · jiezi

关于php:hyperf-使用模型写-union-子查询并做分页

hyperf 应用模型写 union 子查问并做分页最终须要实现的 sql 语句为如下所示:SELECT `dfo_al`.* FROM ( (SELECT `dfo_account_log`.`log_id`, `dfo_account_log`.`change_time`, `dfo_account_log`.`user_id`, `dfo_account_log`.`pay_points`, `dfo_account_log`.`change_type`, `dfo_account_log`.`from_user_id`, `dfo_u`.`user_id` AS `u_user_id`, `dfo_u`.`username`, `dfo_u`.`head_pic`, `dfo_u`.`vip_time` FROM `dfo_account_log` LEFT JOIN `dfo_users` AS `dfo_u` ON `dfo_account_log`.`user_id` = `dfo_u`.`user_id` WHERE ( `dfo_account_log`.`user_id` = 3649 AND `dfo_account_log`.`pay_points` > 0 ) AND ( `dfo_account_log`.`from_user_id` IS NULL OR `dfo_account_log`.`from_user_id` = 0 ) ) UNION (SELECT `dfo_account_log`.`log_id`, `dfo_account_log`.`change_time`, `dfo_account_log`.`user_id`, `dfo_account_log`.`pay_points`, `dfo_account_log`.`change_type`, `dfo_account_log`.`from_user_id`, `dfo_u`.`user_id` AS `u_user_id`, `dfo_u`.`username`, `dfo_u`.`head_pic`, `dfo_u`.`vip_time` FROM `dfo_account_log` LEFT JOIN `dfo_users` AS `dfo_u` ON `dfo_account_log`.`from_user_id` = `dfo_u`.`user_id` WHERE ( `dfo_account_log`.`user_id` = 3649 AND `dfo_account_log`.`pay_points` > 0 ) AND ( `dfo_account_log`.`from_user_id` IS NOT NULL OR `dfo_account_log`.`from_user_id` > 0 ) ) ) AS dfo_al ORDER BY `log_id` DESC LIMIT 2 OFFSET 0hyperf 代码为 $tbl = 'account_log'; $where = [ [$tbl . '.user_id', '=', auth()->user_id], [$tbl . '.pay_points', '>', 0] ]; $fields = [ $tbl . '.log_id', $tbl . '.change_time', $tbl . '.user_id', $tbl . '.pay_points', $tbl . '.change_type', $tbl . '.from_user_id', 'u.user_id AS u_user_id', 'u.username', 'u.head_pic', 'u.vip_time' ]; $table1 = $this->accountLogModel ->leftJoin('users as u', $tbl . '.user_id', '=', 'u.user_id') ->select($fields) ->where($where) ->where(function ($query) use ($tbl) { $query->whereNull($tbl . '.from_user_id')->orWhere($tbl . '.from_user_id', 0); }); $table2 = $this->accountLogModel ->leftJoin('users as u', $tbl . '.from_user_id', '=', 'u.user_id') ->select($fields) ->where($where) ->where(function ($query) use ($tbl) { $query->whereNotNull($tbl . '.from_user_id')->orWhere($tbl . '.from_user_id', '>', 0); }); $table = $table1->union($table2); $tablePrefix = Db::connection()->getTablePrefix(); // 获取数据表前缀 => 或者应用 $tablePrefix = Db::getConfig('prefix'); 都能够 $model = $this->accountLogModel ->mergeBindings($table->getQuery()) ->select(['al.*']) ->from(Db::raw("({$table->toSql()}) as {$tablePrefix}" . 'al')); return $model->orderBy('log_id', 'desc')->paginate(2);

December 11, 2020 · 2 min · jiezi

关于php:数据结构PHP-字典树Trie的实现

这篇文章介绍一下字典树的实现原理,又称单词查找树、Trie树,是一种树形构造,是一种哈希树的变种。典型利用是用于统计,排序和保留大量的字符串(但不仅限于字符串),所以常常被搜索引擎零碎用于文本词频统计。它的长处是:利用字符串的公共前缀来缩小查问工夫,最大限度地缩小无谓的字符串比拟,查问效率比哈希树高。 1.字典树(Trie)示意图 2.节点定义class Node{ public $isWord; public $value;//能够存储示意其余信息 public $next; //这是一颗 Map 树,指向其余 25 个字母 public function __construct(){ $this->next = new BinarySearchTreeMap(); }}3.Trie 字典树类定义如下定义了一个字典树(Trie),其中add() 办法能够向 字典树 中增加单词,contains() 能够查问 字典树(Trie) 中是否蕴含某个单词,isPrefix() 办法能够判断字典树上是否有指定字符串前缀的单词: <?phprequire $root . "/Map/BinarySearchTreeMap.php";/** * 字典树 * Class Trie */class Trie{ private $root = null; private $size; public function __construct() { $this->root = new TrieNode(); } /** * 向字典树中增加 * @param string $word向字段树中增加元素 */ public function add(string $word, $value) { $node = $this->root; for ($i = 0; $i < strlen($word); $i++) { $c = $word[$i]; if ($node->next->get($c) == null) { $node->next->add($c, new TrieNode($value)); } $node = $node->next->get($c); } if (!$node->isWord) { $node->isWord = true; $this->size++; } } /** * 查看单词 word 是否存在 Trie 树中 * @param $word */ public function contains($word) { $node = $this->root; for ($i = 0; $i < strlen($word); $i++) { $c = $word[$i]; if ($node->next->get($c) == null) { return false; } $node = $node->next->get($c); } if ($node->isWord) { return true; } else { return false; } } /** * 获取字段树节点信息 * @param $word */ public function get($word) { $node = $this->root; for ($i = 0; $i < strlen($word); $i++) { $c = $word[$i]; if ($node->next->get($c) == null) { return null; } $node = $node->next->get($c); } return $node->value; } /** * 判断某个字符串是否为单词前缀 * @param string $prefix * @return bool */ public function isPrefix(string $prefix) { $node = $this->root; for ($i = 0; $i < strlen($prefix); $i++) { $c = $prefix[$i]; if ($node->next->get($c) == null) { return false; } $node = $node->next->get($c); } return false; } public function getSize() { return $this->size; }}class TrieNode{ public $isWord = false; public $next; public $value = null; public function __construct($value = null) { $this->value = $value; $this->next = new BinarySearchTreeMap(); }}4.输入演示<?phprequire 'Trie.php';$trie = new Trie();$trie->add('qsx',123);$trie->add('dog',456);$trie->add('cat',789);$trie->add('else',111);$trie->add('good',111);var_dump($trie->contains('qsx'));var_dump($trie->contains('dog'));var_dump($trie->contains('aaaa'));var_dump($trie->contains('ddd'));var_dump($trie->get('qsx'));var_dump($trie->get('cat'));var_dump($trie->get('dog'));var_dump($trie->get('good'));var_dump($trie->isPrefix('go'));var_dump($trie->isPrefix('goo'));var_dump($trie->isPrefix('goop')); ...

December 10, 2020 · 2 min · jiezi

关于php:Swoft的HttpServer启动及请求工作流程四onRequest中的调度请求的处理及返回

前文讲到当收到申请后,swoft将swoole原生的Request及Response对象封装成适宜swoft框架外部调用的Swoft\Http\Message\Request以及Swoft\Http\Message\Response.接下来,本章将追随办法$this->dispatcher->dispatch($psrRequest, $psrResponse)逐渐剖析申请到来后的框架的调度过程. 先看Swoft\Http\Server\HttpDispatcher的实现: public function dispatch(...$params): void{ /** * @var Request $request * @var Response $response */ [$request, $response] = $params; $response = $this->configResponse($response); /* @var RequestHandler $requestHandler */ $requestHandler = Swoft::getBean(RequestHandler::class); try { //初始化中间件 $requestHandler->initialize($this->requestMiddlewares, $this->defaultMiddleware); // 创立新的HttpContext并设置到Context中 // 在业务逻辑中获取到的Context就是这里设置的HttpContext // 前面附上此办法的源码调用 // Before request $this->beforeRequest($request, $response); // 触发BEFORE_REQUEST事件 // Trigger before handle event Swoft::trigger(HttpServerEvent::BEFORE_REQUEST, null, $request, $response); // 匹配路由,将路由信息绑定在新的Request对象上,返回 // Match router and handle $request = $this->matchRouter($request); // 调用handle解决申请,实际上就是解决中间件 // 控制器的执行也是放在中间件中执行的 // Swoft\Http\Server\Middleware\DefaultMiddleware $response = $requestHandler->handle($request); } catch (Throwable $e) { // 在解决申请时若发送异样会被零碎在此处捕捉 // 而后调用HttpErrorDispatcher去解决对应的异样 // 咱们在业务中注册的异样解决类就是在此处失去执行 /** @var HttpErrorDispatcher $errDispatcher */ $errDispatcher = Swoft::getSingleton(HttpErrorDispatcher::class); // Handle request error $response = $errDispatcher->run($e, $response); } try { // 调用格式化解决对象来格式化失去的response // Format response content type $response = $this->acceptFormatter->format($response); // 触发AFTER_REQUEST事件 // Trigger after request Swoft::trigger(HttpServerEvent::AFTER_REQUEST, null, $response); // 返回内容给客户端 // 触发协程COROUTINE_DEFER和COROUTINE_COMPLETE事件,前面附代码 // After request $this->afterRequest($response); } catch (Throwable $e) { // 此步骤呈现谬误,则示意未能将内容失常返回给客户端 // 须要写入error级别的谬误,控制台会有error内容打印 // 如果是协程环境(request周期内就是协程环境) // 还会写入日志 Error::log('response error=%s(%d) at %s:%d', $e->getMessage(), $e->getCode(), $e->getFile(), $e->getLine()); }}办法应用的是php中的动静参数传递形式,前文说过,此办法以后获取的request及response变量是Swoft\Http\Message\Request以及Swoft\Http\Message\Response的实例. ...

December 10, 2020 · 3 min · jiezi

关于php:Swoft的HttpServer启动及请求工作流程三Request及Response封装过程

上一回讲到给Server增加了10个swoole监听事件.在增加完swoole的事件后,框架调用Swoft的trigger()办法触发了几种用户注册的生命周期事件.接着框架调用server的start()办法,正式开始承受用户申请.本章将从onRequest事件着手,逐渐剖析Swoole原生的Request及Response封装成Swoft中应用的Swoft\Http\Message\Request和Swoft\Http\Message\Response的过程.先看onRequest代码: public function onRequest(Request $request, Response $response): void{ $psrRequest = ServerRequest::new($request); $psrResponse = ServerResponse::new($response); $this->dispatcher->dispatch($psrRequest, $psrResponse);}此办法是swoole的onRequest回调函数,所以参数传进来的Request和Response别离对应的类型是Swoole\Http\Request和Swoole\Http\Response.能够看到,在收到参数后,框架干的第一件事就是调用Swoft\Http\Message\Request和Swoft\Http\Message\Response的new办法,生成与之对应的合乎psr标准的对象.接着,框架将新生成的request和response对象作为参数传递给调度函数,由调度函数去执行具体的业务逻辑并返回后果给客户端. 实现细节之(Swoft\Http\Message\Request::new):此办法以及外面用到的Uri::new办法都是获取PROTOTYPE模式的bean public static function new(CoRequest $coRequest): self{ //此处获取的bean是一个新的对象,因为以后类的bean注解 //为PROTOTYPE模式 //@Bean(name="httpRequest", scope=Bean::PROTOTYPE) /** @var Request $self */ $self = BeanFactory::getBean('httpRequest'); // Server params // 获取Swoole原生Request对象的server参数 $serverParams = $coRequest->server; // 将Swoole原生Request对象中的header设置到新获取的bean对象上 // Set headers $self->initializeHeaders($headers = $coRequest->header ?: []); // 设置申请形式 $self->method = $serverParams['request_method'] ?? ''; // 绑定原生Request对象到新的bean对象上 $self->coRequest = $coRequest; // 设置GET申请参数 $self->queryParams = $coRequest->get ?: []; // 设置COOKIE $self->cookieParams = $coRequest->cookie ?: []; // 设置SERVER参数 $self->serverParams = $serverParams; // 将申请的URI设置为requestTarget $self->requestTarget = $serverParams['request_uri'] ?? ''; // 设置URI // Save $self->uriPath = $serverParams['request_uri'] ?? ''; // 设置QUERY_STRING $self->uriQuery = $serverParams['query_string'] ?? ''; // 如果URI中还蕴含?号,阐明还须要解决 if (strpos($self->uriPath, '?') !== false) { // Split $parts = explode('?', $self->uriPath, 2); $self->uriPath = $parts[0]; $self->uriQuery = $parts[1] ?? $self->uriQuery; } // 调用Uri类结构Uri对象并绑定给新的bean对象 /** @var Uri $uri */ $self->uri = Uri::new('', [ 'host' => $headers['host'] ?? '', 'path' => $self->uriPath, 'query' => $self->uriQuery, 'https' => $serverParams['https'] ?? '', 'http_host' => $serverParams['http_host'] ?? '', 'server_name' => $serverParams['server_name'] ?? '', 'server_addr' => $serverParams['server_addr'] ?? '', 'server_port' => $serverParams['server_port'] ?? '', ]); // 如果以后headers外面没有host数据,则通过Uri对象去更新 // // Update host by Uri info if (!isset($headers['host'])) { $self->updateHostByUri(); } return $self;}Uri::new的实现: ...

December 10, 2020 · 2 min · jiezi

关于php:Hyperf-发布-v2022-版本企业级的-PHP-微服务云原生协程框架

更新内容本周次要新增了局部个性,并修复了一些组件的 ????Bug,持续晋升 Hyperf 的稳定性,公布于 2.0.22 版。 倡议用户应用以下命令更新此版本。 composer update "hyperf/*" -o间接拜访 官网 hyperf.io 或 文档 hyperf.wiki 查看更新内容 新增#2896 容许 view-engine 组件配置自定义加载类组件和匿名组件。#2921 为 Parallel 减少 count() 办法,返回同时执行的个数。修复#2913 修复应用 ORM 中的 with 预加载逻辑时,会因循环依赖导致内存泄露的问题。#2915 修复 WebSocket 工作过程会因 onMessage or onClose 回调失败,导致过程退出的问题。#2927 修复验证器规定 alpha_dash 不反对 int 的问题。变更#2918 当应用 watcher 组件时,不能够开启 daemonize。#2930 更新 php-amqplib 组件最低版本由 v2.7 到 v2.9.2。优化#2931 判断控制器办法是否存在时,应用理论从容器中失去的对象,而非命名空间。对于 HyperfHyperf 是基于 Swoole 4.5+ 实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量罕用的组件,性能较传统基于 PHP-FPM 的框架有质的晋升,提供超高性能的同时,也放弃着极其灵便的可扩展性,规范组件均基于 PSR 规范 实现,基于弱小的依赖注入设计,保障了绝大部分组件或类都是 可替换 与 可复用 的。 ...

December 10, 2020 · 1 min · jiezi

关于php:酷瓜云课堂腾讯云版v121-发布

通过两周的迭代开发,终于初步实现酷瓜云课堂的 v1.2.1 版本,此次更新修复了以往版本呈现的问题,减少了QQ,微信,微博三个第三方登录。小程序的开发临时搁置(在线教育类的小程序须要办的证件十分麻烦) 我的项目介绍酷瓜云课堂,依靠腾讯云根底服务架构,采纳C扩大框架Phalcon开发,GPL-2.0开源协定,致力开源网课零碎,开源网校零碎,开源在线教育零碎。 零碎性能实现了点播、直播、专栏、会员、微聊等 托管仓库gitee仓库github仓库在线体验情谊提醒: 系统配置低(1核 1G 1M 跑多个容器),切莫压测课程数据来源于网络(无本质内容),切莫购买治理后盾已禁止数据提交,私密配置已过滤演示帐号:13507083515 / 123456 (前后台通用) 桌面端演示: 前台演示后盾演示挪动端演示领取流程演示: MySQL晋升课程全面解说MySQL架构设计(0.01元)Nginx入门到实际Nginx中间件(0.01元)数据库与中间件的根底必修课(0.02元)Tips: 测试领取流程请用手机号注册一个新账户,这样能力接管到订单告诉,以及防止课程无奈购买 我的项目组件后盾框架:phalcon 3.4.5前端框架:layui 2.5.6, layim 3.9.5(已受权)全文检索:xunsearch 1.4.9即时通讯:workerman 3.5.22根底依赖:php7.3, mysql5.7, redis5.0装置指南运行环境搭建零碎服务配置开发计划桌面端:进行中挪动端:进行中小程序:待启动意见反馈在线反馈(举荐)通过这个我的项目能学到什么?我的项目布局,phalcon,缓存,JWT,即时通讯,全文检索docker,supervisor,devopsgit,linux,php,mysql,redis,nginx有阿里云版吗?阿里云版布局中,之前阿里云服务过期未续费,所以腾讯云版本先出。 代码有加密吗?所有代码都公开(受权代码除外,例如layim),没有所谓的商业版和付费插件。

December 9, 2020 · 1 min · jiezi

关于php:PHP-常用的数学函数和数值处理函数

罕用的数学函数// 2个任意精度数字的加法echo bcadd($a, $b, 2);// 2个任意精度数字的减法echo bcsub($a, $b, 2);// 2个任意精度数字的乘法echo bcmul($a, $b, 2);// 2个任意精度数字的除法echo bcdiv($a, $b, 2);// 对一个任意精度数字取模(余数)echo bcmod($a, $b);// 一个任意精度数字的乘方echo bcpow($a, $b, 2);// 比拟两个任意精度的数字,相等返回0,大于返回1,小于返回-1echo bccomp($a, $b, 2);应用数学函数有以下几个须要留神的中央: 除 bccomp 外,其余几个函数的返回值都是 string 类型;精度默认为0,对于精度前面小数局部的解决形式是间接去掉,而非四舍五入或进一法取整或舍去法取整;bccomp 会先解决精度再进行比拟。罕用的数值处理函数// 进一法取整echo ceil(4.3); // 5echo ceil(-3.64); // -3// 舍去法取整echo floor(9.999); // 9echo floor(-3.14); // -4// 四舍五入echo round(1.955, 2); // 1.96echo round(2.732, 2); // 2.73其中 round 有可选的第三个参数: PHP_ROUND_HALF_UP 四舍五入(默认)PHP_ROUND_HALF_DOWN 五舍六入应用示例: // PHP_ROUND_HALF_UP 四舍五入echo round(0.001, 2, PHP_ROUND_HALF_UP) . "\n"; // 0echo round(0.003, 2, PHP_ROUND_HALF_UP) . "\n"; // 0echo round(0.005, 2, PHP_ROUND_HALF_UP) . "\n"; // 0.01echo round(0.007, 2, PHP_ROUND_HALF_UP) . "\n"; // 0.01echo round(0.009, 2, PHP_ROUND_HALF_UP) . "\n"; // 0.01// PHP_ROUND_HALF_DOWN 五舍六入echo round(0.001, 2, PHP_ROUND_HALF_DOWN) . "\n"; // 0echo round(0.003, 2, PHP_ROUND_HALF_DOWN) . "\n"; // 0echo round(0.005, 2, PHP_ROUND_HALF_DOWN) . "\n"; // 0echo round(0.007, 2, PHP_ROUND_HALF_DOWN) . "\n"; // 0.01echo round(0.009, 2, PHP_ROUND_HALF_DOWN) . "\n"; // 0.01对小数的取整解决// 向上取整echo ceil(0.051 * 100) / 100 . "\n"; // 0.06echo ceil(0.053 * 100) / 100 . "\n"; // 0.06echo ceil(0.055 * 100) / 100 . "\n"; // 0.06echo ceil(0.057 * 100) / 100 . "\n"; // 0.06echo ceil(0.059 * 100) / 100 . "\n"; // 0.06// 向下取整echo floor(0.051 * 100) / 100 . "\n"; // 0.05echo floor(0.053 * 100) / 100 . "\n"; // 0.05echo floor(0.055 * 100) / 100 . "\n"; // 0.05echo floor(0.057 * 100) / 100 . "\n"; // 0.05echo floor(0.059 * 100) / 100 . "\n"; // 0.05

December 9, 2020 · 2 min · jiezi

关于php:链表的翻转判断链表是否有环

通过学习 链表的翻转 和 判断链表是否有环 这两个简略的例子加深对链表这种数据结构的了解。 1.链表翻转1.1 链表翻转原理图 1.2 链表翻转代码<?phprequire 'LinkedList.php';$linkedList = new LinkedList();for ($i = 1;$i <= 20;$i++){ $linkedList->addFirst($i);}echo $linkedList->toString();/** * 20->19->18->17->16->15->14->13->12->11->10->9->8->7->6->5->4->3->2->1->null */echo "n";function reverse($head){ $pre = $head; $cur = $head->next; while ($cur){ $next = $cur->next; $cur->next = $pre; $pre = $cur; $cur = $next; } $head->next = null; return $pre;}$linkedList->setHead(reverse($linkedList->getHead()));echo $linkedList->toString();/** * 1->2->3->4->5->6->7->8->9->10->11->12->13->14->15->16->17->18->19->20->null */echo "n";演示输入如下图: 2.判断链表是否有环2.1 链表环示意图 2.2 问题剖析在遍历链表的时候能够保护 快 和 慢 两个指针赋值,能够将这两个快慢插设为 1,当遍历到环下面的时候,因为保护的两个指针的快慢相差 1,最初必定会有相遇的时候,若呈现相遇的状况则示意有环,若快指针最初指向 null 示意没有环。 2.3 原理图 2.4 示例代码<?phpclass Node{ public $e;//节点元素 public $next; //下个节点信息 /** * 构造函数 设置节点信息 * Node constructor. * @param $e * @param $next */ public function __construct($e, $next=null) { $this->e = $e; $this->next = $next; }}function isLoop($head){ $fast = $head; $slow = $head; $i = 1; while ($fast !== null && $slow !== null){ if($fast === $slow){ return true; } $fast = $fast->next->next ?? null; //每次跳两步 $slow = $slow->next ?? null; //每次跳一步 if($i) $i++; } return false;}$node1 = new Node(1);$node2 = new Node(2);$node3 = new Node(3);$node4 = new Node(4);$node5 = new Node(5);$node6 = new Node(6);$node7 = new Node(7);$node8 = new Node(8);$node9 = new Node(9);$node1->next = $node2;$node2->next = $node3;$node3->next = $node4;$node4->next = $node5;$node5->next = $node6;$node6->next = $node7;$node7->next = $node8;$node8->next = $node9;$node9->next = $node5;var_dump(isLoop($node1));演示输入如下图: ...

December 9, 2020 · 1 min · jiezi

关于php:标梵互动讲解从头构建PHP原生环境

PHP环境,是HTTP服务器、PHP和数据库软件的汇合,个别能够缩写为LAMP,即Linux+Apache+MySQL+PHP。一般来说,对于个别的学习或者小我的项目,能够间接应用如PHPStudy、XAMPP等“AllinOne”环境等集成环境。然而如果须要进行大型项目或者对配置文件有很高的DIY要求,也能够间接按模块装置配置。本文依据Windows10环境,在PHP环境中装置了本机模块。PHP8.0版公布了,本文写的配置环境是7.4,只需大量批改就能够应用。背景。编辑开始用PHPStudy学习PHP,起初接触了很多集成环境。尽管各有千秋,百家争鸣,但总感觉综合环境有一种“约束力”。他们间接从官网下载最新版本应用,从配置文件开始入手,让人释怀。测试环境。Windows1020H2专业版x64(19042.572)英特尔酷睿i5-7300HQCPU@2.50GHz.超级终端(可选)默认环境装置在D:\PHPEnv\目录下。装置前的注意事项。Windows服务的装置可能须要VC15运行时库,能够在微软官网点播下载。Apache装置和配置。Apache官网只提供windows版本的源代码,不提供二进制可执行文件。咱们能够去ApacheHaus下载二进制文件进行装置。将Apache24目录解压到D:\PHPEnv,环境根目录能够任意指定。须要留神的是,目录门路中不容许应用中文。Apache配置文件(Apache24/conf/httpd.conf)因为Apache配置文件太长,具体的具体调优办法请参考其余文章。这里显示了简化的配置文件(这里只显示了次要局部)。 # Apache24.conf file # General Settings Define SRVROOT "D:/PHPEnv/Apache24" # 定义Apache 根目录 ServerRoot "${SRVROOT}" ServerName localhost # 服务名 Define ENABLE_TLS13 "Yes" Listen 80 # 监听80端口,如果被占用能够应用 8080 端口 # PHP74 Config # PHP 8.0 批改为 php8apache2_4.dll LoadModule php_module "D:/PHPEnv/PHP74/php7apache2_4.dll" # 定义 PHP7 模块门路 AddType Application/x-httpd-php .php # 增加 PHP格局 PHPIniDir "D:/PHPEnv/PHP74" #定义 PHP 根目录 <Directory /> # 具体配置含意参考其余文章 AllowOverride allOptions Indexes FollowSymLinksRequire all granted</Directory> <Directory "H:/WWW"> # 定义网站根目录 ...

December 9, 2020 · 3 min · jiezi

关于php:php实现百万级数据快速导出CSV

php实现百万级数据导出这里应用了服务器的缓存来实现 实现: 一:建设测试表,并退出测试数据 1:创立测试表 这里我建了一个test表,字段别离为:id,name,age,email 2:退出测试数据 (1)首先手动向表中增加若干行数据 而后执行如下命令批量增加数据 INSERT INTO test (name,age,email) SELECT name,age,email FROM test;屡次执行下面的命令测试数据会呈指数减少,这样就能够失去很多测试数据 二:php实现导出百万级数据(这里我的查问命令应用的时Yii框架自带的查问命令) //让程序始终运行set_time_limit(0);//设置程序运行内存ini_set('memory_limit', '128M');//导出文件名$fileName = '测试导出数据';header('Content-Encoding: UTF-8');header("Content-type:application/vnd.ms-excel;charset=UTF-8");header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');//关上php规范输入流$fp = fopen('php://output', 'a');//增加BOM头,以UTF8编码导出CSV文件,如果文件头未增加BOM头,关上会呈现乱码。fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));//增加导出题目fputcsv($fp, ['姓名', '岁数', '邮箱']);$nums = 10000; //每次导出数量$count = Test::find()->count();$step = ceil($count/$nums);//循环次数for($i = 0; $i < $step; $i++) {    $result = Test::find()        ->select(['name', 'age', 'email'])        ->limit($nums)        ->offset($i * $nums)        ->asArray()        ->all();    foreach ($result as $item) {        fputcsv($fp, $item);    }    //每1万条数据就刷新缓冲区    ob_flush();    flush();}exit;如上测试后能够发现导出一百万左右数据只需十几秒左右工夫,效率还算是不错的 ...

December 9, 2020 · 1 min · jiezi

关于php:Swoft的HttpServer启动及请求工作流程二Server的setting及回调函数

前文讲到swoft创立了异步http-server,而后在调用server->set()前开启了一键协程化. 开启协程后,swoft对Server进行了一系列初始化设置,并且调用与之对应的生命周期钩子函数. 设置Server的根底配置: 设置Server的事件回调(因为打印后果十分长,此处只截取局部信息):start回调:onStart办法继承于:\Swoft\Server\Server文件目录/vendor/server/src/Server.php值得一题的是onStart代码中在设置完pid等零碎参数后,开启了一个协程去执行用户注册的监听事件.也就是说用户注册的start事件是在协程环境下执行的: shutdown回调:与onStart相似,也是Server类实现了onShutdown办法,并且以协程形式执行用户注册的回调,不过开启协程的形式不同: managerStart回调:onManagerStart办法继承于Server类,代码中特地揭示了不能在manager过程中应用协程,所以回调事件是同步执行: managerStop回调:与managerStart一样,manager过程内不能应用协程: workerStart回调:回调内判断了是否在协程环境: workerStop回调:在协程内调用用户注册事件回调: workerError回调:产生error的worker有可能是manager程序,所以此回调不应用协程: 接下来的3个回调事件只指定了解决的对象,没有指定解决的办法,具体增加事件到Server的逻辑参考addEvent办法: request回调:对应解决办法:/vendor/swoft/http-server/src/Swoole/RequestListener.php:服务启动后,每一个申请都会经由此办法将swoole原生Request和Response对象进行封装后交给dispatcher去调度执行.对于此处的调度执行流程,会写在前面的专题章节中. task回调:对应解决办法:/vendor/swoft/task/src/Swoole/TaskListener.php: finish回调:此处调用的是Task的FinishListener: 总结: 1.swoft的http-server中应用到的swoole回调一共10种,别离是onStart、onShutdown、onManagerStart、onManagerStop、onWorkerStart、onWorkerStop、onWorkerError、onRequest、onTask、onFinish.2.个别用户注册的回调事件会放在协程内执行,但波及到manager过程的不会,swoole不容许在manager过程内开启协程.3.onTask、onFinish是针对task过程设置的回调.

December 9, 2020 · 1 min · jiezi

关于php:Swoft的HttpServer启动及请求工作流程一创建Server

本文根底环境:swoftcli --version http-server目录:/vendor/http-server/src server创立及start入口:/vendor/http-server/src/HttpServer.php server创立代码:$this->swooleServer = new SwooleHttpServer($this->host, $this->port, $this->mode, $this->type); 先看swoft官网定义: 问题来了: 既然swoft是协程框架,为何server是new的`\Swoole\Http\Server`而不是swoole官网demo中的`Swoole\Coroutine\Http\Server`?要想解释这个问题,咱们且先看接下来的代码$this->startSwoole(): 此办法在父类`\Swoft\Server\Server`(`/vendor/server/src/Server.php`)中的定义如下:这里能够看出 swoft通过在server->start()前开启协程来实现协程服务器.

December 9, 2020 · 1 min · jiezi

关于php:深入学习Composer原理四

本系列第四篇文章,也是最初一篇首先,咱们先看看Composer的源码从哪里看起。当然,请您先筹备好源码。 composer init或者间接install之后,主动生成了一个vendor目录,这时您须要在文件中手动的require这个vendor目录下的autoload.php文件,其实这个文件又载入了vendor/composer/autoload\_real.php。 在autoload\_real.php中,咱们发现了相熟的spl\_autoload\_register函数。但这个文件最大的作用是去加载ClassLoader.php这个文件和一些目录文件,也在同级目录下。这个文件就值得大家好好钻研下了,不过外围也无外乎后面三篇文章中的内容。然而在autoload\_real.php中,大家能够发现在调用ClassLoader的register()函数前,还加载了几个目录相干的文件: autoload\_static.php,动态加载形式,顶级类加载命名空间autoload\_psr4.php,恪守PSR4标准的包目录映射数组文件autoload\_namespaces.php,命名空间映射,PSR0标准autoload\_classmap.php,类图映射,命名空间间接映射门路好深奥的感觉,不过PSR4您肯定曾经很理解了。其余的其实就是对应的没有恪守PSR4标准的一些类库。而在ClassLoader中的register()函数就是加载的这些文件中对应的门路文件。在这里,最好的形式是您能够多下载一些包,而后看看这些文件产生了什么扭转。比方我装置了一个monolog后,autoload\_psr4.php的内容变成了这样: 接下来,composer这个命令干了什么您应该也就理解了。当您进行composer require时,首先批改了composer.json文件,而后下载包,实现后依据包里的composer.json文件中所对应的标准来批改对应的autoload\_xxx.php文件。实现了文件命名空间相干内容的映射。当register()进行加载的时候,天然就得心应手了。 ClassLoader源码中重点浏览的一些函数内容包含: findFile()findFileWithExtension()addPsr4()add()相干参考文档: 深刻解析 composer 的主动加载原理 Composer概述及其主动加载探秘 Composer文档 PSR标准 至此,深刻学习Composer原理相干内容更新实现。其实还有更多能够学习的内容,比方装置时的install文件其实也是个php文件。composer命令也是个phar文件,也就是齐全PHP实现的,源码的Github地址:https://github.com/composer/composer。兴许在未来咱们能够再深刻的钻研钻研外围composer命令行相干的源码。到那时,再开一个系列文章再说,而这回,就先到这里吧!!关注公众号:【硬核项目经理】获取最新文章 增加微信/QQ好友:【xiaoyuezigonggong/149844827】收费得PHP、项目管理学习材料 知乎、公众号、抖音、头条搜寻【硬核项目经理】 B站ID:482780532

December 9, 2020 · 1 min · jiezi

关于php:Laravel-使用-Elasticsearch-作为日志存储

简介在理论开发中,咱们发现在 Debug 的时候常常须要查问日志。而传统的形式是须要 SSH 到生产环境,而后应用 cat,tail 和 grep 等命令查问日志,且无奈进行日志的统计和剖析,深度开掘这些日志的价值。本片文章的侧重点在于优雅的让 Laravel 间接将日志写入 Elasticsearch,当然你也能够抉择应用Filebeat 采集 Laravel 的本地日志。 装置Elasticsearch依赖包composer require elasticsearch/elasticsearch.env环境变量配置# 批改日志存在通道LOG_CHANNEL=elasticsearch# 增加 elasticsearch 日志存储配置ELASTIC_HOST=http://elasticsearch:9200 # elasticsearch 服务地址ELASTIC_LOGS_INDEX=shopem-store-es-logs # elasticsearch 日志存储索引名增加日志通道在config/logging.php 文件里的 channels 里增加如下配置 'elasticsearch' => [ 'driver' => 'monolog', 'level' => 'debug', 'handler' => MonologHandlerElasticsearchHandler::class, 'formatter' => MonologFormatterElasticsearchFormatter::class, 'formatter_with' => [ 'index' => env('ELASTIC_LOGS_INDEX'), 'type' => '_doc', ], 'handler_with' => [ 'client' => ElasticsearchClientBuilder::create()->setHosts([env('ELASTIC_HOST')])->build(), ],],

December 8, 2020 · 1 min · jiezi

关于php:phpjs实现文件分块上传

咱们在上传大文件时,可能会因为服务器的起因导致文件上传失败,文件过大时因为服务器的配置或响应事件过长导致上传文件失败,这时候咱们能够将一个大的文件分为若干块,而后分批次上传到服务端,当所有文件块上传实现后再由服务器将各个文件块整合成咱们上传的文件 一:分块上传流程: 1:由前端js将上传的文件信息进行切割成若干块,而后循环将若干块的文件块上传到服务端 2:服务端接管到文件块信息后保存起来,当所有文件块上传完毕后,将所有上传的文件块整合成文件并保存起来 二:实现代码: 1:HTML <input type="file" id="file"><input type="button" id="upload" value="上传"><input type="button" id="stop" value="进行"><input type="button" id="restart" value="持续上传">上传进度:<span id="progress"></span>2:JS //获取节点var fileForm = document.getElementById("file");var uploadBtn = document.getElementById('upload');var stopBtn = document.getElementById('stop');var restartBtn = document.getElementById('restart');//定义常量const LENGTH = 100 * 1024;//每个上传的文件块大小(100KB)var start = 0;var end = LENGTH + start;var blob;var is_stop = 0;var blob_num = 1;var file = null;var upload_instance = new Upload();//上传事件uploadBtn.onclick = function () {   upload_instance.addFileAndSend(fileForm);   return false;}stopBtn.onclick = function () {   upload_instance.stop();   return false;}restartBtn.onclick = function () {   upload_instance.start();   return false;}function Upload() {    //判断浏览器类型    if (window.XMLHttpRequest){        //IE7+, Firefox, Chrome, Opera, Safari        var xhr=new XMLHttpRequest();    }else{        //IE6, IE5        var xhr=new ActiveXObject("Microsoft.XMLHTTP");    }   //上传文件   this.addFileAndSend = function (that) {       file = that.files[0];       blob = cutFile(file);       //上传       uploadFile(blob, file);       blob_num += 1;   }   //进行文件上传   this.stop = function () {       xhr.abort();       is_stop = 1;   }   this.start = function () {       uploadFile(blob, file);       is_stop = 0;   }   //切割文件   function cutFile(file) {       var file_blob = file.slice(start, end);       start = end;       end = start + LENGTH;       return file_blob;   };    //上传文件    function uploadFile(blob, file) {        var form_data = new FormData();        var total_blob_num = Math.ceil(file.size / LENGTH);        //上传文件信息        form_data.append('file', blob);        //上传的第几个文件块        form_data.append('blob_num', blob_num);        //总文件块数        form_data.append('total_blob_num', total_blob_num);        //文件名称        form_data.append('file_name', file.name);                        //上传        xhr.open('POST', './test.php', false);        xhr.onreadystatechange = function () {            //获取上传进度            if (total_blob_num == 1) {                progressText = '100%';            } else {                progressText = (Math.min(100, (blob_num / total_blob_num) * 100)).toFixed(2) + '%';            }            var progress = document.getElementById('progress');            progress.innerHTML = progressText;                        //循环执行上传,直到所有文件块上传实现            var t = setTimeout(function () {                if (start < file.size && is_stop == 0) {                    blob = cutFile(file);                    uploadFile(blob, file);                    blob_num += 1;                } else {                    //所有文件块上传实现                }            }, 1000);        }        xhr.send(form_data);        //每次文件块上传后,清空上传信息        form_data = "";    }}3:PHP ...

December 8, 2020 · 5 min · jiezi

关于php:Swoft中间件跨域问题

swoft2.0.x官网文档介绍的跨域解决demo如下:这中形式在失常申请下看似没有问题,但如果$handler->handle($request)步骤产生了异样,比方Validator拦挡到申请参数不非法,抛出了ValidatorException,那么后续增加申请头的操作就无奈失去执行. 那么,可不可以在执行handle办法前先通过Context::get()->getResponse()取得Response对象,而后先对Response对象进行header设置呢?答案是:NO,因为HttpContext没有提供response属性的setter,想要输入批改后的Response只能在框架提供的各个环节中return给调用者. 再看swoft源码Swoft\Http\Server\HttpDispatcher:不难发现: 1.`$requestHandler->handle($request)`这一步如果产生异样,那么咱们天然也得不到对应的`$response`.2.产生异样后,零碎会通过`$errDispatcher = Swoft::getSingleton(HttpErrorDispatcher::class)`失去错误处理的调度者,最初通过错误处理调度者返回一个Response联合源码,最终的解决思路有4个: 1.在每个中间件执行$handler->handle($request)步骤时加上try/catch,捕捉执行中的异样,而后获取Response,设置好跨域后,失常return.2.利用swoft的HttpErrorDispatcher,在对应的异样解决类外面设置跨域的申请头(对于如何设置异样解决,请参见swoft官网文档).3.跳出在php中设置跨域申请header的思路,在比方nginx等代理服务器设置header.4.批改源码,在如下机会退出header设置,此处的$this->configResponse($response)办法为自定义的header设置办法: 以上4中办法: 前2中办法须要在注册的每一个中间件或者错误处理回调类外面增加header设置,比拟繁琐.最多是加个Common类来对立解决,但其它类依然须要继承这个Common类.第3种形式无需动php任何代码,举荐生产环境应用.然而在本地开发时须要Nginx等服务作为代理,略显繁琐.第4种形式,益处是只需动一处代码,就能作用全局.害处也很显著:动的那一处是框架提供的源码.倡议测试环境应用.总结: 测试环境第4种,生产环境第3种.

December 8, 2020 · 1 min · jiezi

关于php:Yii-中优雅的使用事件

Yii 中应用一个事件大略是这个样子的// 绑定事件$component->on($event::EVENT_NAME, [$object, 'methodNameA']);$component->on($event::EVENT_NAME, [$object, 'methodNameB']);// 触发事件$component->trigger($event::EVENT_NAME, $event); 从下面代码中能够看出如果要触发一个 5 个监听监听的事件,是要入侵 6 行代码的,这显然是不够优雅的,所以写了个组件包将事件与监听绑定写在组件配置文件,调用的时候只需一行代码去触发事件。源码https://github.com/guanguans/yii-event环境要求Yii > 2.0装置$ composer require guanguans/yii-event -vvv配置...'components' => [ ... 'event' => [ 'class' => \Guanguans\YiiEvent\Event::className(), 'listen' => [ // 事件类名 \app\events\ExampleEvent::className() => [ // 监听该事件监听的类名 \app\listeners\ExampleListener::class, ], ], ], ...],...应用示例创立事件 app\events\ExampleEvent.phpnamespace app\events;use yii\base\Event;class ExampleEvent extends Event{ public $name = 'example';}创立监听 app\listeners\ExampleListener.phpnamespace app\listeners;use Guanguans\YiiEvent\ListenerInterface;use yii\base\Event;class ExampleListener implements ListenerInterface{ public static function handle(Event $event) { // to do something. var_export($event->name); }}触发事件Yii::$app->event->dispatch(new ExampleEvent());// orevent(new ExampleEvent());验证后果'example'

December 8, 2020 · 1 min · jiezi

关于php:深入学习Composer原理三

本系列第三篇文章,一起理解下PSR标准中的PSR4和PSR0标准首先祝贺大家,包含我本人,保持到了当初。这篇文章之后,Composer的根底原理就清晰明了咯。也就是说,Composer所利用的正是spl_autoload_register()和PSR4标准,而后通过线上服务器存储包,来实现包治理的性能。spl_autoload_register()的作用咱们曾经分明了,次要就是动静加载咱们所须要的文件。然而咱们的文件不可能都乌七八糟的轻易找个目录放下,而后注册一堆的spl_autoload_register()来加载吧,要真这么写,预计你的老板会废了你。在这个时候,PSR门路标准的作用就显示进去咯!! 本文参考PSR标准:https://psr.phphub.org/ PSR4的格局\<命名空间>(\<子命名空间>)*\类名具体的内容间接上文中提供的参考链接,这里总结重要的几点: 顶级命名空间必须有一个子命名空间能够多个或没有类名必须有大小写敏感,下划线无实际意义(留神,下划线是次要的和PSR0的区别)类名与文件载入的对应去掉最后面的命名空间的分隔符,后面的命名空间作为[命名空间前缀],必须与至多一个[文件基目录]对应子命名空间与[文件基目录]下的文件夹对应,命名空间分隔符号作为目录分隔符号开端的类名,与最终目录下的对应的.php文件雷同autoload的实现不可出现异常,也就是要解决掉异样问题预计各位看得一脸懵逼吧!! 其实很好了解,举例说明,咱们先建设一个目录叫myvendor,外面放着罕用的工具包,如图: 那么TestClass.php的命名空间应该是Test,而CaseClass的应该是CaseModel\CaseChild。对立从myvendor这个文件夹作为入口进入。也就是myvendor是一个超级[基目录],而后Test和CaseModel是对应命名空间的两个[文件基目录],剩下的子个名空间与目录对应。官网中还有其余的展现形式,但在这里咱们用这种最规范的形式。 其实说白了,就是命名空间和目录对应上,写代码找文件就不便得很啦!! 下面说的是PSR4的标准,那么PSR0又是什么鬼?目前来说PSR0曾经废除了,它们两个大部分内容还是相近的,最大的区别在于PSR0中的\_这个符号是有意义的,也就是/namespace/package/Class\_Name这样的内容,会去提供/namespace/package/Class/Name.php文件,而PSR4中则疏忽\_这个符号的意义,还是去查找Class_Name.php这个文件。 TestClass.php代码<?phpnamespace Test;class TestClass{ public function show() { echo "we are family!\n"; }}CaseClass.php代码<?phpnamespace CaseModel\CaseChild;class CaseClass{ public function show() { echo "Good!\n"; }}接下来,在myvendor目录里面增加一个psr4.php文件,代码如下: <?phpspl_autoload_register(function ($class) { $vendor = __DIR__ . '/myvendor'; $file = $vendor . '/' . str_replace('\\', '/', $class) . '.php'; if (file_exists($file)) { require $file; }});use CaseModel\CaseChild\CaseClass;use Test\TestClass;$t = new TestClass();$t->show();$c = new CaseClass();$c->show();神奇的事件产生了,文件主动加载进来了,有点高大上吧,至此,对于Composer的主动加载局部就完结了。咱们一起学习到了PHP是如何通过spl_autoload_register办法来主动加载文件,并且通过PSR4标准来造成束缚,让大家都有一套对立的标准。而这些,正是Composer的灵魂和肉身。 残缺源码:https://github.com/zhangyue0503/php-blog-code-resource/tree/master/composer/base/psr4namespace =============== 关注公众号:【硬核项目经理】获取最新文章 ...

December 8, 2020 · 1 min · jiezi

关于php:PHP开源技术大会PPT

PHP开源技术大会PPT

December 7, 2020 · 1 min · jiezi

关于php:深入学习Composer原理二

本系列的第二篇文章,这次咱们聊聊:spl_autoload_register()函数PHP的SPL库作为扩大库,曾经于5.3.0版本后默认放弃开启,成为PHP的一组弱小的外围扩大库。大家有工夫能够多钻研钻研SPL外面的办法性能。而且,SPL中蕴含很多类库哟,在设计模式的系列文章中,咱们也会再次见到他们的身影! 这回咱们建设一个文件,叫做spl_autoload_register.php,而后将上面的代码复制进去吧: <?phpspl_autoload_register(function( $className ){ require $className . '.php';});$m = new TestClass();$m->show();是不是和__autoload()很像,当然作用也很像。咱们间接运行这个文件试试,会发现TestClass.php也失常的加载了进来。那么为啥不间接用__autoload()函数,而应用sql_autoload_register()这么诡异的函数,而且还有个神奇的闭包参数!!! 咱们先看看它的定义和格局 PHP官网文档中的定义注册给定的函数作为 __autoload 的实现没错,那个匿名函数就是一个__autoload()函数,咱们能够了解为给以后这个PHP文件中注册一个__autoload()函数,而应用匿名函数的起因呢?当然就是为了闭包个性,最次要的就是可能带来提早加载(懒加载 )的实现! 另外,spl_autoload_register()函数不止是仅仅去注册一个__autoload(),它实现并保护了一个__autoload()队列。原来在一个文件中只能有一个__autoload()办法,但当初,你领有的是一个队列。 函数格局spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] ) : bool有点长,咱们一步步看: callable $autoload_function:闭包函数,不多解释了,下面曾经说了,不理解闭包函数的作用能够百度百度bool $throw:当$autoload_function无奈胜利注册时,是否抛出异样bool $prepend:如果是true,将会增加一个__autoload()函数到队列的顶部这个函数有返回值,胜利或失败革新代码嗯,到这里如同有点简单了,咱们须要革新革新代码这样能力让大家看得更清晰,先筹备另一个须要加载 的类文件,就叫CaseClass.php好了 <?phpclass CaseClass{ public function show() { echo "Good!\n"; }}而后批改spl_autoload_register.php文件 <?php// 应用匿名函数形式spl_autoload_register(function( $className ){ echo "first==>\n"; require_once 'TestClass.php';});// 须要注册的内部__autoload()实现spl_autoload_register('CaseAutoLoad');function CaseAutoLoad( $className ){ echo "second==>\n"; require_once 'CaseClass.php';}$m = new TestClass();$m->show();echo "--------\n";$s = new CaseClass();$s->show();什么都别说了,间接运行吧,如果有报错请查看下哪里写错了,反正我这里没错~~ ...

December 7, 2020 · 1 min · jiezi

关于php:一次启动phpfpm参数错误的坑

启动php-fpm,-y -c参数肯定要分分明啊 ./php-fpm -y /Users/yanhui/dev/php-7.1.0/output/etc/php-fpm.d/www.conf -c /Users/yanhui/dev/php-7.1.0/output/lib/php.ini 每次都应用-c指定 fpm的配置文件,后果phpinfo进去的php.ini配置门路也不报错,我也是醉了

December 6, 2020 · 1 min · jiezi

关于php:easyswoole超级简易增删改查入门

框架装置间接按官网操作https://www.easyswoole.com/Cn/QuickStart/install.html 数据筹备CREATE TABLE `cases` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `title` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '题目', `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '内容', `create_time` int(10) NOT NULL COMMENT '创立工夫', PRIMARY KEY (`id`) USING BTREE) ENGINE = MyISAM AUTO_INCREMENT = 21 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;轻易写入几条数据 INSERT INTO `test`.`cases`(`id`, `title`, `content`, `create_time`) VALUES (1, '示剑网络副总经理承受电视台采访', 'test', 1536223828);INSERT INTO `test`.`cases`(`id`, `title`, `content`, `create_time`) VALUES (3, '微信小程序超级入口,新一轮红利又将暴发', 'test', 1605757832);INSERT INTO `test`.`cases`(`id`, `title`, `content`, `create_time`) VALUES (4, '北京小程序开发公司哪家好?', 'test', 1535963051);配置mysql数据库连贯关上easyswoole根目录下的dev文件,跟MAIN_SERVER同级,新增 ...

December 5, 2020 · 2 min · jiezi

关于php:深入学习Composer原理一

Composer作为PHP的包管理工具,为PHPer们提供了丰盛的类库,并且让PHP重焕新生,防止被时代淘汰的喜剧。能够说,Composer和PHP7是当初PHP开发者的标配,如果你还没用过Composer或者在PHP7的环境下工作,那么还真是有点掉队了哦! 这次的系列文章将一步步的解析Composer原理,不会去解说Composer的命令或者如何应用,这方面的内容您能够稳步Composer中文网:https://www.phpcomposer.com/ 第一篇次要理解一个简略的函数:__autoload()魔术办法<?php$m = new TestClass();$m->show();function __autoload($className){ require $className . '.php';}学习编程,第一步肯定是把代码敲下来,请新建一个文档叫作autoload.php,并把下面的代码复制进去。 而后在同级目录新建一个TestClass.php文件,将以下代码放入TestClass.php中: <?phpclass TestClass{ public function show() { echo 'we are family!'; }}接下来,你能够通过网页模式拜访autoload.php,或者我更举荐的间接在命令行运行:php ./autoload.php 神奇的事件产生了,咱们并没有在autoload.php上方显式的应用 require() 和 include 之类的函数,而是在__autoload()中应用了 require $className . '.php'; 这段语句,就实现了TestClass.php文件的加载。 没错,我预计您也猜到了,__autoload()这个魔术办法的作用就是在调用的类如果没有加载的状况下,就进入到这个办法中。 在PHP官网文档的解释中是这样定义的尝试加载未定义的类函数格局__autoload( string $class ) : void参数$class是没有加载类的类名,也就是上方的TestClass返回值是空个别在函数外部会依据$class去加载指定文件这个办法在PHP7.2后会提醒DEPRECATED,在将来的版本中可能会删除。咱们将再下一篇文章中解说的spl_autoload_register()函数将是主动加载的将来。应用主动加载函数的益处:不须要在文件顶部一大串的require。 嗯,曾经理解了__autoload()是干嘛的,然而这和Composer有什么关系? 别急,任何牛X的技术总有一个根底,没有这个条件这项技术就很难实现,就像人工智能,尽管早就有了各种算法和实践,但在大数据技术盛开之前总是无奈落地。因为机器学习须要的大量数据如何存取切实是个难点。在这里,Composer就像是AI技术,而__autoload()办法就是那个基石。 残缺源码:GitHub关注公众号:【硬核项目经理】获取最新文章 增加微信/QQ好友:【xiaoyuezigonggong/149844827】收费得PHP、项目管理学习材料 知乎、公众号、抖音、头条搜寻【硬核项目经理】 B站ID:482780532

December 5, 2020 · 1 min · jiezi

关于php:了解php中calluserfunc-与-calluserfuncarray的使用及区别

一:办法解释 call_user_func:把第一个参数作为回调函数进行调用,其余参数作为回调函数的参数 call_user_func_array:把第一个参数作为回调函数进行调用,第二个参数传入数组,将数组中的值作为回调函数的参数 二:call_user_func和call_user_func_array简略介绍 1:第一个参数传入办法名 例: (1)原生php中应用: function test($test1, $test2) {return $test1 . $test2;}echo call_user_func('test', 'a','b');//输入后果为abecho call_user_func_array('test', ['c', 'd']);//输入后果为cd(2)框架中应用: public function test($test1,$test2){    return $test1 . $test2;}echo call_user_func(array($this, 'test'), 'a', 'b');//输入后果为abecho call_user_func_array(array($this, 'test'), ['a', 'b']);//输入后果为cd2:第一个参数作为匿名函数 原生和框架中应用形式雷同: echo call_user_func(function ($test){return $test;}, 1);//输入后果为1echo call_user_func_array(function ($test){return $test;}, [1]);//输入后果为13:第一个参数调用类中的办法 class Test {static function test1($test){return $test;}}(1):原生php调用: echo call_user_func(array('test', 'test1'), 1);//输入后果为1echo call_user_func_array(array('test', 'test1'), [1]);//输入后果为1(2):框架中调用: echo call_user_func(array(new Test(), 'test'), 1);//输入后果为1echo call_user_func_array(array(new Test(), 'test'), [1]);//输入后果为1

December 4, 2020 · 1 min · jiezi

关于php:PHP的那些魔术方法二

上文中介绍了十分罕用并且也是面试时的热门魔术办法,而这篇文章中的所介绍的或者并不是那么罕用,但相对是加分项。当你能精确地说出这些办法及作用的时候,置信对方更能对你另眼相看。 __sleep()与__wakeup()字面上的意思很好玩,睡觉和起床。它们别离对应着serialize()和unserialize()办法,也就是序列化和反序列化时会触发这两个魔术办法。 这里须要留神的是,__sleep()须要返回一个数组,而这个数组对应着类中的属性名。通常来说,它们能够在序列化前进行数据清理工作,或者反序列化前进行数据的预处理工作。比方序列化前敞开数据库连贯或者反序列化前关上数据库连贯。 public function __sleep(){ echo '===sleep===' . PHP_EOL; echo '调用serialize()时来找我,先睡一会的' . PHP_EOL; echo '===unset===' . PHP_EOL; return ['a'];}public function __wakeup(){ echo '===wakeup===' . PHP_EOL; echo '调用unserialize()时来找我,起床吧' . PHP_EOL; echo '===wakeup===' . PHP_EOL;}__toString()顾名思义,这个办法通过返回一个字符串,实现对象的打印。如果没有实现这个办法,咱们间接应用echo是无奈打印对象的,会报错。当实现了这个魔术办法后,间接应用echo或者print等办法就能够进入这个魔术办法中,并打印出该办法中返回的内容。 public function __toString(){ echo '===toString===' . PHP_EOL; echo '调用echo、print时会应用我' . PHP_EOL; echo '===toString===' . PHP_EOL; return '打印进去看看吧';}当然,它也能实现对象转换到字符串,如在字符串拼接的时候,如:$obj = new Object(); $a = 'this is ' . $obj;这样应用。 __invoke()很有意思的一个魔术办法,它的作用是将对象当做办法应用时会调用这个魔术办法。什么意思呢?比方:$obj = new Object();,而后间接$obj(); 这时,就会进入这个魔术办法。那么有什么用呢?对于闭包以及反射来说,这个魔术办法有不可代替的作用。未来咱们会在别的文章中进行具体阐明。 ...

December 4, 2020 · 1 min · jiezi

关于php:php常用类库开发调试

mikey179/vfsstreamcomposer http://packagist.p2hp.com/packages/mikey179/vfsstreamgithubhttps://github.com/bovigo/vfsStreamphpunit 文档阐明 - 测试对文件系统进行模仿https://phpunit.readthedocs.io/zh_CN/latest/test-doubles.html?highlight=vfsStream#test-doubles-mocking-the-filesystem单元测试中常常应用,是虚构文件系统的流笼罩。用来在单测中mock file system,防止对文件系统的间接操作

December 3, 2020 · 1 min · jiezi

关于php:ThinkPHP51-版本引入-composer-vendor-扩展包问题

版本阐明旧版本:ThinkPHP5.0新版本:ThinkPHP5.1 问题:TP5.1 中勾销了 Loader::import 办法以及import和vendor助手函数,全副采纳命名空间和主动加载机制,导致引入类库找不到报错 解决:因为“全副采纳命名空间和主动加载机制”,所以对 composer/installed.json 做了批改(文字说明在下方正文中) { "name": "curl/curl", "version": "2.3.0", "version_normalized": "2.3.0.0", "source": { "type": "git", "url": "https://github.com/php-mod/curl.git", "reference": "3ad560b1fc1bbdf5c7681356ab953fb961f255e5" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-mod/curl/zipball/3ad560b1fc1bbdf5c7681356ab953fb961f255e5", "reference": "3ad560b1fc1bbdf5c7681356ab953fb961f255e5", "shasum": "" }, "require": { "ext-curl": "*", "php": "^5.6 | ^7.0" }, "require-dev": { "phpunit/phpunit": "^5.7", "squizlabs/php_codesniffer": "~2.1" }, "time": "2020-03-19T20:07:26+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-0": { "Curl": "src/" }, //在此处增加 files 字段,把类库文件的相对路径填入 "files":[ "vendor/curl/curl/src/Curl/Curl.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "php-curl-class", "homepage": "https://github.com/php-curl-class" }, { "name": "Hassan Amouhzi", "email": "hassan@anezi.net", "homepage": "http://hassan.amouhzi.com" }, { "name": "user52", "homepage": "https://github.com/user52" } ], "description": "cURL class for PHP", "homepage": "https://github.com/php-mod/curl", "keywords": [ "curl", "dot" ] }

December 3, 2020 · 1 min · jiezi

关于php:另一个Swoole调试器-Yasd

前段时间说过如何应用 Sdebug(Xdebug)来调试 Swoole,当初 PHP8 和 Xdebug3 都公布了,也有小伙伴在 Swoole 的 ISSUE 中询问 Xdebug 的反对,不过如果还持续兼容 Xdebug 的话必定不是一件容易的事件。 于是 Swoole 开发组成员 @codinghuang 开发了一个新的调试扩大,名为 Yasd ,另一个 Swoole 调试器。 先简略概述一下这个调试器能干什么: 调试协程断点调试断点缓存查看调用栈单步调试.....更多功能敬请期待~包含 PHP8 的反对和集成 IDE 的反对。 上面就来看看如何应用这个调试器: 装置扩大须要先装置 Yasd 扩大 phpize --clean && \phpize && \./configure && \make clean && \make && \make install设置 php.ini 文件: zend_extension=yasd.so查看扩大信息: php --ri yasd开始调试装置胜利之后,在须要调试时,减少-e参数,如 php -e test.php你就会看到这样的输入 $ php -e test.php[Welcome to yasd, the Swoole debugger][You can set breakpoint now]>可用命令接着就能够来应用一些命令进行调试了,所有命令都反对优先级含糊匹配,如li、lis、list都等于l,示意查看源码。 ...

December 3, 2020 · 1 min · jiezi

关于php:PHP的那些魔术方法一

在PHP中,有一堆魔术办法,服务于类和对象。PHP尽管也是纯种的面向对象语言,然而之前的PHP还真不是,所以有一些面向对象的规范实现并不欠缺,比方重载。然而,咱们能够通过一些魔术办法来补救,例如__call()办法就能够用来实现重载。 话不多说,咱们一个一个的来看。 __construct()和__destruct()这两个是十分闻名并且也是十分罕用的魔术办法。\_\_construct()是构造函数。在Java中,构造函数是与类名雷同的办法名,而PHP在晚期的版本中也是这样的,但从5当前改成了\_\_construct()办法来实现,起因是当类名进行批改的时候,能够不必再去批改这个办法名了。当然,咱们用与类名雷同的办法名也是能够向下兼容的,不过最好不要这样用。 \_\_destruct()办法是析构函数,不须要显式的调用,零碎会主动调用这个办法。而且析构函数不须要参数,因为它不须要去调用嘛,零碎主动调用的时候也是不会去带参数的。 public function __construct(){ echo '构造函数' . PHP_EOL;}public function __destruct(){ echo '析构函数' . PHP_EOL;}__call()与__callStatic()十分重要而且也是面试时常常会问到的魔术办法。它们俩的作用其实差不多,都是用于未定义的办法,当应用这些未定义的办法时就会进入这两个函数中。比如说咱们调用$a->b();这个办法,但其实在$a的类模板中并没有b()办法,这时就会进入\_\_call()办法进行解决。\_\_callStatic()则是通过动态调用时如果没有定义对应的办法,就进入到\_\_callStatic()办法中,如A::b(),并没有定义b()办法,这时就进入了\_\_callStatic()中进行解决。 结尾说道,\_\_call()能够实现相似于Java中的函数重载的能力。函数重载其实就是同名的函数,但参数或返回值不同,在Java等强类型语言中能够不便的实现,但PHP是弱类型语言,无奈精确的定位办法的重载,应用\_\_call()办法其实也须要很多的判断,并不是十分的举荐肯定要和Java一样的去实现函数重载。咱们还是须要依据语言的个性来对业务性能进行深刻的剖析后再进行对应的实现。 在Laravel框架中,应用的Facade模式,也就是门面模式,外围代码就是应用了\_\_callStatic()办法。有趣味的小伙伴能够自行查看下Laravel的源码。 public function __call($name, $arguments){ echo '===call===' . PHP_EOL; echo '未定义的办法找我' . PHP_EOL; echo '您须要的是' . $name . ',参数是:'; print_r($arguments); echo '===call===' . PHP_EOL;}public static function __callStatic($name, $arguments){ echo '===callStatic===' . PHP_EOL; echo '未定义的静态方法找我' . PHP_EOL; echo '您须要的是' . $name . ',参数是:'; print_r($arguments); echo '===callStatic===' . PHP_EOL;}$name参数是办法的名称,如$a->b(),$name的值就是"b"。$arguments是参数数组,如$a->b("1",2);则$arguments=["1", 2]; ...

December 3, 2020 · 1 min · jiezi

关于php:PHPFPM-进化史

最近有幸读到一篇文章,一文将CGI 的进化史讲的特地具体,尽管我本人之前也整顿过 CGI、FastCGI、PHP-FPM 相干的笔记,然而并没有从原理的角度来意识 CGI。 CGI 的诞生早些年的Web 利用很简略,客户端通过浏览器发动申请,服务端间接返回响应。 随着互联网的倒退,简略的Web 利用曾经不能满足开发者们了。咱们心愿Web服务器有更多的性能,飞速发展的同时还能让不同语言的开发者也能退出。 CGI协定协定的诞生就是 Web服务器和其余畛域的开发者在保障恪守协定的根底上,剩下的能够自由发挥,而实现这个协定的脚本叫做CGI 程序。 CGI协定规定了须要向CGI脚本设置的环境变量和一些其余信息,CGI程序实现某一个性能,能够用PHP,Python,Shell或者C语言编写。 在没有CGI 之前,其余语言如果须要接入Mysql 或者Memcache,还须要应用C 语言,但有了CGI协定,咱们的Web解决流程能够变成下图这样: FastCGI 的诞生CGI程序存在致命的毛病:每当客户端发动申请,服务器将申请转发给CGI,WEB 服务器就申请操作系统生成一个新的CGI解释器过程(如php-cgi),CGI过程则解决完一个申请后退出,下一个申请来时再创立新过程。 咱们晓得,执行一个PHP程序的必须要先解析php.ini文件,而后模块初始化等等一系列工作,每次都重复这样十分浪费资源。 FastCGI协定在CGI协定的根底上,做出了如下扭转: FastCGI被设计用来反对常驻(long-lived)利用过程,缩小了fork-and-execute带来的开销FastCGI过程通过监听的socket,收来自Web服务器的连贯,这样FastCGI 过程能够独立部署服务器和FastCGI监听的socket 之间依照音讯的模式发送环境变量和其余数据咱们称实现了FastCGI协定的程序为FastCGI程序,FastCGI程序的交互方式如下图所示: PHP-FPM 的诞生FastCGI 程序诚然曾经很好了,但咱们的需要总是有点刻薄,它还是存在一些显著毛病的: 当咱们更改配置文件(php.ini)后,php-cgi(FastCGI 程序) 无奈平滑重启咱们fork的过程个数和申请量反比,申请忙碌时 fork 过程多,动静调整 php-cgi还没做到下面提及php-cgi 实现的FastCGI问题官网没有解决,侥幸的是有第三方帮咱们解决了,它就是 php-fpm。 它能够独立运行,不依赖php-cgi,换句话说,它本人实现了FastCGI协定并且反对过程平滑重启且带过程治理性能。 参考链接从CGI到FastCGI到PHP-FPM

December 2, 2020 · 1 min · jiezi

关于php:从零开始学Laravel一Laravel安装配置编写简单api接口

一.Laravel的装置与配置1.下载Composer-Setup.exe (getcomposer.org)并装置2.挪动到xampp/hotdocs文件夹,执行以下命令 php composer create-project --prefer-dist laravel/laravel blog3.用PhpStorm关上能够看到如图我的项目构造4.能够间接输出命令 php artisan serve 运行,也能够拜访apache,显示如下图示意胜利这时Laravel就装置胜利了。5.批改.env文件中的数据库信息 二.编写api接口1.新建数据库建表插入数据 DROP TABLE IF EXISTS `book`;CREATE TABLE `book` ( `id` int(11) NOT NULL AUTO_INCREMENT, `book_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `book_sort` int(11) DEFAULT NULL, `book_mark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE = MyISAM AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of book-- ----------------------------INSERT INTO `book` VALUES (1, '水浒传', 1, '四大名著');INSERT INTO `book` VALUES (2, '西游记', 1, '孙悟空');INSERT INTO `book` VALUES (3, '红楼梦', 2, '无');INSERT INTO `book` VALUES (4, '三国演义', 2, '');3.新建Model和Controller ...

December 2, 2020 · 1 min · jiezi

关于php:Yii2框架使用AR进行多表联合查询时使用hasmany导致分页数据不准

应用Yii2框架进行开发时,常常会遇到多表联结查问的场景,利用Yii自带的AR类,能够很不便的进行多表联结查问操作。如果应用的是AR的话,在进行多表联结查问时,须要提前在相干的model层对相干的数据表模型进行hasOne()或hasMany()操作,即申明关联关系。hasOne()或hasMany()的具体应用办法和实现原理,能够在YII的官方网站的文档中进行查问,这里只说一下hasOne()和hasMany()在应用过程中常常会遇到的一个操作,分页查问,以及应用hasMany()时产生的一个数据问题,所查问的数据不精确。具体用代码举例说明。 1:假如有两张表item(商品表),item_sku(商品sku表),它们的对应关系是 1:N,即一个商品能够有多个对应的sku数据,那么在item的model层申明关联类型时,大略如下: public function getSku(){ return $this->hasMany(ItemSku::className(), ['item_id' => 'id']);} 2:咱们在item的controller层进行api编写时,个别分页查问如下: $result = Item::find()->joinwith('sku')->offset(0)->limit(10)->all(); 3:此时如果咱们对$result进行 count()计算,假如mysql数据库中的item数据>50条,但往往得出的后果可能只是7或者5,8之类的数据,而不是咱们想要的10条数据。 网上查了很多材料,比拟靠谱的解释是,因为是1对多的关系,记录总数是子表的记录数(即ItemSku表),而子表的数据会有反复数据,进而导致数据不准。解决的办法也很简略,即在查问语句中加上distinct(),即$result = Item::find()->joinwith('sku')->offset(0)->limit(10)->distinct()->all();这样,因为记录数据去重后,即失去了所需的数据。

December 2, 2020 · 1 min · jiezi

关于php:linux-进程跟踪-之phpfpm异常退出重启

异样形容公司一台测试服务器,应用json_decode()办法,php-fpm异样退出报错日志信息如下: php-fpm child 7970 exited with code 1 after 34534.452342 seconds from startNGINX日志报错也只是说和php-fpm断开通信.导致502 自我解决思路刚开始的也是毫无思路,始终认为是json扩大的问题,通过申请phpinfo(),和cli的php -m 发现都有json的扩大,机器的内存也是够用的,发现这就奇了怪了,到底是什么起因呢?而后也是网上一顿搜. 网上办法1有说查看/var/log/syslog和/var/log/message 日志.可咱们这台机器,/var/log下并没有这2个文件(零碎是CentOS),也不晓得是不是哪里设置没有关上?网上办法2批改www.conf里的参数解释:起因就是没有pm.start_servers这个参数没有依照上面的这个公式来:pm.start_servers= min_spare_servers + (max_spare_servers - min_spare_servers) / 2个别min_spare_servers设置为20操作之后也并不好使.应用问题不在这. 解决问题应用strace跟踪php-fpm过程并输入日志到文件. ps -ef|grep php-fpm|awk '{print " -p " $2" -s 10000 -o /tmp/strace_"$2".log"}'|xargs strace监控所有的子过程pid,并写入相应的trace.log查看日志发现是,公司前共事用c封装的一个类型,写入某个文件没有权限导致的.发现问题就好解决了,给该文件加上读写权限即可.至此该bug已解决. strace罕用参数-c 统计每一零碎调用的所执行的工夫,次数和出错的次数等.-d 输入strace对于规范谬误的调试信息.-f 跟踪由fork调用所产生的子过程.-ff 如果提供-o filename,则所有过程的跟踪后果输入到相应的filename.pid中,pid是各过程的过程号.-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.-h 输入简要的帮忙信息.-i 输入零碎调用的入口指针.-q 禁止输入对于脱离的音讯.-r 打印出绝对工夫对于,,每一个零碎调用.-t 在输入中的每一行前加上工夫信息.-tt 在输入中的每一行前加上工夫信息,微秒级.-ttt 微秒级输入,以秒了示意工夫.-T 显示每一调用所耗的工夫.-v 输入所有的零碎调用.一些调用对于环境变量,状态,输入输出等调用因为应用频繁,默认不输入.-V 输入strace的版本信息.-x 以十六进制模式输入非标准字符串-xx 所有字符串以十六进制模式输入.-a column 设置返回值的输入地位.默认 为40.-e expr 指定一个表达式,用来管制如何跟踪.格局:[qualifier=][!]value1[,value2]...qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的 qualifier是 trace.感叹号是否定符号.例如:-eopen等价于 -e trace=open,示意只跟踪open调用.而-etrace!=open 示意跟踪除了open以外的其余调用.有两个非凡的符号 all 和 none. 留神有些shell应用!来执行历史记录里的命令,所以要应用\\.-e trace=set 只跟踪指定的零碎 调用.例如:-e trace=open,close,rean,write示意只跟踪这四个零碎调用.默认的为set=all.-e trace=file 只跟踪无关文件操作的零碎调用.-e trace=process 只跟踪无关过程管制的零碎调用.-e trace=network 跟踪与网络无关的所有零碎调用.-e strace=signal 跟踪所有与零碎信号无关的 零碎调用-e trace=ipc 跟踪所有与过程通信无关的零碎调用-e abbrev=set 设定strace输入的零碎调用的后果集.-v 等与 abbrev=none.默认为abbrev=all.-e raw=set 将指定的零碎调用的参数以十六进制显示.-e signal=set 指定跟踪的零碎信号.默认为all.如 signal=!SIGIO(或者signal=!io),示意不跟踪SIGIO信号.-e read=set 输入从指定文件中读出 的数据.例如: -e read=3,5-e write=set 输入写入到指定文件中的数据.-o filename 将strace的输入写入文件filename-p pid 跟踪指定的过程pid.-s strsize 指定输入的字符串的最大长度.默认为32.文件名始终全副输入.-u username 以username的UID和GID执行被跟踪的命令

December 2, 2020 · 1 min · jiezi

关于php:PHP中的那些魔术常量

之前咱们曾经理解了一些罕用的魔术办法,除了魔术办法外,PHP还提供一些魔术常量,置信大家在日常的工作中也都应用过,这里给大家做一个总结。 其实PHP还提供了很多常量但都依赖于各类扩大库,而有几个常量是通用并且是追随它们所在代码的地位来提供一些与地位无关的信息,这些就是魔术常量。魔术常量是不分大小写的,\_\_LINE\_\_和\_\_line\_\_是一样的,但对于工程化的开发来说,常量还是尽量以大写为主。 \_\_LINE\_\_文件中的以后行号。 echo __LINE__ . PHP_EOL; // 3function testLine(){ echo __LINE__ . PHP_EOL; // 7}class TestLineClass{ function testLine() { echo __LINE__ . PHP_EOL; // 14 }}testLine();$test = new TestLineClass();$test->testLine();\_\_FILE\_\_文件的残缺门路和文件名。如果用在被蕴含文件中,则返回被蕴含的文件名。自 PHP 4.0.2 起,\_\_FILE\_\_ 总是蕴含一个绝对路径(如果是符号连贯,则是解析后的绝对路径),而在此之前的版本有时会蕴含一个相对路径。 echo __FILE__ . PHP_EOL; // D:\phpproject\php\newblog\php-magic-constant.php\_\_DIR\_\_文件所在的目录。如果用在被包含文件中,则返回被包含的文件所在的目录。它等价于 dirname(\_\_FILE\_\_)。除非是根目录,否则目录中名不包含开端的斜杠。(PHP 5.3.0中新增) = echo __DIR__ . PHP_EOL; // D:\phpproject\php\newblog\_\_FUNCTION\_\_函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(辨别大小写)。在 PHP 4 中该值总是小写字母的。 echo __FUNCTION__ . PHP_EOL; // 啥都没输入function testFunction(){ echo __FUNCTION__ . PHP_EOL; // testFunction}class TestFunctionClass{ function testFunction1() { echo __FUNCTION__ . PHP_EOL; // testFunction1 }}testFunction();$test = new TestFunctionClass();$test->testFunction1();\_\_CLASS\_\_类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(辨别大小写)。在 PHP 4 中该值总是小写字母的。类名包含其被申明的作用区域(例如 Foo\Bar)。留神自 PHP 5.4 起 \_\_CLASS\_\_ 对 trait 也起作用。当用在 trait 办法中时,\_\_CLASS\_\_ 是调用 trait 办法的类的名字。 ...

December 2, 2020 · 2 min · jiezi

关于php:Hyperf-发布-v2021-版本企业级的-PHP-微服务云原生协程框架

更新内容本周次要新增了局部个性,并修复了一些组件的 ????Bug,持续晋升 Hyperf 的稳定性,公布于 2.0.21 版。 倡议用户应用以下命令更新此版本。 composer update "hyperf/*" -o间接拜访 官网 hyperf.io 或 文档 hyperf.wiki 查看更新内容 新增#2857 为 service-governance 组件新增 Consul 的 ACL Token 反对。#2870 为脚本 vendor:publish 反对公布配置目录的能力。#2875 为 watcher 组件新增可选项 no-restart,容许动静批改注解缓存,但不重启服务。#2883 为 scout 组件数据导入脚本,减少可选项 --chunk 和 --column|c,容许用户指定任一字段,进行数据插入,解决偏移量过大导致查问效率慢的问题。#2891 为 crontab 组件新增可用于公布的配置文件。修复#2874 修复在应用 watcher 组件时, scan.ignore_annotations 配置不失效的问题。#2878 修复 nsq 组件中,nsqd 配置无奈失常工作的问题。变更#2851 批改 view 组件默认的配置文件,应用 view-engine 引擎,而非第三方 blade 引擎。优化#2785 优化 watcher 组件,使其异样信息更加人性化。#2861 优化 Guzzle Coroutine Handler,当其 statusCode 小于 0 时,抛出对应异样。#2868 优化 Guzzle 的 sink 配置,使其反对传入 resource。对于 HyperfHyperf 是基于 Swoole 4.5+ 实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量罕用的组件,性能较传统基于 PHP-FPM 的框架有质的晋升,提供超高性能的同时,也放弃着极其灵便的可扩展性,规范组件均基于 PSR 规范 实现,基于弱小的依赖注入设计,保障了绝大部分组件或类都是 可替换 与 可复用 的。 ...

December 1, 2020 · 1 min · jiezi

关于php:PHP-5-源码编译

下载php5.6.2源码wget http://mirrors.sohu.com/php/p... 到指定的目录下cd /opt/software/lnmp/ 解压缩tar -zxvf php-5.6.2.tar.gz yum -y install libvpx-devel 编译参数--prefix=/usr/local/php56 能够更改为 --prefix=/usr/local/php/56 这样当前在PHP版本升级是,间接在此目录下装置和创立新版本的php ./configure \--prefix=/usr/local/php56 \ --with-config-file-path=/usr/local/php56/etc \--enable-fpm \--with-fpm-user=webadmin \--with-fpm-group=webadmin \--enable-inline-optimization \--enable-shared \--enable-soap \--with-libxml-dir \--with-xmlrpc \--with-openssl \--with-mcrypt \--with-mhash \--with-pcre-regex \--with-sqlite3 \--with-zlib \--enable-bcmath \--with-iconv \--with-bz2 \--enable-calendar \--with-curl \--with-cdb \--enable-dom \--enable-exif \--enable-fileinfo \--enable-filter \--with-pcre-dir \--enable-ftp \--with-gd \--with-openssl-dir \--with-jpeg-dir \--with-png-dir \--with-zlib-dir \--with-freetype-dir \--enable-gd-native-ttf \--enable-gd-jis-conv \--with-gettext \--with-gmp \--with-mhash \--enable-json \--enable-mbstring \--enable-mbregex \--enable-mbregex-backtrack \--with-libmbfl \--with-onig \--enable-pdo \--with-mysqli=mysqlnd \--with-mysql=mysqlnd \--with-pdo-mysql=mysqlnd \--with-pdo-mysql=mysqlnd \--with-zlib-dir \--with-pdo-sqlite \--with-readline \--enable-session \--enable-shmop \--enable-simplexml \--enable-sockets \--enable-sysvmsg \--enable-sysvsem \--enable-sysvshm \--enable-wddx \--with-libxml-dir \--with-xsl \--enable-zip \--enable-mysqlnd-compression-support \--with-pear \--enable-opcache \--enable-pcntl \--with-vpx-dir \--enable-intl \ ...

December 1, 2020 · 1 min · jiezi

关于php:PHP中的static

对于动态变量和办法的问题也是面试中常常会呈现的问题,这种问题多看手册搞明确原委就能解决,只是的确对于动态变量的问题还是比拟绕的,这里咱们就联合手册用理论的代码来看! class Test{ static $v = 'a'; static function showV() { echo self::$v; } function showVV() { echo self::$v; } static function showVVV() { // $this->showVV(); // 会间接报错 }}先筹备一个类,这外面有动态变量、静态方法,其中showV()办法是静态方法调用动态变量,showVV()办法是一般办法调用动态变量,showVVV()办法是一般办法调用静态方法。 从正文中能够看出第一个问题,一般办法应用$this调用静态方法会报错,也就是说,$this这个东东对于所有动态的货色都是不敌对的,不信您关上正文试试,也能够去调用动态的$v变量,间接就是语法错误的提醒。 接下来,咱们实例化类,并开始一些测试 $t = new Test();$t->showV();//echo $t->v; // 报异样echo Test::$v;//Test::showVV(); // 报异样$t->showVV();1行:实例化的类间接调用showV(),这是没问题的,静态方法能够通过一般的形式调用,当然咱们正规的应该是应用Test::showV()来进行调用,留神这里面试的时候会是坑2行:失常调用2行:间接->v是不行的,办法能够进行一般调用,但属性不行3行:用动态调用的形式是没问题的4行:失常获取动态变量5行: 应用::当然不能调用非静态方法啦6行:失常办法中能够应用动态变量那么问题来了,静态方法中不能应用$this,如何取得变量内容呢?请参考单例模式,未来咱们会在设计模式的系列文章中讲到,这里先卖个关子,大家也能够本人钻研下。 下面是失常来说一些比较简单的动态属性和办法的演示,接下来好玩的货色就来了。 初始化个性class Calculate{ function cacl() { static $a = 1; echo $a; $a++; } static function cacl2() { static $a = 1; echo $a; $a++; } static $b = 1; static function cacl3() { echo self::$b; self::$b++; }}$calculate = new Calculate();$calculate->cacl(); // 1$calculate->cacl(); // 2Calculate::cacl2(); // 1Calculate::cacl2(); // 2Calculate::cacl3(); // 1Calculate::cacl3(); // 2看着代码很多,其实都是在讲一件事儿,如果是一般的$a和$b,那么每次都在从新赋值,echo进去的都是0,然而动态属性可不一样。动态属性是运行时计算的,只在第一次赋值的时候是真正的赋值操作,而后并不会进行赋值,能够相当于这一行代码不存在。 ...

December 1, 2020 · 2 min · jiezi

关于php:PHP中的输出echoprintprintfsprintfprintr和vardump

大家在面试中,常常会被问到的问题: 请简要阐明PHP的打印形式都有哪些?或者间接点问: 请阐明echo、print、print_r的区别看着很简略,个别会呈现在初中级的口试题中。然而要真正说明确这些语言构造或者函数也不是那么简略的事件。明天咱们就来好好看看这些打印输出相干的内容。 echo最根底的输入语句,不是函数是语言构造,不须要括号。能够应用参数列表,用逗号分隔。但如果加了括号就不能用逗号分隔着输入了。没有返回值。 echo 'fullstackpm'; // 失常输入:fullstackpmecho 'fullstackpm', ' is ', 'Good!'; // 失常输入:fullstackpm is Good!echo ('fullstackpm'); // 失常输入:fullstackpmecho ('fullstackpm', ' is ', 'Good!'); // 报错了print根本和echo一样,然而不反对参数列表,有返回值。返回值永远是1。 因为有返回值,所以相对来说效率不如echo print 'fullstackpm'; // 失常输入:fullstackpmprint 'fullstackpm', ' is ', 'Good!'; // 谬误$r = print ('fullstackpm'); // 失常输入:fullstackpmprint $r; // 输入1printf和sprintf两个很高大上的函数,能够格式化输入字符串。用%表明占位符,前面的参数对应进行占位符的替换。printf和sprintf的区别就是前者间接进行了输入,而后者是将字符串进行了函数返回。请看实例。 $str = 'My name is %s, I\'m %d years old.';printf($str, 'fullstackpm', 1002); // 间接输入:My name is fullstackpm, I'm 1002 years old.$s = sprintf($str, 'WoW', 12); // 这里不会输入print $s; // 输入:My name is WoW, I'm 12 years old.你起码要记住的,%s代表字符串,%d代表数字,%f是浮点数,%%是输入%自身,其余还有许多类型能够查看相干文档。另外还有相似的几个: ...

December 1, 2020 · 1 min · jiezi

关于php:Mac下不同版本php切换

A.首先是切换不同版本的PHP Nginx切换不同版本php的核心思想是配置不同版本php中的php-fpm。以php7版本为例,具体步骤如下:1.文件目录 /usr/local/etc/php/7.0/php-fpm.d/www.conf (这个是php7版本的,而php5.6版本是在php-fpm.conf文件中) 2.批改文件中的listen,不同版本php的listen不同 3:批改nginx中的nginx.conf文件:文件第一行的user要和www.conf中的user,group保持一致。 将fastcgi_pass批改成www.conf中的listen 4:批改实现后,重启nginx和php-fpm. 重启nginx: sudo nginx -t sudo nginx -s reload 5.重启php重启php的php-fpm:首先最好先敞开所有的php-fpm,指令为sudo killall php-fpm而后再启动php-fpm/usr/local/Cellar/php70/7.0.21_13/sbin/php7.0-fpm start

November 30, 2020 · 1 min · jiezi

关于php:windows系统xampp安装时出现的问题以及解决

1.php -v 查看php版本时会呈现PHP Startup: Unable to load dynamic library 'bz2' (tried: \xampp\php\ext\bz2)等问题或者reading in Unknown on line 0,这个的意思是模块的确,导致这个的起因是windows零碎是须要盘符的,能够进入\xampp\php文件夹下找到php.ini配置文件批改,找到extension_dir = "D:\xampp\php\ext"加上盘符即可。2.php-v Cannot open '\xampp\php\extras\browscap.ini' 问题也是盘符问题,找到php.ini 找到browscap = "D:\xampp\php\extras\browscap.ini"加上盘符即可。

November 30, 2020 · 1 min · jiezi

关于php:PHP80新版再创奇迹性能提升10URLOS为您提供PHP80一键安装方法

PHP团队于2020年11月26日发表 PHP 8 正式公布! PHP 8.0.0 目前是最新的次要版本,它引入了一些重大变更,其中最受关注的是Just In Time (JIT) 编译器的退出,相比拟 PHP 7.4 稳定版,PHP 8.0 在性能上大概改良了 10%。 除此之外,PHP8.0还减少了对属性、联结类型,动态返回类型和其余附加语言的反对。 鉴于PHP8.0刚刚公布,传统的编译装置较为繁琐,因而URLOS为抢鲜体验的小伙伴们提供了疾速装置PHP8.0的办法 办法一:PHP8.0网站环境一键装置命令export domains="website-340429.com"export ports="80 8080"export dbPassword="dbPass1^ngsPfn5YXD" export sftpPassword="sftpPass1^2Ak68n9gKa" export appId="195"export nodeId="1"curl -O https://www.urlos.com/uai && sh uai应用SSH终端登录主机,复制并粘贴以上命令即可一键装置PHP8.0网站环境更多阐明请参见:PHP8.0网站环境一键装置命令 通过办法一装置PHP8.0网站环境之后,如需开启JIT编译器,请批改并部署PHP8.0,而后依照办法二的形式勾选opcache扩大,在php.ini附加内容中填入相干内容,重新部署即可。 办法二:通过URLOS利用市场装置PHP8.0网站环境首先通过命令行一键装置URLOS面板: curl -O https://www.urlos.com/siu && sh siu装置实现后登录URLOS,在利用市场中搜寻php8.0,点击装置按钮:如果想要抢鲜感触JIT编译器带来的极速体验,请在PHP配置中勾选opcache扩大,并在“php.ini附加内容”中填入: opcache.enable=1opcache.jit_buffer_size=100MPHP8.0网站环境部署实现后,在浏览器中输出http://你的ip:8080关上网站,查看phpinfo当看到这样一组信息,阐明JIT编译器能够失常应用了请多PHP8.0介绍请参考官网文档:https://www.php.net/releases/...

November 28, 2020 · 1 min · jiezi

关于php:mac中php扩展编译问题

1.装置命令brew install phpbrew upgrade php扩大应首先尝试 pecl install xx 装置。不通过时的状况:如:swoole、uuid,上面为踩坑教训。 2.fatal error: 'php.h' file not found百度计划: brew doctor && brew link --overwrite php【修复零碎链接】,依然有问题。 上面是sdebug装置实例:git clone git@github.com:swoole/sdebug.git -b sdebug_2_9 --depth=1cd sdebugphpize./configuremake cleanmakemake install查找 php.h 等,缺啥加上就行cp -r /usr/local/include/php/ sdebugmake find . -name zend.hcp ./Zend/* .make find . -name TSRM.hcp ./TSRM/* .make胜利,持续 make installll /usr/local/Cellar/php/7.4.12/lib/php/20190902/能够看到 xdebug.so 曾经好了,增加即可。 总体就是cp -r /usr/local/include/php/ sdebug && cp ./Zend/* . && cp ./TSRM/* .而后从新 make,增加到php.ini: ...

November 27, 2020 · 1 min · jiezi

关于php:短信验证码注册登录的实现php接入的3种方法附示例

上周,有敌人须要帮忙做一个对于手机短信验证码注册登录的性能,之前没有做过,于是我查查材料,汇总出PHP接入短信验证码的3种办法,当初和大家分享: 1、cURL `<?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://vip.veesing.com/smsApi/verifyCode", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "appId=41KYR0EB&appKey=IIWCKKSR7NOQ&phone=1561894**&templateId=1043&variables=1234", CURLOPT_HTTPHEADER => array( "Content-Type: application/x-www-form-urlencoded;charset=utf-8"),)); $response = curl_exec($curl); curl_close($curl);echo $response;` 2、HTTP_Request2 `<?phprequire_once 'HTTP/Request2.php';$request = new HTTP_Request2();$request->setUrl('https://vip.veesing.com/smsAp...');$request->setMethod(HTTP_Request2::METHOD_POST);$request->setConfig(array( 'follow_redirects' => TRUE));$request->setHeader(array( 'Content-Type' => 'application/x-www-form-urlencoded;charset=utf-8'));$request->addPostParameter(array( 'appId' => '41KYR0EB**', 'appKey' => 'IIWCKKSR7NOQ**', 'phone' => '1561894**', 'templateId' => '1043', 'variables' => '1234'));try { $response = $request->send(); if ($response->getStatus() == 200) { ...

November 27, 2020 · 1 min · jiezi

关于php:Swoole-v459-版本发布兼容-PHP8

PHP8 当初曾经正式公布了,它引入了一些重大变更,以及许多新个性和性能优化,包含命名参数、联结类型、注解、Constructor Property Promotion、match 表达式、nullsafe 运算符、JIT,以及对类型零碎、错误处理和一致性的改良。 Swoole 也在第一工夫进行来兼容,能够和 PHP8 一起应用,须要在 PHP8 应用 Swoole 的小伙伴能够间接应用此版本,其余低版本可能编译失败哦。 更新日志加强为 CoroutineHttpClient 增加 SWOOLE_HTTP_CLIENT_ESTATUS_SEND_FAILED 常量 (#3873) (@sy-records)修复兼容 PHP8 (#3868) (#3869) (#3872) (@twose) (@huanghantao) (@doubaokun)修复未定义的常量 CURLOPT_HEADEROPT 和 CURLOPT_PROXYHEADER (swoole/library#77) (@sy-records)修复 CURLOPT_USERPWD (swoole/library@7952a7b) (@twose)

November 27, 2020 · 1 min · jiezi

关于php:PHP-Swoole-实现异步任务队列

最近接手一个对接短信的需要,这个需要自身并没有什么难度,间接依照服务商的要求申请具体的接口就好了。 最开始是应用传统的同步阻塞形式实现了一遍,用户体验并不好,发送短信须要期待,期待服务商的接口返回内容,才持续向下执行。 因为最近在学习Swoole,Swoole 中有一个“异步工作”,就特地适宜以下利用场景: 须要执行耗时操作,会阻塞主过程用户不须要期待返回后果联合官网手册和Latent 的基于 swoole 下 异步音讯队列 API,最终简略封装了一个解决API 的类,实现如下: 服务端服务端是基于本地Tcp,监听9501端口。 <?phpclass taskServer{ const HOST = "127.0.0.1"; const PORT = 9501; public $server = null; public function __construct() { $this->server = new SWoole\Server(self::HOST, self::PORT); $this->server->set(array( "enable_coroutine" => false, // 敞开协程 "worker_num" => 2, // 开启的过程数 个别为cup核数 1-4 倍 "task_worker_num" => 2, // task过程的数量 'daemonize' => true, // 以守护过程的形式启动 )); // 注册事件 $this->server->on("connect", [$this, "onConnect"]); $this->server->on("receive", [$this, "onReceive"]); $this->server->on("close", [$this, "onClose"]); $this->server->on("task", [$this, "onTask"]); $this->server->on("finish", [$this, "onFinish"]); // 启用服务 $this->server->start(); } /** * 监听连贯事件 * @param $server * @param $fd */ public function onConnect($server, $fd){ echo "连贯胜利".PHP_EOL; } /** * 监听客户端发送的音讯 * @param $server "Server 对象" * @param $fd "惟一标示" * @param $form_id * @param $data "客户端发送的数据" */ public function onReceive($server, $fd, $form_id, $data){ // 投递工作 $server->task($data); $server->send($fd, "这是客户端向服务端发送的信息:{$data}"); } /** * 监听异步工作task事件 * @param $server * @param $task_id * @param $worker_id * @param $data * @return string */ public function onTask($server, $task_id, $worker_id, $data){ $data = json_decode($data, true); echo "开始执行异步工作".PHP_EOL; try { // 开始执行工作 $this->addLog(date('Y-m-d H:i:s')."开始执行工作".PHP_EOL ); // 告诉worker(必须 return,否则不会调用 onFinish) return $this->curl($data['url'], $data['data'], $data['type']); } catch (Exception $exception) { // 执行工作失败 $this->addLog(date('Y-m-d H:i:s')."执行工作失败".PHP_EOL); } } /** * 监听finish 事件 * @param $server * @param $task_id * @param $data */ public function onFinish($server, $task_id, $data){ $this->addLog(date("Y-m-d H:i:s")."异步工作执行实现".PHP_EOL); print_r( "来自服务端的音讯:{$data}"); } /** * 监听敞开连贯事件 * @param $server * @param $fd */ public function onClose($server, $fd){ echo "敞开TCP 连贯".PHP_EOL; } /** * 发动Get 或 Post 申请 * @param string $url 申请地址 * @param array $request_data 申请参数 * @param string $request_type 申请类型 * @param array $headers 头信息 * @param bool $is_ssl 是否是ssl * @return bool|string */ public function curl($url = '', $request_data = [], $request_type = 'get', $headers = [], $is_ssl = false) { $curl = curl_init (); // 初始化 // 设置 URL curl_setopt($curl, CURLOPT_URL, $url); // 不返回 Response 头部信息 curl_setopt ( $curl, CURLOPT_HEADER, 0 ); // 如果胜利只将后果返回,不主动输入任何内容 curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 设置申请参数 curl_setopt ( $curl, CURLOPT_POSTFIELDS, http_build_query($request_data)); // TRUE 时追踪句柄的申请字符串 curl_setopt($curl, CURLINFO_HEADER_OUT, true); // Post 类型减少以下解决 if( $request_type == 'post') { // 设置为POST形式 curl_setopt ( $curl, CURLOPT_POST, 1 ); // 设置头信息 curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length:' . strlen(json_encode($request_data)))); // 设置申请参数 curl_setopt ( $curl, CURLOPT_POSTFIELDS, json_encode($request_data)); // 当POST 数据大于1024 时强制执行 curl_setopt ( $curl, CURLOPT_HTTPHEADER, array("Expect:")); } // 判断是否绕过证书 if( $is_ssl ) { //绕过ssl验证 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); } if(!empty($headers)) curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); // 执行 $result = curl_exec ( $curl ); if ( $result == FALSE) return false; // 敞开资源 curl_close ( $curl ); return $result; } /** * 写入日志 * @param $content */ public function addLog($content){ $path = dirname(__FILE__)."/logs/"; if (!is_dir($path)) mkdir($path,0777,true); $file_name = $path.date("Y_m_d") . ".log"; if (!file_exists($file_name)) { touch($file_name); chown($file_name, 0777); } $file_log = fopen($file_name, "a"); fputs($file_log, $content); fclose($file_log); }}$server = new taskServer();客户端这里的客户端能够是 cli 脚本,也能够是对应控制器中的具体方法,只有能连贯Swoole 监听的Tcp 就行。 ...

November 26, 2020 · 3 min · jiezi

关于php:24linux常用的语句

linux罕用语句 零碎信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在应用的内核版本 dmidecode -q 显示硬件零碎部件 - (SMBIOS / DMI) hdparm -i /dev/hda 列举一个磁盘的架构个性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo 显示CPU info的信息 cat /proc/interrupts 显示中断 cat /proc/meminfo 校验内存应用 cat /proc/swaps 显示哪些swap被应用 cat /proc/version 显示内核的版本 cat /proc/net/dev 显示网络适配器及统计 cat /proc/mounts 显示已加载的文件系统 lspci -tv 列举 PCI 设施 lsusb -tv 显示 USB 设施 date 显示零碎日期 cal 2007 显示2007年的日历表 date 041217002007.00 设置日期和工夫 - 月日时候年.秒 clock -w 将工夫批改保留到 BIOS ...

November 26, 2020 · 10 min · jiezi

关于php:30关于MySQL索引的定义及理解

1、定义 索引在MySQL中也叫做“键”,是存储引擎用于疾速找到记录的一种数据结构。索引对于良好的性能 十分要害,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。 索引优化应该是对查问性能优化最无效的伎俩了。索引可能轻易将查问性能进步好几个数量级。 索引相当于字典的音序表,如果要查某个字,如果不应用音序表,则须要从几百页中逐页去查。 可想而知!!十分重要的概念!!!2、MySQL的索引分类索引分类 1.一般索引index :减速查找 2.惟一索引 主键索引:primary key :减速查找+束缚(不为空且惟一) 惟一索引:unique:减速查找+束缚 (惟一) 3.联结索引 \-primary key(id,name):联结主键索引 \-unique(id,name):联结惟一索引 \-index(id,name):联结一般索引 4.全文索引fulltext :用于搜寻很长一篇文章的时候,成果最好。 5.空间索引spatial :理解就好,简直不必 3、创立 `善用帮忙文档``help create``help create index``==================``1.创立索引` `-在创立表时就创立(须要留神的几点)` `create table s1(` `id int ,#能够在这加primary key` `#id int index #不能够这样加索引,因为index只是索引,没有束缚一说,` `#不能像主键,还有惟一束缚一样,在定义字段的时候加索引` `name char(20),` `age int,` `email varchar(30)` `#primary key(id) #也能够在这加` `index(id) #能够这样加` `);` `-在创立表后在创立` `create index name on s1(name); #增加一般索引` `create unique age on s1(age);增加惟一索引` `alter table s1 add primary key(id); #增加住建索引,也就是给id字段减少一个主键束缚` `create index name on s1(id,name); #增加一般联结索引``2.删除索引` `drop index id on s1;` `drop index name on s1; #删除一般索引` `drop index age on s1; #删除惟一索引,就和一般索引一样,不必在index前加unique来删,间接就能够删了` `alter table s1 drop primary key; #删除主键(因为它增加的时候是依照alter来减少的,那么咱们也用alter来删)`来自 博客园 bypp/p/7755307.html ...

November 26, 2020 · 1 min · jiezi