作者 景龙
1 个管道 的构建 通过 耗费 3 秒

修改接口更新数据到七牛云

正在显示 100 个修改的文件 包含 2028 行增加288 行删除

要显示太多修改。

为保证性能只显示 100 of 100+ 个文件。

@@ -637,15 +637,16 @@ class PersonController extends RestBaseController @@ -637,15 +637,16 @@ class PersonController extends RestBaseController
637 //上传至七牛云 637 //上传至七牛云
638 $url = str_replace('//', '/', str_replace('\\', '/', $info->getSaveName())); //20190602/1214564654.jpg目录 638 $url = str_replace('//', '/', str_replace('\\', '/', $info->getSaveName())); //20190602/1214564654.jpg目录
639 $filePath = $moveUrl.DS.$url;//本地磁盘路径 639 $filePath = $moveUrl.DS.$url;//本地磁盘路径
  640 + //上传至七牛云文件路径
  641 + $qiniu_file = 'uploads/'.$url;
640 $storage = new Storage(); 642 $storage = new Storage();
641 - $file = 'uploads/'.$url;  
642 -// $storage->upload($file, $filePath, 'image');  
643 - $arr[$k]['image_url'] = $host.DS.$file; 643 + $storage->upload($qiniu_file, $filePath, 'image');
  644 + $arr[$k]['image_url'] = $host.DS.$qiniu_file;
644 $arr[$k]['file_time'] = time(); 645 $arr[$k]['file_time'] = time();
645 $sys = $this->getOperateSys(); 646 $sys = $this->getOperateSys();
646 -// if($sys == 'Linux'){  
647 -// unlink($filePath);  
648 -// } 647 + if($sys == 'Linux'){
  648 + unlink($filePath);//适用于linux
  649 + }
649 }else{ 650 }else{
650 // 上传失败获取错误信息 651 // 上传失败获取错误信息
651 $this->error($file->getError()); 652 $this->error($file->getError());
@@ -31,7 +31,7 @@ return array ( @@ -31,7 +31,7 @@ return array (
31 //提示语 31 //提示语
32 'tips' => '质量第一 精心检修 可守合同 永争一流', 32 'tips' => '质量第一 精心检修 可守合同 永争一流',
33 //域名 33 //域名
34 - 'host' => 'http://xiaofang.w.bronet.cn', 34 + 'host' => 'http://app.tianjinhr.cn',
35 //甲方提交报修流程 35 //甲方提交报修流程
36 'a_step' => ['甲方提交报修信息','乙方确认信息','乙方维修设备','乙方提交维修单','甲方验收维修结果','甲方验收完成'], 36 'a_step' => ['甲方提交报修信息','乙方确认信息','乙方维修设备','乙方提交维修单','甲方验收维修结果','甲方验收完成'],
37 37
@@ -35,7 +35,7 @@ class CommonController extends RestBaseController @@ -35,7 +35,7 @@ class CommonController extends RestBaseController
35 if($res){ 35 if($res){
36 // $result['uid'] = $this->userId; 36 // $result['uid'] = $this->userId;
37 $result['company_name'] = $res['company_name']; 37 $result['company_name'] = $res['company_name'];
38 - $result['logo'] = $host.'/upload/'.$res['logo']; 38 + $result['logo'] = $host.'/'.$res['logo'];
39 //查找企业拥有的服务 39 //查找企业拥有的服务
40 $rule = $this->getRule($res,1); 40 $rule = $this->getRule($res,1);
41 $result['service'] = $rule; 41 $result['service'] = $rule;
@@ -87,7 +87,7 @@ class CommonController extends RestBaseController @@ -87,7 +87,7 @@ class CommonController extends RestBaseController
87 $field = 'id c_id,company_name,pid,logo'; 87 $field = 'id c_id,company_name,pid,logo';
88 $res = $this->getCompany($where,$field); 88 $res = $this->getCompany($where,$field);
89 $result['company_name'] = $res['company_name']; 89 $result['company_name'] = $res['company_name'];
90 - $result['logo'] = $host.'/upload/'.$res['logo']; 90 + $result['logo'] = $host.'/'.$res['logo'];
91 // $res['uid'] = $this->userId; 91 // $res['uid'] = $this->userId;
92 //甲方 92 //甲方
93 //查找企业拥有的服务 93 //查找企业拥有的服务
@@ -150,7 +150,7 @@ class CommonController extends RestBaseController @@ -150,7 +150,7 @@ class CommonController extends RestBaseController
150 if($value['id'] == 3){ 150 if($value['id'] == 3){
151 $flag = 1; 151 $flag = 1;
152 } 152 }
153 - $value['icon'] = $host.'/upload/'.$value['icon']; 153 + $value['icon'] = $host.'/'.$value['icon'];
154 } 154 }
155 $add = [ 155 $add = [
156 'id' => 100, 156 'id' => 100,
@@ -1616,11 +1616,11 @@ class CommonController extends RestBaseController @@ -1616,11 +1616,11 @@ class CommonController extends RestBaseController
1616 //甲方公司 1616 //甲方公司
1617 $a_company = $this->getCompany(['id'=>$project['a_cid']],'id,company_name,logo'); 1617 $a_company = $this->getCompany(['id'=>$project['a_cid']],'id,company_name,logo');
1618 $arr['a_company']['company_name'] = !empty($a_company['company_name'])?$a_company['company_name']:''; 1618 $arr['a_company']['company_name'] = !empty($a_company['company_name'])?$a_company['company_name']:'';
1619 - $arr['a_company']['logo'] = !empty($a_company['logo'])?$host.'/upload/'.$a_company['logo']:''; 1619 + $arr['a_company']['logo'] = !empty($a_company['logo'])?$host.'/'.$a_company['logo']:'';
1620 //乙方公司 1620 //乙方公司
1621 $b_company = $this->getCompany(['id'=>$project['b_cid']],'id,company_name,logo'); 1621 $b_company = $this->getCompany(['id'=>$project['b_cid']],'id,company_name,logo');
1622 $arr['b_company']['company_name'] = !empty($b_company['company_name'])?$b_company['company_name']:''; 1622 $arr['b_company']['company_name'] = !empty($b_company['company_name'])?$b_company['company_name']:'';
1623 - $arr['b_company']['logo'] = !empty($b_company['logo'])?$host.'/upload/'.$b_company['logo']:''; 1623 + $arr['b_company']['logo'] = !empty($b_company['logo'])?$host.'/'.$b_company['logo']:'';
1624 //报表标题 1624 //报表标题
1625 $arr['title'] = $project['name'].$report_name.'报表'; 1625 $arr['title'] = $project['name'].$report_name.'报表';
1626 } 1626 }
@@ -1665,7 +1665,8 @@ class CommonController extends RestBaseController @@ -1665,7 +1665,8 @@ class CommonController extends RestBaseController
1665 $user1 = $this->getIdentity($h_user['identity'],$h_user['id']); 1665 $user1 = $this->getIdentity($h_user['identity'],$h_user['id']);
1666 $arr['h_user_login']['party'] = $user1['party']; 1666 $arr['h_user_login']['party'] = $user1['party'];
1667 }else{ 1667 }else{
1668 - $arr['h_user_login'] = []; 1668 + $arr['h_user_login']['user'] = '';
  1669 + $arr['h_user_login']['party'] = '';
1669 } 1670 }
1670 1671
1671 //甲方验收人 1672 //甲方验收人
@@ -14,6 +14,7 @@ namespace app\portal\controller; @@ -14,6 +14,7 @@ namespace app\portal\controller;
14 use cmf\controller\AdminBaseController; 14 use cmf\controller\AdminBaseController;
15 use think\Db; 15 use think\Db;
16 use think\db\Query; 16 use think\db\Query;
  17 +use app\portal\model\InspectModel;
17 18
18 class AdminPartAController extends AdminBaseController 19 class AdminPartAController extends AdminBaseController
19 { 20 {
@@ -105,6 +106,8 @@ class AdminPartAController extends AdminBaseController @@ -105,6 +106,8 @@ class AdminPartAController extends AdminBaseController
105 } 106 }
106 } 107 }
107 $page = $list->render(); 108 $page = $list->render();
  109 + $host = new InspectModel();
  110 + $this->assign('host',$host::host);
108 $this->assign('list',$s_user['data']); 111 $this->assign('list',$s_user['data']);
109 $this->assign('page',$page); 112 $this->assign('page',$page);
110 // 渲染模板输出 113 // 渲染模板输出
@@ -14,6 +14,7 @@ namespace app\portal\controller; @@ -14,6 +14,7 @@ namespace app\portal\controller;
14 use cmf\controller\AdminBaseController; 14 use cmf\controller\AdminBaseController;
15 use think\Db; 15 use think\Db;
16 use think\db\Query; 16 use think\db\Query;
  17 +use app\portal\model\InspectModel;
17 18
18 class AdminPartBController extends AdminBaseController 19 class AdminPartBController extends AdminBaseController
19 { 20 {
@@ -88,6 +89,8 @@ class AdminPartBController extends AdminBaseController @@ -88,6 +89,8 @@ class AdminPartBController extends AdminBaseController
88 } 89 }
89 } 90 }
90 $page = $list->render(); 91 $page = $list->render();
  92 + $host = new InspectModel();
  93 + $this->assign('host',$host::host);
91 $this->assign('list',$s_user['data']); 94 $this->assign('list',$s_user['data']);
92 $this->assign('page',$page); 95 $this->assign('page',$page);
93 // 渲染模板输出 96 // 渲染模板输出
@@ -14,6 +14,7 @@ namespace app\portal\controller; @@ -14,6 +14,7 @@ namespace app\portal\controller;
14 use cmf\controller\AdminBaseController; 14 use cmf\controller\AdminBaseController;
15 use think\Db; 15 use think\Db;
16 use think\db\Query; 16 use think\db\Query;
  17 +use app\portal\model\InspectModel;
17 18
18 class AdminPartCController extends AdminBaseController 19 class AdminPartCController extends AdminBaseController
19 { 20 {
@@ -84,6 +85,8 @@ class AdminPartCController extends AdminBaseController @@ -84,6 +85,8 @@ class AdminPartCController extends AdminBaseController
84 } 85 }
85 } 86 }
86 $page = $list->render(); 87 $page = $list->render();
  88 + $host = new InspectModel();
  89 + $this->assign('host',$host::host);
87 $this->assign('list',$s_user['data']); 90 $this->assign('list',$s_user['data']);
88 $this->assign('page',$page); 91 $this->assign('page',$page);
89 // 渲染模板输出 92 // 渲染模板输出
@@ -19,6 +19,6 @@ class InspectModel extends Model @@ -19,6 +19,6 @@ class InspectModel extends Model
19 'more' => 'array', 19 'more' => 'array',
20 ]; 20 ];
21 21
22 - const host = 'http://xiaofang.w.bronet.cn'; 22 + const host = 'http://app.tianjinhr.cn';
23 23
24 } 24 }
@@ -33,7 +33,8 @@ @@ -33,7 +33,8 @@
33 "jpush/jpush": "^3.5", 33 "jpush/jpush": "^3.5",
34 "php-ffmpeg/php-ffmpeg": "^0.14.0", 34 "php-ffmpeg/php-ffmpeg": "^0.14.0",
35 "phpoffice/phpexcel": "^1.8", 35 "phpoffice/phpexcel": "^1.8",
36 - "phpoffice/phpspreadsheet": "^1.8" 36 + "phpoffice/phpspreadsheet": "^1.8",
  37 + "qiniu/php-sdk": "^7.2"
37 }, 38 },
38 "extra": { 39 "extra": {
39 "think-path": "simplewind/thinkphp" 40 "think-path": "simplewind/thinkphp"
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 "This file is @generated automatically" 5 "This file is @generated automatically"
6 ], 6 ],
7 - "content-hash": "eefad7073f8b6b0386400f460262980a", 7 + "content-hash": "adf10b068808ca84c772fda4dcf1592c",
8 "packages": [ 8 "packages": [
9 { 9 {
10 "name": "alchemy/binary-driver", 10 "name": "alchemy/binary-driver",
@@ -234,23 +234,23 @@ @@ -234,23 +234,23 @@
234 }, 234 },
235 { 235 {
236 "name": "ezyang/htmlpurifier", 236 "name": "ezyang/htmlpurifier",
237 - "version": "v4.10.0", 237 + "version": "v4.11.0",
238 "source": { 238 "source": {
239 "type": "git", 239 "type": "git",
240 "url": "https://github.com/ezyang/htmlpurifier.git", 240 "url": "https://github.com/ezyang/htmlpurifier.git",
241 - "reference": "d85d39da4576a6934b72480be6978fb10c860021" 241 + "reference": "83ab08bc1af7d808a9e0fbf024f1c24bfd73c0a7"
242 }, 242 },
243 "dist": { 243 "dist": {
244 "type": "zip", 244 "type": "zip",
245 - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/d85d39da4576a6934b72480be6978fb10c860021",  
246 - "reference": "d85d39da4576a6934b72480be6978fb10c860021", 245 + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/83ab08bc1af7d808a9e0fbf024f1c24bfd73c0a7",
  246 + "reference": "83ab08bc1af7d808a9e0fbf024f1c24bfd73c0a7",
247 "shasum": "" 247 "shasum": ""
248 }, 248 },
249 "require": { 249 "require": {
250 "php": ">=5.2" 250 "php": ">=5.2"
251 }, 251 },
252 "require-dev": { 252 "require-dev": {
253 - "simpletest/simpletest": "^1.1" 253 + "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd"
254 }, 254 },
255 "type": "library", 255 "type": "library",
256 "autoload": { 256 "autoload": {
@@ -263,7 +263,7 @@ @@ -263,7 +263,7 @@
263 }, 263 },
264 "notification-url": "https://packagist.org/downloads/", 264 "notification-url": "https://packagist.org/downloads/",
265 "license": [ 265 "license": [
266 - "LGPL" 266 + "LGPL-2.1-or-later"
267 ], 267 ],
268 "authors": [ 268 "authors": [
269 { 269 {
@@ -277,7 +277,7 @@ @@ -277,7 +277,7 @@
277 "keywords": [ 277 "keywords": [
278 "html" 278 "html"
279 ], 279 ],
280 - "time": "2018-02-23T01:58:20+00:00" 280 + "time": "2019-07-14T18:58:38+00:00"
281 }, 281 },
282 { 282 {
283 "name": "jpush/jpush", 283 "name": "jpush/jpush",
@@ -881,16 +881,16 @@ @@ -881,16 +881,16 @@
881 }, 881 },
882 { 882 {
883 "name": "phpoffice/phpspreadsheet", 883 "name": "phpoffice/phpspreadsheet",
884 - "version": "1.8.1", 884 + "version": "1.8.2",
885 "source": { 885 "source": {
886 "type": "git", 886 "type": "git",
887 "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", 887 "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
888 - "reference": "352c7002fefe4e4037d02654d853a1b09520946f" 888 + "reference": "0c1346a1956347590b7db09533966307d20cb7cc"
889 }, 889 },
890 "dist": { 890 "dist": {
891 "type": "zip", 891 "type": "zip",
892 - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/352c7002fefe4e4037d02654d853a1b09520946f",  
893 - "reference": "352c7002fefe4e4037d02654d853a1b09520946f", 892 + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/0c1346a1956347590b7db09533966307d20cb7cc",
  893 + "reference": "0c1346a1956347590b7db09533966307d20cb7cc",
894 "shasum": "" 894 "shasum": ""
895 }, 895 },
896 "require": { 896 "require": {
@@ -971,7 +971,7 @@ @@ -971,7 +971,7 @@
971 "xls", 971 "xls",
972 "xlsx" 972 "xlsx"
973 ], 973 ],
974 - "time": "2019-07-01T20:46:51+00:00" 974 + "time": "2019-07-08T21:21:25+00:00"
975 }, 975 },
976 { 976 {
977 "name": "psr/log", 977 "name": "psr/log",
@@ -1069,17 +1069,68 @@ @@ -1069,17 +1069,68 @@
1069 "time": "2017-10-23T01:57:42+00:00" 1069 "time": "2017-10-23T01:57:42+00:00"
1070 }, 1070 },
1071 { 1071 {
  1072 + "name": "qiniu/php-sdk",
  1073 + "version": "v7.2.9",
  1074 + "source": {
  1075 + "type": "git",
  1076 + "url": "https://github.com/qiniu/php-sdk.git",
  1077 + "reference": "afe7d8715d8a688b1d8d8cdf031240d2363dad90"
  1078 + },
  1079 + "dist": {
  1080 + "type": "zip",
  1081 + "url": "https://api.github.com/repos/qiniu/php-sdk/zipball/afe7d8715d8a688b1d8d8cdf031240d2363dad90",
  1082 + "reference": "afe7d8715d8a688b1d8d8cdf031240d2363dad90",
  1083 + "shasum": ""
  1084 + },
  1085 + "require": {
  1086 + "php": ">=5.3.3"
  1087 + },
  1088 + "require-dev": {
  1089 + "phpunit/phpunit": "~4.0",
  1090 + "squizlabs/php_codesniffer": "~2.3"
  1091 + },
  1092 + "type": "library",
  1093 + "autoload": {
  1094 + "psr-4": {
  1095 + "Qiniu\\": "src/Qiniu"
  1096 + },
  1097 + "files": [
  1098 + "src/Qiniu/functions.php"
  1099 + ]
  1100 + },
  1101 + "notification-url": "https://packagist.org/downloads/",
  1102 + "license": [
  1103 + "MIT"
  1104 + ],
  1105 + "authors": [
  1106 + {
  1107 + "name": "Qiniu",
  1108 + "email": "sdk@qiniu.com",
  1109 + "homepage": "http://www.qiniu.com"
  1110 + }
  1111 + ],
  1112 + "description": "Qiniu Resource (Cloud) Storage SDK for PHP",
  1113 + "homepage": "http://developer.qiniu.com/",
  1114 + "keywords": [
  1115 + "cloud",
  1116 + "qiniu",
  1117 + "sdk",
  1118 + "storage"
  1119 + ],
  1120 + "time": "2019-07-09T07:55:07+00:00"
  1121 + },
  1122 + {
1072 "name": "symfony/filesystem", 1123 "name": "symfony/filesystem",
1073 - "version": "v4.3.1", 1124 + "version": "v4.3.3",
1074 "source": { 1125 "source": {
1075 "type": "git", 1126 "type": "git",
1076 "url": "https://github.com/symfony/filesystem.git", 1127 "url": "https://github.com/symfony/filesystem.git",
1077 - "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf" 1128 + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d"
1078 }, 1129 },
1079 "dist": { 1130 "dist": {
1080 "type": "zip", 1131 "type": "zip",
1081 - "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf2af40d738dec5e433faea7b00daa4431d0a4cf",  
1082 - "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf", 1132 + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b9896d034463ad6fd2bf17e2bf9418caecd6313d",
  1133 + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d",
1083 "shasum": "" 1134 "shasum": ""
1084 }, 1135 },
1085 "require": { 1136 "require": {
@@ -1116,7 +1167,7 @@ @@ -1116,7 +1167,7 @@
1116 ], 1167 ],
1117 "description": "Symfony Filesystem Component", 1168 "description": "Symfony Filesystem Component",
1118 "homepage": "https://symfony.com", 1169 "homepage": "https://symfony.com",
1119 - "time": "2019-06-03T20:27:40+00:00" 1170 + "time": "2019-06-23T08:51:25+00:00"
1120 }, 1171 },
1121 { 1172 {
1122 "name": "symfony/polyfill-ctype", 1173 "name": "symfony/polyfill-ctype",
@@ -1178,7 +1229,7 @@ @@ -1178,7 +1229,7 @@
1178 }, 1229 },
1179 { 1230 {
1180 "name": "symfony/process", 1231 "name": "symfony/process",
1181 - "version": "v4.3.1", 1232 + "version": "v4.3.3",
1182 "source": { 1233 "source": {
1183 "type": "git", 1234 "type": "git",
1184 "url": "https://github.com/symfony/process.git", 1235 "url": "https://github.com/symfony/process.git",
@@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
40 <td>{$vo.position}</td> 40 <td>{$vo.position}</td>
41 <td> 41 <td>
42 <notempty name="vo.avatar"> 42 <notempty name="vo.avatar">
43 - <img width="25" height="25" src="{$vo.avatar}"/> 43 + <img width="25" height="25" src="{$host}{$vo.avatar}"/>
44 <else/> 44 <else/>
45 <img width="25" height="25" src="/themes/admin_simpleboot3/public/assets/images/headicon.png"> 45 <img width="25" height="25" src="/themes/admin_simpleboot3/public/assets/images/headicon.png">
46 </notempty> 46 </notempty>
@@ -39,7 +39,7 @@ @@ -39,7 +39,7 @@
39 <td>{$vo.position}</td> 39 <td>{$vo.position}</td>
40 <td> 40 <td>
41 <notempty name="vo.avatar"> 41 <notempty name="vo.avatar">
42 - <img width="25" height="25" src="{:cmf_get_image_url($vo.avatar)}"/> 42 + <img width="25" height="25" src="{$host}{$vo.avatar}"/>
43 <else/> 43 <else/>
44 <img width="25" height="25" src="/themes/admin_simpleboot3/public/assets/images/headicon.png"> 44 <img width="25" height="25" src="/themes/admin_simpleboot3/public/assets/images/headicon.png">
45 </notempty> 45 </notempty>
@@ -24,7 +24,6 @@ @@ -24,7 +24,6 @@
24 <th>职称</th> 24 <th>职称</th>
25 <th>头像</th> 25 <th>头像</th>
26 <th>手机</th> 26 <th>手机</th>
27 - <th>项目组</th>  
28 <th>公司名称</th> 27 <th>公司名称</th>
29 <th>子公司名称</th> 28 <th>子公司名称</th>
30 </tr> 29 </tr>
@@ -40,13 +39,12 @@ @@ -40,13 +39,12 @@
40 <td>{$vo.identity_c}</td> 39 <td>{$vo.identity_c}</td>
41 <td> 40 <td>
42 <notempty name="vo.avatar"> 41 <notempty name="vo.avatar">
43 - <img width="25" height="25" src="{:cmf_get_image_url($vo.avatar)}"/> 42 + <img width="25" height="25" src="{$host}{$vo.avatar}"/>
44 <else/> 43 <else/>
45 <img width="25" height="25" src="/themes/admin_simpleboot3/public/assets/images/headicon.png"> 44 <img width="25" height="25" src="/themes/admin_simpleboot3/public/assets/images/headicon.png">
46 </notempty> 45 </notempty>
47 </td> 46 </td>
48 <td>{$vo.mobile}</td> 47 <td>{$vo.mobile}</td>
49 - <td></td>  
50 <td>{$vo.company_name_head}</td> 48 <td>{$vo.company_name_head}</td>
51 <td>{$vo.company_name}</td> 49 <td>{$vo.company_name}</td>
52 </tr> 50 </tr>
@@ -67,6 +67,7 @@ return array( @@ -67,6 +67,7 @@ return array(
67 '75c79eb1b25749b05a47976f32b0d8a2' => $vendorDir . '/markbaker/matrix/classes/src/operations/divideby.php', 67 '75c79eb1b25749b05a47976f32b0d8a2' => $vendorDir . '/markbaker/matrix/classes/src/operations/divideby.php',
68 '6ab8ad87a734f276a6bcd5a0fe1289be' => $vendorDir . '/markbaker/matrix/classes/src/operations/divideinto.php', 68 '6ab8ad87a734f276a6bcd5a0fe1289be' => $vendorDir . '/markbaker/matrix/classes/src/operations/divideinto.php',
69 '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', 69 '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
  70 + '841780ea2e1d6545ea3a253239d59c05' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/functions.php',
70 '1cfd2761b63b0a29ed23657ea394cb2d' => $vendorDir . '/topthink/think-captcha/src/helper.php', 71 '1cfd2761b63b0a29ed23657ea394cb2d' => $vendorDir . '/topthink/think-captcha/src/helper.php',
71 'cc56288302d9df745d97c934d6a6e5f0' => $vendorDir . '/topthink/think-queue/src/common.php', 72 'cc56288302d9df745d97c934d6a6e5f0' => $vendorDir . '/topthink/think-queue/src/common.php',
72 '644e9cafc67b331e17cc7661548f33d0' => $vendorDir . '/weiwei/api-doc/src/helper.php', 73 '644e9cafc67b331e17cc7661548f33d0' => $vendorDir . '/weiwei/api-doc/src/helper.php',
@@ -14,6 +14,7 @@ return array( @@ -14,6 +14,7 @@ return array(
14 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), 14 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
15 'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'), 15 'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'),
16 'Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'), 16 'Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'),
  17 + 'Qiniu\\' => array($vendorDir . '/qiniu/php-sdk/src/Qiniu'),
17 'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'), 18 'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
18 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 19 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
19 'PhpOffice\\PhpSpreadsheet\\' => array($vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet'), 20 'PhpOffice\\PhpSpreadsheet\\' => array($vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet'),
@@ -68,6 +68,7 @@ class ComposerStaticInit929fb365b9981d29459d58f676689cf7 @@ -68,6 +68,7 @@ class ComposerStaticInit929fb365b9981d29459d58f676689cf7
68 '75c79eb1b25749b05a47976f32b0d8a2' => __DIR__ . '/..' . '/markbaker/matrix/classes/src/operations/divideby.php', 68 '75c79eb1b25749b05a47976f32b0d8a2' => __DIR__ . '/..' . '/markbaker/matrix/classes/src/operations/divideby.php',
69 '6ab8ad87a734f276a6bcd5a0fe1289be' => __DIR__ . '/..' . '/markbaker/matrix/classes/src/operations/divideinto.php', 69 '6ab8ad87a734f276a6bcd5a0fe1289be' => __DIR__ . '/..' . '/markbaker/matrix/classes/src/operations/divideinto.php',
70 '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', 70 '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
  71 + '841780ea2e1d6545ea3a253239d59c05' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/functions.php',
71 '1cfd2761b63b0a29ed23657ea394cb2d' => __DIR__ . '/..' . '/topthink/think-captcha/src/helper.php', 72 '1cfd2761b63b0a29ed23657ea394cb2d' => __DIR__ . '/..' . '/topthink/think-captcha/src/helper.php',
72 'cc56288302d9df745d97c934d6a6e5f0' => __DIR__ . '/..' . '/topthink/think-queue/src/common.php', 73 'cc56288302d9df745d97c934d6a6e5f0' => __DIR__ . '/..' . '/topthink/think-queue/src/common.php',
73 '644e9cafc67b331e17cc7661548f33d0' => __DIR__ . '/..' . '/weiwei/api-doc/src/helper.php', 74 '644e9cafc67b331e17cc7661548f33d0' => __DIR__ . '/..' . '/weiwei/api-doc/src/helper.php',
@@ -91,6 +92,10 @@ class ComposerStaticInit929fb365b9981d29459d58f676689cf7 @@ -91,6 +92,10 @@ class ComposerStaticInit929fb365b9981d29459d58f676689cf7
91 'Symfony\\Component\\Process\\' => 26, 92 'Symfony\\Component\\Process\\' => 26,
92 'Symfony\\Component\\Filesystem\\' => 29, 93 'Symfony\\Component\\Filesystem\\' => 29,
93 ), 94 ),
  95 + 'Q' =>
  96 + array (
  97 + 'Qiniu\\' => 6,
  98 + ),
94 'P' => 99 'P' =>
95 array ( 100 array (
96 'Psr\\SimpleCache\\' => 16, 101 'Psr\\SimpleCache\\' => 16,
@@ -155,6 +160,10 @@ class ComposerStaticInit929fb365b9981d29459d58f676689cf7 @@ -155,6 +160,10 @@ class ComposerStaticInit929fb365b9981d29459d58f676689cf7
155 array ( 160 array (
156 0 => __DIR__ . '/..' . '/symfony/filesystem', 161 0 => __DIR__ . '/..' . '/symfony/filesystem',
157 ), 162 ),
  163 + 'Qiniu\\' =>
  164 + array (
  165 + 0 => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu',
  166 + ),
158 'Psr\\SimpleCache\\' => 167 'Psr\\SimpleCache\\' =>
159 array ( 168 array (
160 0 => __DIR__ . '/..' . '/psr/simple-cache/src', 169 0 => __DIR__ . '/..' . '/psr/simple-cache/src',
@@ -235,26 +235,26 @@ @@ -235,26 +235,26 @@
235 }, 235 },
236 { 236 {
237 "name": "ezyang/htmlpurifier", 237 "name": "ezyang/htmlpurifier",
238 - "version": "v4.10.0",  
239 - "version_normalized": "4.10.0.0", 238 + "version": "v4.11.0",
  239 + "version_normalized": "4.11.0.0",
240 "source": { 240 "source": {
241 "type": "git", 241 "type": "git",
242 "url": "https://github.com/ezyang/htmlpurifier.git", 242 "url": "https://github.com/ezyang/htmlpurifier.git",
243 - "reference": "d85d39da4576a6934b72480be6978fb10c860021" 243 + "reference": "83ab08bc1af7d808a9e0fbf024f1c24bfd73c0a7"
244 }, 244 },
245 "dist": { 245 "dist": {
246 "type": "zip", 246 "type": "zip",
247 - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/d85d39da4576a6934b72480be6978fb10c860021",  
248 - "reference": "d85d39da4576a6934b72480be6978fb10c860021", 247 + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/83ab08bc1af7d808a9e0fbf024f1c24bfd73c0a7",
  248 + "reference": "83ab08bc1af7d808a9e0fbf024f1c24bfd73c0a7",
249 "shasum": "" 249 "shasum": ""
250 }, 250 },
251 "require": { 251 "require": {
252 "php": ">=5.2" 252 "php": ">=5.2"
253 }, 253 },
254 "require-dev": { 254 "require-dev": {
255 - "simpletest/simpletest": "^1.1" 255 + "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd"
256 }, 256 },
257 - "time": "2018-02-23T01:58:20+00:00", 257 + "time": "2019-07-14T18:58:38+00:00",
258 "type": "library", 258 "type": "library",
259 "installation-source": "dist", 259 "installation-source": "dist",
260 "autoload": { 260 "autoload": {
@@ -267,7 +267,7 @@ @@ -267,7 +267,7 @@
267 }, 267 },
268 "notification-url": "https://packagist.org/downloads/", 268 "notification-url": "https://packagist.org/downloads/",
269 "license": [ 269 "license": [
270 - "LGPL" 270 + "LGPL-2.1-or-later"
271 ], 271 ],
272 "authors": [ 272 "authors": [
273 { 273 {
@@ -902,17 +902,17 @@ @@ -902,17 +902,17 @@
902 }, 902 },
903 { 903 {
904 "name": "phpoffice/phpspreadsheet", 904 "name": "phpoffice/phpspreadsheet",
905 - "version": "1.8.1",  
906 - "version_normalized": "1.8.1.0", 905 + "version": "1.8.2",
  906 + "version_normalized": "1.8.2.0",
907 "source": { 907 "source": {
908 "type": "git", 908 "type": "git",
909 "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", 909 "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
910 - "reference": "352c7002fefe4e4037d02654d853a1b09520946f" 910 + "reference": "0c1346a1956347590b7db09533966307d20cb7cc"
911 }, 911 },
912 "dist": { 912 "dist": {
913 "type": "zip", 913 "type": "zip",
914 - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/352c7002fefe4e4037d02654d853a1b09520946f",  
915 - "reference": "352c7002fefe4e4037d02654d853a1b09520946f", 914 + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/0c1346a1956347590b7db09533966307d20cb7cc",
  915 + "reference": "0c1346a1956347590b7db09533966307d20cb7cc",
916 "shasum": "" 916 "shasum": ""
917 }, 917 },
918 "require": { 918 "require": {
@@ -951,7 +951,7 @@ @@ -951,7 +951,7 @@
951 "mpdf/mpdf": "Option for rendering PDF with PDF Writer", 951 "mpdf/mpdf": "Option for rendering PDF with PDF Writer",
952 "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" 952 "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer"
953 }, 953 },
954 - "time": "2019-07-01T20:46:51+00:00", 954 + "time": "2019-07-08T21:21:25+00:00",
955 "type": "library", 955 "type": "library",
956 "installation-source": "dist", 956 "installation-source": "dist",
957 "autoload": { 957 "autoload": {
@@ -1096,25 +1096,78 @@ @@ -1096,25 +1096,78 @@
1096 ] 1096 ]
1097 }, 1097 },
1098 { 1098 {
  1099 + "name": "qiniu/php-sdk",
  1100 + "version": "v7.2.9",
  1101 + "version_normalized": "7.2.9.0",
  1102 + "source": {
  1103 + "type": "git",
  1104 + "url": "https://github.com/qiniu/php-sdk.git",
  1105 + "reference": "afe7d8715d8a688b1d8d8cdf031240d2363dad90"
  1106 + },
  1107 + "dist": {
  1108 + "type": "zip",
  1109 + "url": "https://api.github.com/repos/qiniu/php-sdk/zipball/afe7d8715d8a688b1d8d8cdf031240d2363dad90",
  1110 + "reference": "afe7d8715d8a688b1d8d8cdf031240d2363dad90",
  1111 + "shasum": ""
  1112 + },
  1113 + "require": {
  1114 + "php": ">=5.3.3"
  1115 + },
  1116 + "require-dev": {
  1117 + "phpunit/phpunit": "~4.0",
  1118 + "squizlabs/php_codesniffer": "~2.3"
  1119 + },
  1120 + "time": "2019-07-09T07:55:07+00:00",
  1121 + "type": "library",
  1122 + "installation-source": "dist",
  1123 + "autoload": {
  1124 + "psr-4": {
  1125 + "Qiniu\\": "src/Qiniu"
  1126 + },
  1127 + "files": [
  1128 + "src/Qiniu/functions.php"
  1129 + ]
  1130 + },
  1131 + "notification-url": "https://packagist.org/downloads/",
  1132 + "license": [
  1133 + "MIT"
  1134 + ],
  1135 + "authors": [
  1136 + {
  1137 + "name": "Qiniu",
  1138 + "email": "sdk@qiniu.com",
  1139 + "homepage": "http://www.qiniu.com"
  1140 + }
  1141 + ],
  1142 + "description": "Qiniu Resource (Cloud) Storage SDK for PHP",
  1143 + "homepage": "http://developer.qiniu.com/",
  1144 + "keywords": [
  1145 + "cloud",
  1146 + "qiniu",
  1147 + "sdk",
  1148 + "storage"
  1149 + ]
  1150 + },
  1151 + {
1099 "name": "symfony/filesystem", 1152 "name": "symfony/filesystem",
1100 - "version": "v4.3.1",  
1101 - "version_normalized": "4.3.1.0", 1153 + "version": "v4.3.3",
  1154 + "version_normalized": "4.3.3.0",
1102 "source": { 1155 "source": {
1103 "type": "git", 1156 "type": "git",
1104 "url": "https://github.com/symfony/filesystem.git", 1157 "url": "https://github.com/symfony/filesystem.git",
1105 - "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf" 1158 + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d"
1106 }, 1159 },
1107 "dist": { 1160 "dist": {
1108 "type": "zip", 1161 "type": "zip",
1109 - "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf2af40d738dec5e433faea7b00daa4431d0a4cf",  
1110 - "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf", 1162 + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b9896d034463ad6fd2bf17e2bf9418caecd6313d",
  1163 + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d",
1111 "shasum": "" 1164 "shasum": ""
1112 }, 1165 },
1113 "require": { 1166 "require": {
1114 "php": "^7.1.3", 1167 "php": "^7.1.3",
1115 "symfony/polyfill-ctype": "~1.8" 1168 "symfony/polyfill-ctype": "~1.8"
1116 }, 1169 },
1117 - "time": "2019-06-03T20:27:40+00:00", 1170 + "time": "2019-06-23T08:51:25+00:00",
1118 "type": "library", 1171 "type": "library",
1119 "extra": { 1172 "extra": {
1120 "branch-alias": { 1173 "branch-alias": {
@@ -1209,8 +1262,8 @@ @@ -1209,8 +1262,8 @@
1209 }, 1262 },
1210 { 1263 {
1211 "name": "symfony/process", 1264 "name": "symfony/process",
1212 - "version": "v4.3.1",  
1213 - "version_normalized": "4.3.1.0", 1265 + "version": "v4.3.3",
  1266 + "version_normalized": "4.3.3.0",
1214 "source": { 1267 "source": {
1215 "type": "git", 1268 "type": "git",
1216 "url": "https://github.com/symfony/process.git", 1269 "url": "https://github.com/symfony/process.git",
@@ -15,7 +15,7 @@ with these contents. @@ -15,7 +15,7 @@ with these contents.
15 --------------------------------------------------------------------------- 15 ---------------------------------------------------------------------------
16 1. Compatibility 16 1. Compatibility
17 17
18 -HTML Purifier is PHP 5 and PHP 7, and is actively tested from PHP 5.0.5 18 +HTML Purifier is PHP 5 and PHP 7, and is actively tested from PHP 5.3
19 and up. It has no core dependencies with other libraries. 19 and up. It has no core dependencies with other libraries.
20 20
21 These optional extensions can enhance the capabilities of HTML Purifier: 21 These optional extensions can enhance the capabilities of HTML Purifier:
@@ -101,31 +101,6 @@ Autoload compatibility @@ -101,31 +101,6 @@ Autoload compatibility
101 autoloader, but there are some cases where you will need to change 101 autoloader, but there are some cases where you will need to change
102 your own code to accomodate HTML Purifier. These are those cases: 102 your own code to accomodate HTML Purifier. These are those cases:
103 103
104 - PHP VERSION IS LESS THAN 5.1.2, AND YOU'VE DEFINED __autoload  
105 - Because spl_autoload_register() doesn't exist in early versions  
106 - of PHP 5, HTML Purifier has no way of adding itself to the autoload  
107 - stack. Modify your __autoload function to test  
108 - HTMLPurifier_Bootstrap::autoload($class)  
109 -  
110 - For example, suppose your autoload function looks like this:  
111 -  
112 - function __autoload($class) {  
113 - require str_replace('_', '/', $class) . '.php';  
114 - return true;  
115 - }  
116 -  
117 - A modified version with HTML Purifier would look like this:  
118 -  
119 - function __autoload($class) {  
120 - if (HTMLPurifier_Bootstrap::autoload($class)) return true;  
121 - require str_replace('_', '/', $class) . '.php';  
122 - return true;  
123 - }  
124 -  
125 - Note that there *is* some custom behavior in our autoloader; the  
126 - original autoloader in our example would work for 99% of the time,  
127 - but would fail when including language files.  
128 -  
129 AN __autoload FUNCTION IS DECLARED AFTER OUR AUTOLOADER IS REGISTERED 104 AN __autoload FUNCTION IS DECLARED AFTER OUR AUTOLOADER IS REGISTERED
130 spl_autoload_register() has the curious behavior of disabling 105 spl_autoload_register() has the curious behavior of disabling
131 the existing __autoload() handler. Users need to explicitly 106 the existing __autoload() handler. Users need to explicitly
@@ -138,11 +113,6 @@ Autoload compatibility @@ -138,11 +113,6 @@ Autoload compatibility
138 113
139 spl_autoload_register('__autoload') 114 spl_autoload_register('__autoload')
140 115
141 - Users should also be on guard if they use a version of PHP previous  
142 - to 5.1.2 without an autoloader--HTML Purifier will define __autoload()  
143 - for you, which can collide with an autoloader that was added by *you*  
144 - later.  
145 -  
146 116
147 For better performance 117 For better performance
148 ---------------------- 118 ----------------------
@@ -204,9 +174,7 @@ For advanced users @@ -204,9 +174,7 @@ For advanced users
204 HTMLPurifier.autoload.php 174 HTMLPurifier.autoload.php
205 Registers our autoload handler HTMLPurifier_Bootstrap::autoload($class). 175 Registers our autoload handler HTMLPurifier_Bootstrap::autoload($class).
206 176
207 - You can do these operations by yourself--in fact, you must modify your own  
208 - autoload handler if you are using a version of PHP earlier than PHP 5.1.2  
209 - (See "Autoload compatibility" above). 177 + You can do these operations by yourself, if you like.
210 178
211 179
212 --------------------------------------------------------------------------- 180 ---------------------------------------------------------------------------
@@ -11,7 +11,7 @@ pied de page, mais je recommande de lire le document. @@ -11,7 +11,7 @@ pied de page, mais je recommande de lire le document.
11 11
12 1. Compatibilité 12 1. Compatibilité
13 13
14 -HTML Purifier fonctionne avec PHP 5. PHP 5.0.5 est la dernière version testée. 14 +HTML Purifier fonctionne avec PHP 5. PHP 5.3 est la dernière version testée.
15 Il ne dépend pas d'autres librairies. 15 Il ne dépend pas d'autres librairies.
16 16
17 Les extensions optionnelles sont iconv (généralement déjà installée) et tidy 17 Les extensions optionnelles sont iconv (généralement déjà installée) et tidy
@@ -9,6 +9,34 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier @@ -9,6 +9,34 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier
9 . Internal change 9 . Internal change
10 ========================== 10 ==========================
11 11
  12 +4.11.0, released 2019-07-14
  13 +# SafeScripting now matches case-sensitively against its whitelist (previously it was
  14 + case-insensitive.) Thanks Dimitri Gritsajuk <gritsajuk.dimitri@gmail.com>
  15 + for reporting.
  16 +! New directive %Core.AllowParseManyTags which allows parsing of many nested tags.
  17 + Thanks M. Suzuki <msuzuki1986@gmail.com> for contributing the patch.
  18 +! purifyArray now supports multidimensional arrays. Thanks
  19 + Sandro Miguel Marques <sandromiguel@sandromiguel.com> for contributing this patch.
  20 +! initial and inherit settings available for width, height, and the min-/max-
  21 + versions thereof. Thanks Michael Kliewe <info@phpgansta.de> for contributing
  22 + this patch.
  23 +! More color names are supported. Thanks Daijobou for contributing.
  24 +- Compatibility fixes for PHP 7.3, including new CI for PHP 7.3
  25 + (thank you Lukas Neumann <lksnmnn@gmail.com>) and removal of
  26 + reserved words in our constants (thanks Darko Hrgovic <darko@darkodev.com>
  27 +- Compatibility fixes for HHVM. Thanks Mateusz Turcza for contributing
  28 + this fix.
  29 +- HTML Purifier now never defines __autoload, fixing #196. Thanks
  30 + Michael Kliewe for reporting.
  31 +- In some situations, Config.php would report an undefined index: class
  32 + error; this has been fixed. Thanks DiLong Fa for contributing
  33 + this fix.
  34 +- We no longer produce <script /> tags; we always explicitly write
  35 + out the open and close tag. Thanks Dimitri Gritsajuk
  36 + <gritsajuk.dimitri@gmail.com> for contributing this fix.
  37 +- Better compatibility when IDNA constants are not present. Thanks
  38 + Mateusz Turcza <xemlock@gmail.com> for contributing this fix.
  39 +
12 4.10.0, released 2018-02-22 40 4.10.0, released 2018-02-22
13 # PHP 5.3 is no longer officially supported by HTML Purifier 41 # PHP 5.3 is no longer officially supported by HTML Purifier
14 (we did not specifically break support, but we are no longer 42 (we did not specifically break support, but we are no longer
@@ -26,4 +26,4 @@ Package available on [Composer](https://packagist.org/packages/ezyang/htmlpurifi @@ -26,4 +26,4 @@ Package available on [Composer](https://packagist.org/packages/ezyang/htmlpurifi
26 26
27 If you're using Composer to manage dependencies, you can use 27 If you're using Composer to manage dependencies, you can use
28 28
29 - $ composer require "ezyang/htmlpurifier":"dev-master" 29 + $ composer require ezyang/htmlpurifier
1 -HTML Purifier 4.9.x is a maintenance release, collecting a year  
2 -of accumulated bug fixes plus a few new features. New features  
3 -include support for min/max-width/height CSS, and rgba/hsl/hsla  
4 -in color specifications. Major bugfixes include improvements  
5 -in the Serializer cache to avoid chmod'ing directories, better  
6 -entity decoding (we won't accidentally encode entities that occur  
7 -in URLs) and rel="noopener" on links with target attributes,  
8 -to prevent them from overwriting the original frame.  
9 -  
10 -4.9.3 works around an infinite loop bug in PHP 7.1 with the opcode  
11 -cache (and has one other, minor bugfix, avoiding using autoloading  
12 -when testing for DOMDocument presence). If these bugs do not  
13 -affect you, you do not need to upgrade. 1 +HTML Purifier 4.11.x is a maintenance release, collecting a year
  2 +and a half of accumulated bug fixes. Most notable fixes are
  3 +compatibility with PHP 7.3, and case-sensitive matching for
  4 +the SafeScripting whitelist. There are a number small feature
  5 +enhancements, including an expanded supported color list,
  6 +initial and inherit support for {min-,max-,}{width,height}
  7 +and multidimensional array support for purifyArray.
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 "type": "library", 4 "type": "library",
5 "keywords": ["html"], 5 "keywords": ["html"],
6 "homepage": "http://htmlpurifier.org/", 6 "homepage": "http://htmlpurifier.org/",
7 - "license": "LGPL", 7 + "license": "LGPL-2.1-or-later",
8 "authors": [ 8 "authors": [
9 { 9 {
10 "name": "Edward Z. Yang", 10 "name": "Edward Z. Yang",
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 "php": ">=5.2" 16 "php": ">=5.2"
17 }, 17 },
18 "require-dev": { 18 "require-dev": {
19 - "simpletest/simpletest": "^1.1" 19 + "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd"
20 }, 20 },
21 "autoload": { 21 "autoload": {
22 "psr-0": { "HTMLPurifier": "library/" }, 22 "psr-0": { "HTMLPurifier": "library/" },
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 * primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS 7 * primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS
8 * FILE, changes will be overwritten the next time the script is run. 8 * FILE, changes will be overwritten the next time the script is run.
9 * 9 *
10 - * @version 4.10.0 10 + * @version 4.11.0
11 * 11 *
12 * @warning 12 * @warning
13 * You must *not* include any other HTML Purifier files before this file, 13 * You must *not* include any other HTML Purifier files before this file,
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 */ 19 */
20 20
21 /* 21 /*
22 - HTML Purifier 4.10.0 - Standards Compliant HTML Filtering 22 + HTML Purifier 4.11.0 - Standards Compliant HTML Filtering
23 Copyright (C) 2006-2008 Edward Z. Yang 23 Copyright (C) 2006-2008 Edward Z. Yang
24 24
25 This library is free software; you can redistribute it and/or 25 This library is free software; you can redistribute it and/or
@@ -58,12 +58,12 @@ class HTMLPurifier @@ -58,12 +58,12 @@ class HTMLPurifier
58 * Version of HTML Purifier. 58 * Version of HTML Purifier.
59 * @type string 59 * @type string
60 */ 60 */
61 - public $version = '4.10.0'; 61 + public $version = '4.11.0';
62 62
63 /** 63 /**
64 * Constant with version of HTML Purifier. 64 * Constant with version of HTML Purifier.
65 */ 65 */
66 - const VERSION = '4.10.0'; 66 + const VERSION = '4.11.0';
67 67
68 /** 68 /**
69 * Global configuration object. 69 * Global configuration object.
@@ -240,12 +240,16 @@ class HTMLPurifier @@ -240,12 +240,16 @@ class HTMLPurifier
240 public function purifyArray($array_of_html, $config = null) 240 public function purifyArray($array_of_html, $config = null)
241 { 241 {
242 $context_array = array(); 242 $context_array = array();
243 - foreach ($array_of_html as $key => $html) {  
244 - $array_of_html[$key] = $this->purify($html, $config); 243 + foreach($array_of_html as $key=>$value){
  244 + if (is_array($value)) {
  245 + $array[$key] = $this->purifyArray($value, $config);
  246 + } else {
  247 + $array[$key] = $this->purify($value, $config);
  248 + }
245 $context_array[$key] = $this->context; 249 $context_array[$key] = $this->context;
246 } 250 }
247 $this->context = $context_array; 251 $this->context = $context_array;
248 - return $array_of_html; 252 + return $array;
249 } 253 }
250 254
251 /** 255 /**
@@ -97,7 +97,11 @@ class HTMLPurifier_AttrDef_URI_Host extends HTMLPurifier_AttrDef @@ -97,7 +97,11 @@ class HTMLPurifier_AttrDef_URI_Host extends HTMLPurifier_AttrDef
97 97
98 // PHP 5.3 and later support this functionality natively 98 // PHP 5.3 and later support this functionality natively
99 if (function_exists('idn_to_ascii')) { 99 if (function_exists('idn_to_ascii')) {
100 - $string = idn_to_ascii($string, IDNA_NONTRANSITIONAL_TO_ASCII, INTL_IDNA_VARIANT_UTS46); 100 + if (defined('IDNA_NONTRANSITIONAL_TO_ASCII') && defined('INTL_IDNA_VARIANT_UTS46')) {
  101 + $string = idn_to_ascii($string, IDNA_NONTRANSITIONAL_TO_ASCII, INTL_IDNA_VARIANT_UTS46);
  102 + } else {
  103 + $string = idn_to_ascii($string);
  104 + }
101 105
102 // If we have Net_IDNA2 support, we can support IRIs by 106 // If we have Net_IDNA2 support, we can support IRIs by
103 // punycoding them. (This is the most portable thing to do, 107 // punycoding them. (This is the most portable thing to do,
@@ -220,15 +220,25 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition @@ -220,15 +220,25 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
220 array( 220 array(
221 new HTMLPurifier_AttrDef_CSS_Length('0'), 221 new HTMLPurifier_AttrDef_CSS_Length('0'),
222 new HTMLPurifier_AttrDef_CSS_Percentage(true), 222 new HTMLPurifier_AttrDef_CSS_Percentage(true),
223 - new HTMLPurifier_AttrDef_Enum(array('auto')) 223 + new HTMLPurifier_AttrDef_Enum(array('auto', 'initial', 'inherit'))
  224 + )
  225 + );
  226 + $trusted_min_wh = new HTMLPurifier_AttrDef_CSS_Composite(
  227 + array(
  228 + new HTMLPurifier_AttrDef_CSS_Length('0'),
  229 + new HTMLPurifier_AttrDef_CSS_Percentage(true),
  230 + new HTMLPurifier_AttrDef_Enum(array('initial', 'inherit'))
  231 + )
  232 + );
  233 + $trusted_max_wh = new HTMLPurifier_AttrDef_CSS_Composite(
  234 + array(
  235 + new HTMLPurifier_AttrDef_CSS_Length('0'),
  236 + new HTMLPurifier_AttrDef_CSS_Percentage(true),
  237 + new HTMLPurifier_AttrDef_Enum(array('none', 'initial', 'inherit'))
224 ) 238 )
225 ); 239 );
226 $max = $config->get('CSS.MaxImgLength'); 240 $max = $config->get('CSS.MaxImgLength');
227 241
228 - $this->info['min-width'] =  
229 - $this->info['max-width'] =  
230 - $this->info['min-height'] =  
231 - $this->info['max-height'] =  
232 $this->info['width'] = 242 $this->info['width'] =
233 $this->info['height'] = 243 $this->info['height'] =
234 $max === null ? 244 $max === null ?
@@ -245,6 +255,38 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition @@ -245,6 +255,38 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
245 // For everyone else: 255 // For everyone else:
246 $trusted_wh 256 $trusted_wh
247 ); 257 );
  258 + $this->info['min-width'] =
  259 + $this->info['min-height'] =
  260 + $max === null ?
  261 + $trusted_min_wh :
  262 + new HTMLPurifier_AttrDef_Switch(
  263 + 'img',
  264 + // For img tags:
  265 + new HTMLPurifier_AttrDef_CSS_Composite(
  266 + array(
  267 + new HTMLPurifier_AttrDef_CSS_Length('0', $max),
  268 + new HTMLPurifier_AttrDef_Enum(array('initial', 'inherit'))
  269 + )
  270 + ),
  271 + // For everyone else:
  272 + $trusted_min_wh
  273 + );
  274 + $this->info['max-width'] =
  275 + $this->info['max-height'] =
  276 + $max === null ?
  277 + $trusted_max_wh :
  278 + new HTMLPurifier_AttrDef_Switch(
  279 + 'img',
  280 + // For img tags:
  281 + new HTMLPurifier_AttrDef_CSS_Composite(
  282 + array(
  283 + new HTMLPurifier_AttrDef_CSS_Length('0', $max),
  284 + new HTMLPurifier_AttrDef_Enum(array('none', 'initial', 'inherit'))
  285 + )
  286 + ),
  287 + // For everyone else:
  288 + $trusted_max_wh
  289 + );
248 290
249 $this->info['text-decoration'] = new HTMLPurifier_AttrDef_CSS_TextDecoration(); 291 $this->info['text-decoration'] = new HTMLPurifier_AttrDef_CSS_TextDecoration();
250 292
@@ -21,7 +21,7 @@ class HTMLPurifier_Config @@ -21,7 +21,7 @@ class HTMLPurifier_Config
21 * HTML Purifier's version 21 * HTML Purifier's version
22 * @type string 22 * @type string
23 */ 23 */
24 - public $version = '4.10.0'; 24 + public $version = '4.11.0';
25 25
26 /** 26 /**
27 * Whether or not to automatically finalize 27 * Whether or not to automatically finalize
@@ -890,7 +890,7 @@ class HTMLPurifier_Config @@ -890,7 +890,7 @@ class HTMLPurifier_Config
890 // zip(tail(trace), trace) -- but PHP is not Haskell har har 890 // zip(tail(trace), trace) -- but PHP is not Haskell har har
891 for ($i = 0, $c = count($trace); $i < $c - 1; $i++) { 891 for ($i = 0, $c = count($trace); $i < $c - 1; $i++) {
892 // XXX this is not correct on some versions of HTML Purifier 892 // XXX this is not correct on some versions of HTML Purifier
893 - if ($trace[$i + 1]['class'] === 'HTMLPurifier_Config') { 893 + if (isset($trace[$i + 1]['class']) && $trace[$i + 1]['class'] === 'HTMLPurifier_Config') {
894 continue; 894 continue;
895 } 895 }
896 $frame = $trace[$i]; 896 $frame = $trace[$i];
@@ -100,7 +100,7 @@ class HTMLPurifier_ConfigSchema @@ -100,7 +100,7 @@ class HTMLPurifier_ConfigSchema
100 * @param string $key Name of directive 100 * @param string $key Name of directive
101 * @param mixed $default Default value of directive 101 * @param mixed $default Default value of directive
102 * @param string $type Allowed type of the directive. See 102 * @param string $type Allowed type of the directive. See
103 - * HTMLPurifier_DirectiveDef::$type for allowed values 103 + * HTMLPurifier_VarParser::$types for allowed values
104 * @param bool $allow_null Whether or not to allow null values 104 * @param bool $allow_null Whether or not to allow null values
105 */ 105 */
106 public function add($key, $default, $type, $allow_null) 106 public function add($key, $default, $type, $allow_null)
1 BO:25:"HTMLPurifier_ConfigSchema":3:{s:8:"defaults";a:126:{s:19:"Attr.AllowedClasses";N;s:24:"Attr.AllowedFrameTargets";a:0:{}s:15:"Attr.AllowedRel";a:0:{}s:15:"Attr.AllowedRev";a:0:{}s:18:"Attr.ClassUseCDATA";N;s:20:"Attr.DefaultImageAlt";N;s:24:"Attr.DefaultInvalidImage";s:0:"";s:27:"Attr.DefaultInvalidImageAlt";s:13:"Invalid image";s:19:"Attr.DefaultTextDir";s:3:"ltr";s:13:"Attr.EnableID";b:0;s:21:"Attr.ForbiddenClasses";a:0:{}s:13:"Attr.ID.HTML5";N;s:16:"Attr.IDBlacklist";a:0:{}s:22:"Attr.IDBlacklistRegexp";N;s:13:"Attr.IDPrefix";s:0:"";s:18:"Attr.IDPrefixLocal";s:0:"";s:24:"AutoFormat.AutoParagraph";b:0;s:17:"AutoFormat.Custom";a:0:{}s:25:"AutoFormat.DisplayLinkURI";b:0;s:18:"AutoFormat.Linkify";b:0;s:33:"AutoFormat.PurifierLinkify.DocURL";s:3:"#%s";s:26:"AutoFormat.PurifierLinkify";b:0;s:32:"AutoFormat.RemoveEmpty.Predicate";a:4:{s:8:"colgroup";a:0:{}s:2:"th";a:0:{}s:2:"td";a:0:{}s:6:"iframe";a:1:{i:0;s:3:"src";}}s:44:"AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions";a:2:{s:2:"td";b:1;s:2:"th";b:1;}s:33:"AutoFormat.RemoveEmpty.RemoveNbsp";b:0;s:22:"AutoFormat.RemoveEmpty";b:0;s:39:"AutoFormat.RemoveSpansWithoutAttributes";b:0;s:19:"CSS.AllowDuplicates";b:0;s:18:"CSS.AllowImportant";b:0;s:15:"CSS.AllowTricky";b:0;s:16:"CSS.AllowedFonts";N;s:21:"CSS.AllowedProperties";N;s:17:"CSS.DefinitionRev";i:1;s:23:"CSS.ForbiddenProperties";a:0:{}s:16:"CSS.MaxImgLength";s:6:"1200px";s:15:"CSS.Proprietary";b:0;s:11:"CSS.Trusted";b:0;s:20:"Cache.DefinitionImpl";s:10:"Serializer";s:20:"Cache.SerializerPath";N;s:27:"Cache.SerializerPermissions";i:493;s:22:"Core.AggressivelyFixLt";b:1;s:29:"Core.AggressivelyRemoveScript";b:1;s:28:"Core.AllowHostnameUnderscore";b:0;s:23:"Core.AllowParseManyTags";b:0;s:18:"Core.CollectErrors";b:0;s:18:"Core.ColorKeywords";a:148:{s:9:"aliceblue";s:7:"#F0F8FF";s:12:"antiquewhite";s:7:"#FAEBD7";s:4:"aqua";s:7:"#00FFFF";s:10:"aquamarine";s:7:"#7FFFD4";s:5:"azure";s:7:"#F0FFFF";s:5:"beige";s:7:"#F5F5DC";s:6:"bisque";s:7:"#FFE4C4";s:5:"black";s:7:"#000000";s:14:"blanchedalmond";s:7:"#FFEBCD";s:4:"blue";s:7:"#0000FF";s:10:"blueviolet";s:7:"#8A2BE2";s:5:"brown";s:7:"#A52A2A";s:9:"burlywood";s:7:"#DEB887";s:9:"cadetblue";s:7:"#5F9EA0";s:10:"chartreuse";s:7:"#7FFF00";s:9:"chocolate";s:7:"#D2691E";s:5:"coral";s:7:"#FF7F50";s:14:"cornflowerblue";s:7:"#6495ED";s:8:"cornsilk";s:7:"#FFF8DC";s:7:"crimson";s:7:"#DC143C";s:4:"cyan";s:7:"#00FFFF";s:8:"darkblue";s:7:"#00008B";s:8:"darkcyan";s:7:"#008B8B";s:13:"darkgoldenrod";s:7:"#B8860B";s:8:"darkgray";s:7:"#A9A9A9";s:8:"darkgrey";s:7:"#A9A9A9";s:9:"darkgreen";s:7:"#006400";s:9:"darkkhaki";s:7:"#BDB76B";s:11:"darkmagenta";s:7:"#8B008B";s:14:"darkolivegreen";s:7:"#556B2F";s:10:"darkorange";s:7:"#FF8C00";s:10:"darkorchid";s:7:"#9932CC";s:7:"darkred";s:7:"#8B0000";s:10:"darksalmon";s:7:"#E9967A";s:12:"darkseagreen";s:7:"#8FBC8F";s:13:"darkslateblue";s:7:"#483D8B";s:13:"darkslategray";s:7:"#2F4F4F";s:13:"darkslategrey";s:7:"#2F4F4F";s:13:"darkturquoise";s:7:"#00CED1";s:10:"darkviolet";s:7:"#9400D3";s:8:"deeppink";s:7:"#FF1493";s:11:"deepskyblue";s:7:"#00BFFF";s:7:"dimgray";s:7:"#696969";s:7:"dimgrey";s:7:"#696969";s:10:"dodgerblue";s:7:"#1E90FF";s:9:"firebrick";s:7:"#B22222";s:11:"floralwhite";s:7:"#FFFAF0";s:11:"forestgreen";s:7:"#228B22";s:7:"fuchsia";s:7:"#FF00FF";s:9:"gainsboro";s:7:"#DCDCDC";s:10:"ghostwhite";s:7:"#F8F8FF";s:4:"gold";s:7:"#FFD700";s:9:"goldenrod";s:7:"#DAA520";s:4:"gray";s:7:"#808080";s:4:"grey";s:7:"#808080";s:5:"green";s:7:"#008000";s:11:"greenyellow";s:7:"#ADFF2F";s:8:"honeydew";s:7:"#F0FFF0";s:7:"hotpink";s:7:"#FF69B4";s:9:"indianred";s:7:"#CD5C5C";s:6:"indigo";s:7:"#4B0082";s:5:"ivory";s:7:"#FFFFF0";s:5:"khaki";s:7:"#F0E68C";s:8:"lavender";s:7:"#E6E6FA";s:13:"lavenderblush";s:7:"#FFF0F5";s:9:"lawngreen";s:7:"#7CFC00";s:12:"lemonchiffon";s:7:"#FFFACD";s:9:"lightblue";s:7:"#ADD8E6";s:10:"lightcoral";s:7:"#F08080";s:9:"lightcyan";s:7:"#E0FFFF";s:20:"lightgoldenrodyellow";s:7:"#FAFAD2";s:9:"lightgray";s:7:"#D3D3D3";s:9:"lightgrey";s:7:"#D3D3D3";s:10:"lightgreen";s:7:"#90EE90";s:9:"lightpink";s:7:"#FFB6C1";s:11:"lightsalmon";s:7:"#FFA07A";s:13:"lightseagreen";s:7:"#20B2AA";s:12:"lightskyblue";s:7:"#87CEFA";s:14:"lightslategray";s:7:"#778899";s:14:"lightslategrey";s:7:"#778899";s:14:"lightsteelblue";s:7:"#B0C4DE";s:11:"lightyellow";s:7:"#FFFFE0";s:4:"lime";s:7:"#00FF00";s:9:"limegreen";s:7:"#32CD32";s:5:"linen";s:7:"#FAF0E6";s:7:"magenta";s:7:"#FF00FF";s:6:"maroon";s:7:"#800000";s:16:"mediumaquamarine";s:7:"#66CDAA";s:10:"mediumblue";s:7:"#0000CD";s:12:"mediumorchid";s:7:"#BA55D3";s:12:"mediumpurple";s:7:"#9370DB";s:14:"mediumseagreen";s:7:"#3CB371";s:15:"mediumslateblue";s:7:"#7B68EE";s:17:"mediumspringgreen";s:7:"#00FA9A";s:15:"mediumturquoise";s:7:"#48D1CC";s:15:"mediumvioletred";s:7:"#C71585";s:12:"midnightblue";s:7:"#191970";s:9:"mintcream";s:7:"#F5FFFA";s:9:"mistyrose";s:7:"#FFE4E1";s:8:"moccasin";s:7:"#FFE4B5";s:11:"navajowhite";s:7:"#FFDEAD";s:4:"navy";s:7:"#000080";s:7:"oldlace";s:7:"#FDF5E6";s:5:"olive";s:7:"#808000";s:9:"olivedrab";s:7:"#6B8E23";s:6:"orange";s:7:"#FFA500";s:9:"orangered";s:7:"#FF4500";s:6:"orchid";s:7:"#DA70D6";s:13:"palegoldenrod";s:7:"#EEE8AA";s:9:"palegreen";s:7:"#98FB98";s:13:"paleturquoise";s:7:"#AFEEEE";s:13:"palevioletred";s:7:"#DB7093";s:10:"papayawhip";s:7:"#FFEFD5";s:9:"peachpuff";s:7:"#FFDAB9";s:4:"peru";s:7:"#CD853F";s:4:"pink";s:7:"#FFC0CB";s:4:"plum";s:7:"#DDA0DD";s:10:"powderblue";s:7:"#B0E0E6";s:6:"purple";s:7:"#800080";s:13:"rebeccapurple";s:7:"#663399";s:3:"red";s:7:"#FF0000";s:9:"rosybrown";s:7:"#BC8F8F";s:9:"royalblue";s:7:"#4169E1";s:11:"saddlebrown";s:7:"#8B4513";s:6:"salmon";s:7:"#FA8072";s:10:"sandybrown";s:7:"#F4A460";s:8:"seagreen";s:7:"#2E8B57";s:8:"seashell";s:7:"#FFF5EE";s:6:"sienna";s:7:"#A0522D";s:6:"silver";s:7:"#C0C0C0";s:7:"skyblue";s:7:"#87CEEB";s:9:"slateblue";s:7:"#6A5ACD";s:9:"slategray";s:7:"#708090";s:9:"slategrey";s:7:"#708090";s:4:"snow";s:7:"#FFFAFA";s:11:"springgreen";s:7:"#00FF7F";s:9:"steelblue";s:7:"#4682B4";s:3:"tan";s:7:"#D2B48C";s:4:"teal";s:7:"#008080";s:7:"thistle";s:7:"#D8BFD8";s:6:"tomato";s:7:"#FF6347";s:9:"turquoise";s:7:"#40E0D0";s:6:"violet";s:7:"#EE82EE";s:5:"wheat";s:7:"#F5DEB3";s:5:"white";s:7:"#FFFFFF";s:10:"whitesmoke";s:7:"#F5F5F5";s:6:"yellow";s:7:"#FFFF00";s:11:"yellowgreen";s:7:"#9ACD32";}s:30:"Core.ConvertDocumentToFragment";b:1;s:36:"Core.DirectLexLineNumberSyncInterval";i:0;s:20:"Core.DisableExcludes";b:0;s:15:"Core.EnableIDNA";b:0;s:13:"Core.Encoding";s:5:"utf-8";s:26:"Core.EscapeInvalidChildren";b:0;s:22:"Core.EscapeInvalidTags";b:0;s:29:"Core.EscapeNonASCIICharacters";b:0;s:19:"Core.HiddenElements";a:2:{s:6:"script";b:1;s:5:"style";b:1;}s:13:"Core.Language";s:2:"en";s:24:"Core.LegacyEntityDecoder";b:0;s:14:"Core.LexerImpl";N;s:24:"Core.MaintainLineNumbers";N;s:22:"Core.NormalizeNewlines";b:1;s:21:"Core.RemoveInvalidImg";b:1;s:33:"Core.RemoveProcessingInstructions";b:0;s:25:"Core.RemoveScriptContents";N;s:13:"Filter.Custom";a:0:{}s:34:"Filter.ExtractStyleBlocks.Escaping";b:1;s:31:"Filter.ExtractStyleBlocks.Scope";N;s:34:"Filter.ExtractStyleBlocks.TidyImpl";N;s:25:"Filter.ExtractStyleBlocks";b:0;s:14:"Filter.YouTube";b:0;s:12:"HTML.Allowed";N;s:22:"HTML.AllowedAttributes";N;s:20:"HTML.AllowedComments";a:0:{}s:26:"HTML.AllowedCommentsRegexp";N;s:20:"HTML.AllowedElements";N;s:19:"HTML.AllowedModules";N;s:23:"HTML.Attr.Name.UseCDATA";b:0;s:17:"HTML.BlockWrapper";s:1:"p";s:16:"HTML.CoreModules";a:7:{s:9:"Structure";b:1;s:4:"Text";b:1;s:9:"Hypertext";b:1;s:4:"List";b:1;s:22:"NonXMLCommonAttributes";b:1;s:19:"XMLCommonAttributes";b:1;s:16:"CommonAttributes";b:1;}s:18:"HTML.CustomDoctype";N;s:17:"HTML.DefinitionID";N;s:18:"HTML.DefinitionRev";i:1;s:12:"HTML.Doctype";N;s:25:"HTML.FlashAllowFullScreen";b:0;s:24:"HTML.ForbiddenAttributes";a:0:{}s:22:"HTML.ForbiddenElements";a:0:{}s:17:"HTML.MaxImgLength";i:1200;s:13:"HTML.Nofollow";b:0;s:11:"HTML.Parent";s:3:"div";s:16:"HTML.Proprietary";b:0;s:14:"HTML.SafeEmbed";b:0;s:15:"HTML.SafeIframe";b:0;s:15:"HTML.SafeObject";b:0;s:18:"HTML.SafeScripting";a:0:{}s:11:"HTML.Strict";b:0;s:16:"HTML.TargetBlank";b:0;s:19:"HTML.TargetNoopener";b:1;s:21:"HTML.TargetNoreferrer";b:1;s:12:"HTML.TidyAdd";a:0:{}s:14:"HTML.TidyLevel";s:6:"medium";s:15:"HTML.TidyRemove";a:0:{}s:12:"HTML.Trusted";b:0;s:10:"HTML.XHTML";b:1;s:28:"Output.CommentScriptContents";b:1;s:19:"Output.FixInnerHTML";b:1;s:18:"Output.FlashCompat";b:0;s:14:"Output.Newline";N;s:15:"Output.SortAttr";b:0;s:17:"Output.TidyFormat";b:0;s:17:"Test.ForceNoIconv";b:0;s:18:"URI.AllowedSchemes";a:7:{s:4:"http";b:1;s:5:"https";b:1;s:6:"mailto";b:1;s:3:"ftp";b:1;s:4:"nntp";b:1;s:4:"news";b:1;s:3:"tel";b:1;}s:8:"URI.Base";N;s:17:"URI.DefaultScheme";s:4:"http";s:16:"URI.DefinitionID";N;s:17:"URI.DefinitionRev";i:1;s:11:"URI.Disable";b:0;s:19:"URI.DisableExternal";b:0;s:28:"URI.DisableExternalResources";b:0;s:20:"URI.DisableResources";b:0;s:8:"URI.Host";N;s:17:"URI.HostBlacklist";a:0:{}s:16:"URI.MakeAbsolute";b:0;s:9:"URI.Munge";N;s:18:"URI.MungeResources";b:0;s:18:"URI.MungeSecretKey";N;s:26:"URI.OverrideAllowedSchemes";b:1;s:20:"URI.SafeIframeRegexp";N;}s:12:"defaultPlist";O:25:"HTMLPurifier_PropertyList":3:{s:7:"*data";a:126:{s:19:"Attr.AllowedClasses";N;s:24:"Attr.AllowedFrameTargets";a:0:{}s:15:"Attr.AllowedRel";a:0:{}s:15:"Attr.AllowedRev";a:0:{}s:18:"Attr.ClassUseCDATA";N;s:20:"Attr.DefaultImageAlt";N;s:24:"Attr.DefaultInvalidImage";s:0:"";s:27:"Attr.DefaultInvalidImageAlt";s:13:"Invalid image";s:19:"Attr.DefaultTextDir";s:3:"ltr";s:13:"Attr.EnableID";b:0;s:21:"Attr.ForbiddenClasses";a:0:{}s:13:"Attr.ID.HTML5";N;s:16:"Attr.IDBlacklist";a:0:{}s:22:"Attr.IDBlacklistRegexp";N;s:13:"Attr.IDPrefix";s:0:"";s:18:"Attr.IDPrefixLocal";s:0:"";s:24:"AutoFormat.AutoParagraph";b:0;s:17:"AutoFormat.Custom";a:0:{}s:25:"AutoFormat.DisplayLinkURI";b:0;s:18:"AutoFormat.Linkify";b:0;s:33:"AutoFormat.PurifierLinkify.DocURL";s:3:"#%s";s:26:"AutoFormat.PurifierLinkify";b:0;s:32:"AutoFormat.RemoveEmpty.Predicate";a:4:{s:8:"colgroup";a:0:{}s:2:"th";a:0:{}s:2:"td";a:0:{}s:6:"iframe";a:1:{i:0;s:3:"src";}}s:44:"AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions";a:2:{s:2:"td";b:1;s:2:"th";b:1;}s:33:"AutoFormat.RemoveEmpty.RemoveNbsp";b:0;s:22:"AutoFormat.RemoveEmpty";b:0;s:39:"AutoFormat.RemoveSpansWithoutAttributes";b:0;s:19:"CSS.AllowDuplicates";b:0;s:18:"CSS.AllowImportant";b:0;s:15:"CSS.AllowTricky";b:0;s:16:"CSS.AllowedFonts";N;s:21:"CSS.AllowedProperties";N;s:17:"CSS.DefinitionRev";i:1;s:23:"CSS.ForbiddenProperties";a:0:{}s:16:"CSS.MaxImgLength";s:6:"1200px";s:15:"CSS.Proprietary";b:0;s:11:"CSS.Trusted";b:0;s:20:"Cache.DefinitionImpl";s:10:"Serializer";s:20:"Cache.SerializerPath";N;s:27:"Cache.SerializerPermissions";i:493;s:22:"Core.AggressivelyFixLt";b:1;s:29:"Core.AggressivelyRemoveScript";b:1;s:28:"Core.AllowHostnameUnderscore";b:0;s:23:"Core.AllowParseManyTags";b:0;s:18:"Core.CollectErrors";b:0;s:18:"Core.ColorKeywords";a:148:{s:9:"aliceblue";s:7:"#F0F8FF";s:12:"antiquewhite";s:7:"#FAEBD7";s:4:"aqua";s:7:"#00FFFF";s:10:"aquamarine";s:7:"#7FFFD4";s:5:"azure";s:7:"#F0FFFF";s:5:"beige";s:7:"#F5F5DC";s:6:"bisque";s:7:"#FFE4C4";s:5:"black";s:7:"#000000";s:14:"blanchedalmond";s:7:"#FFEBCD";s:4:"blue";s:7:"#0000FF";s:10:"blueviolet";s:7:"#8A2BE2";s:5:"brown";s:7:"#A52A2A";s:9:"burlywood";s:7:"#DEB887";s:9:"cadetblue";s:7:"#5F9EA0";s:10:"chartreuse";s:7:"#7FFF00";s:9:"chocolate";s:7:"#D2691E";s:5:"coral";s:7:"#FF7F50";s:14:"cornflowerblue";s:7:"#6495ED";s:8:"cornsilk";s:7:"#FFF8DC";s:7:"crimson";s:7:"#DC143C";s:4:"cyan";s:7:"#00FFFF";s:8:"darkblue";s:7:"#00008B";s:8:"darkcyan";s:7:"#008B8B";s:13:"darkgoldenrod";s:7:"#B8860B";s:8:"darkgray";s:7:"#A9A9A9";s:8:"darkgrey";s:7:"#A9A9A9";s:9:"darkgreen";s:7:"#006400";s:9:"darkkhaki";s:7:"#BDB76B";s:11:"darkmagenta";s:7:"#8B008B";s:14:"darkolivegreen";s:7:"#556B2F";s:10:"darkorange";s:7:"#FF8C00";s:10:"darkorchid";s:7:"#9932CC";s:7:"darkred";s:7:"#8B0000";s:10:"darksalmon";s:7:"#E9967A";s:12:"darkseagreen";s:7:"#8FBC8F";s:13:"darkslateblue";s:7:"#483D8B";s:13:"darkslategray";s:7:"#2F4F4F";s:13:"darkslategrey";s:7:"#2F4F4F";s:13:"darkturquoise";s:7:"#00CED1";s:10:"darkviolet";s:7:"#9400D3";s:8:"deeppink";s:7:"#FF1493";s:11:"deepskyblue";s:7:"#00BFFF";s:7:"dimgray";s:7:"#696969";s:7:"dimgrey";s:7:"#696969";s:10:"dodgerblue";s:7:"#1E90FF";s:9:"firebrick";s:7:"#B22222";s:11:"floralwhite";s:7:"#FFFAF0";s:11:"forestgreen";s:7:"#228B22";s:7:"fuchsia";s:7:"#FF00FF";s:9:"gainsboro";s:7:"#DCDCDC";s:10:"ghostwhite";s:7:"#F8F8FF";s:4:"gold";s:7:"#FFD700";s:9:"goldenrod";s:7:"#DAA520";s:4:"gray";s:7:"#808080";s:4:"grey";s:7:"#808080";s:5:"green";s:7:"#008000";s:11:"greenyellow";s:7:"#ADFF2F";s:8:"honeydew";s:7:"#F0FFF0";s:7:"hotpink";s:7:"#FF69B4";s:9:"indianred";s:7:"#CD5C5C";s:6:"indigo";s:7:"#4B0082";s:5:"ivory";s:7:"#FFFFF0";s:5:"khaki";s:7:"#F0E68C";s:8:"lavender";s:7:"#E6E6FA";s:13:"lavenderblush";s:7:"#FFF0F5";s:9:"lawngreen";s:7:"#7CFC00";s:12:"lemonchiffon";s:7:"#FFFACD";s:9:"lightblue";s:7:"#ADD8E6";s:10:"lightcoral";s:7:"#F08080";s:9:"lightcyan";s:7:"#E0FFFF";s:20:"lightgoldenrodyellow";s:7:"#FAFAD2";s:9:"lightgray";s:7:"#D3D3D3";s:9:"lightgrey";s:7:"#D3D3D3";s:10:"lightgreen";s:7:"#90EE90";s:9:"lightpink";s:7:"#FFB6C1";s:11:"lightsalmon";s:7:"#FFA07A";s:13:"lightseagreen";s:7:"#20B2AA";s:12:"lightskyblue";s:7:"#87CEFA";s:14:"lightslategray";s:7:"#778899";s:14:"lightslategrey";s:7:"#778899";s:14:"lightsteelblue";s:7:"#B0C4DE";s:11:"lightyellow";s:7:"#FFFFE0";s:4:"lime";s:7:"#00FF00";s:9:"limegreen";s:7:"#32CD32";s:5:"linen";s:7:"#FAF0E6";s:7:"magenta";s:7:"#FF00FF";s:6:"maroon";s:7:"#800000";s:16:"mediumaquamarine";s:7:"#66CDAA";s:10:"mediumblue";s:7:"#0000CD";s:12:"mediumorchid";s:7:"#BA55D3";s:12:"mediumpurple";s:7:"#9370DB";s:14:"mediumseagreen";s:7:"#3CB371";s:15:"mediumslateblue";s:7:"#7B68EE";s:17:"mediumspringgreen";s:7:"#00FA9A";s:15:"mediumturquoise";s:7:"#48D1CC";s:15:"mediumvioletred";s:7:"#C71585";s:12:"midnightblue";s:7:"#191970";s:9:"mintcream";s:7:"#F5FFFA";s:9:"mistyrose";s:7:"#FFE4E1";s:8:"moccasin";s:7:"#FFE4B5";s:11:"navajowhite";s:7:"#FFDEAD";s:4:"navy";s:7:"#000080";s:7:"oldlace";s:7:"#FDF5E6";s:5:"olive";s:7:"#808000";s:9:"olivedrab";s:7:"#6B8E23";s:6:"orange";s:7:"#FFA500";s:9:"orangered";s:7:"#FF4500";s:6:"orchid";s:7:"#DA70D6";s:13:"palegoldenrod";s:7:"#EEE8AA";s:9:"palegreen";s:7:"#98FB98";s:13:"paleturquoise";s:7:"#AFEEEE";s:13:"palevioletred";s:7:"#DB7093";s:10:"papayawhip";s:7:"#FFEFD5";s:9:"peachpuff";s:7:"#FFDAB9";s:4:"peru";s:7:"#CD853F";s:4:"pink";s:7:"#FFC0CB";s:4:"plum";s:7:"#DDA0DD";s:10:"powderblue";s:7:"#B0E0E6";s:6:"purple";s:7:"#800080";s:13:"rebeccapurple";s:7:"#663399";s:3:"red";s:7:"#FF0000";s:9:"rosybrown";s:7:"#BC8F8F";s:9:"royalblue";s:7:"#4169E1";s:11:"saddlebrown";s:7:"#8B4513";s:6:"salmon";s:7:"#FA8072";s:10:"sandybrown";s:7:"#F4A460";s:8:"seagreen";s:7:"#2E8B57";s:8:"seashell";s:7:"#FFF5EE";s:6:"sienna";s:7:"#A0522D";s:6:"silver";s:7:"#C0C0C0";s:7:"skyblue";s:7:"#87CEEB";s:9:"slateblue";s:7:"#6A5ACD";s:9:"slategray";s:7:"#708090";s:9:"slategrey";s:7:"#708090";s:4:"snow";s:7:"#FFFAFA";s:11:"springgreen";s:7:"#00FF7F";s:9:"steelblue";s:7:"#4682B4";s:3:"tan";s:7:"#D2B48C";s:4:"teal";s:7:"#008080";s:7:"thistle";s:7:"#D8BFD8";s:6:"tomato";s:7:"#FF6347";s:9:"turquoise";s:7:"#40E0D0";s:6:"violet";s:7:"#EE82EE";s:5:"wheat";s:7:"#F5DEB3";s:5:"white";s:7:"#FFFFFF";s:10:"whitesmoke";s:7:"#F5F5F5";s:6:"yellow";s:7:"#FFFF00";s:11:"yellowgreen";s:7:"#9ACD32";}s:30:"Core.ConvertDocumentToFragment";b:1;s:36:"Core.DirectLexLineNumberSyncInterval";i:0;s:20:"Core.DisableExcludes";b:0;s:15:"Core.EnableIDNA";b:0;s:13:"Core.Encoding";s:5:"utf-8";s:26:"Core.EscapeInvalidChildren";b:0;s:22:"Core.EscapeInvalidTags";b:0;s:29:"Core.EscapeNonASCIICharacters";b:0;s:19:"Core.HiddenElements";a:2:{s:6:"script";b:1;s:5:"style";b:1;}s:13:"Core.Language";s:2:"en";s:24:"Core.LegacyEntityDecoder";b:0;s:14:"Core.LexerImpl";N;s:24:"Core.MaintainLineNumbers";N;s:22:"Core.NormalizeNewlines";b:1;s:21:"Core.RemoveInvalidImg";b:1;s:33:"Core.RemoveProcessingInstructions";b:0;s:25:"Core.RemoveScriptContents";N;s:13:"Filter.Custom";a:0:{}s:34:"Filter.ExtractStyleBlocks.Escaping";b:1;s:31:"Filter.ExtractStyleBlocks.Scope";N;s:34:"Filter.ExtractStyleBlocks.TidyImpl";N;s:25:"Filter.ExtractStyleBlocks";b:0;s:14:"Filter.YouTube";b:0;s:12:"HTML.Allowed";N;s:22:"HTML.AllowedAttributes";N;s:20:"HTML.AllowedComments";a:0:{}s:26:"HTML.AllowedCommentsRegexp";N;s:20:"HTML.AllowedElements";N;s:19:"HTML.AllowedModules";N;s:23:"HTML.Attr.Name.UseCDATA";b:0;s:17:"HTML.BlockWrapper";s:1:"p";s:16:"HTML.CoreModules";a:7:{s:9:"Structure";b:1;s:4:"Text";b:1;s:9:"Hypertext";b:1;s:4:"List";b:1;s:22:"NonXMLCommonAttributes";b:1;s:19:"XMLCommonAttributes";b:1;s:16:"CommonAttributes";b:1;}s:18:"HTML.CustomDoctype";N;s:17:"HTML.DefinitionID";N;s:18:"HTML.DefinitionRev";i:1;s:12:"HTML.Doctype";N;s:25:"HTML.FlashAllowFullScreen";b:0;s:24:"HTML.ForbiddenAttributes";a:0:{}s:22:"HTML.ForbiddenElements";a:0:{}s:17:"HTML.MaxImgLength";i:1200;s:13:"HTML.Nofollow";b:0;s:11:"HTML.Parent";s:3:"div";s:16:"HTML.Proprietary";b:0;s:14:"HTML.SafeEmbed";b:0;s:15:"HTML.SafeIframe";b:0;s:15:"HTML.SafeObject";b:0;s:18:"HTML.SafeScripting";a:0:{}s:11:"HTML.Strict";b:0;s:16:"HTML.TargetBlank";b:0;s:19:"HTML.TargetNoopener";b:1;s:21:"HTML.TargetNoreferrer";b:1;s:12:"HTML.TidyAdd";a:0:{}s:14:"HTML.TidyLevel";s:6:"medium";s:15:"HTML.TidyRemove";a:0:{}s:12:"HTML.Trusted";b:0;s:10:"HTML.XHTML";b:1;s:28:"Output.CommentScriptContents";b:1;s:19:"Output.FixInnerHTML";b:1;s:18:"Output.FlashCompat";b:0;s:14:"Output.Newline";N;s:15:"Output.SortAttr";b:0;s:17:"Output.TidyFormat";b:0;s:17:"Test.ForceNoIconv";b:0;s:18:"URI.AllowedSchemes";a:7:{s:4:"http";b:1;s:5:"https";b:1;s:6:"mailto";b:1;s:3:"ftp";b:1;s:4:"nntp";b:1;s:4:"news";b:1;s:3:"tel";b:1;}s:8:"URI.Base";N;s:17:"URI.DefaultScheme";s:4:"http";s:16:"URI.DefinitionID";N;s:17:"URI.DefinitionRev";i:1;s:11:"URI.Disable";b:0;s:19:"URI.DisableExternal";b:0;s:28:"URI.DisableExternalResources";b:0;s:20:"URI.DisableResources";b:0;s:8:"URI.Host";N;s:17:"URI.HostBlacklist";a:0:{}s:16:"URI.MakeAbsolute";b:0;s:9:"URI.Munge";N;s:18:"URI.MungeResources";b:0;s:18:"URI.MungeSecretKey";N;s:26:"URI.OverrideAllowedSchemes";b:1;s:20:"URI.SafeIframeRegexp";N;}s:9:"*parent";N;s:8:"*cache";N;}s:4:"info";a:139:{s:19:"Attr.AllowedClasses";i:-8;s:24:"Attr.AllowedFrameTargets";i:8;s:15:"Attr.AllowedRel";i:8;s:15:"Attr.AllowedRev";i:8;s:18:"Attr.ClassUseCDATA";i:-7;s:20:"Attr.DefaultImageAlt";i:-1;s:24:"Attr.DefaultInvalidImage";i:1;s:27:"Attr.DefaultInvalidImageAlt";i:1;s:19:"Attr.DefaultTextDir";O:8:"stdClass":2:{s:4:"type";i:1;s:7:"allowed";a:2:{s:3:"ltr";b:1;s:3:"rtl";b:1;}}s:13:"Attr.EnableID";i:7;s:17:"HTML.EnableAttrID";O:8:"stdClass":2:{s:3:"key";s:13:"Attr.EnableID";s:7:"isAlias";b:1;}s:21:"Attr.ForbiddenClasses";i:8;s:13:"Attr.ID.HTML5";i:-7;s:16:"Attr.IDBlacklist";i:9;s:22:"Attr.IDBlacklistRegexp";i:-1;s:13:"Attr.IDPrefix";i:1;s:18:"Attr.IDPrefixLocal";i:1;s:24:"AutoFormat.AutoParagraph";i:7;s:17:"AutoFormat.Custom";i:9;s:25:"AutoFormat.DisplayLinkURI";i:7;s:18:"AutoFormat.Linkify";i:7;s:33:"AutoFormat.PurifierLinkify.DocURL";i:1;s:37:"AutoFormatParam.PurifierLinkifyDocURL";O:8:"stdClass":2:{s:3:"key";s:33:"AutoFormat.PurifierLinkify.DocURL";s:7:"isAlias";b:1;}s:26:"AutoFormat.PurifierLinkify";i:7;s:32:"AutoFormat.RemoveEmpty.Predicate";i:10;s:44:"AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions";i:8;s:33:"AutoFormat.RemoveEmpty.RemoveNbsp";i:7;s:22:"AutoFormat.RemoveEmpty";i:7;s:39:"AutoFormat.RemoveSpansWithoutAttributes";i:7;s:19:"CSS.AllowDuplicates";i:7;s:18:"CSS.AllowImportant";i:7;s:15:"CSS.AllowTricky";i:7;s:16:"CSS.AllowedFonts";i:-8;s:21:"CSS.AllowedProperties";i:-8;s:17:"CSS.DefinitionRev";i:5;s:23:"CSS.ForbiddenProperties";i:8;s:16:"CSS.MaxImgLength";i:-1;s:15:"CSS.Proprietary";i:7;s:11:"CSS.Trusted";i:7;s:20:"Cache.DefinitionImpl";i:-1;s:20:"Core.DefinitionCache";O:8:"stdClass":2:{s:3:"key";s:20:"Cache.DefinitionImpl";s:7:"isAlias";b:1;}s:20:"Cache.SerializerPath";i:-1;s:27:"Cache.SerializerPermissions";i:-5;s:22:"Core.AggressivelyFixLt";i:7;s:29:"Core.AggressivelyRemoveScript";i:7;s:28:"Core.AllowHostnameUnderscore";i:7;s:23:"Core.AllowParseManyTags";i:7;s:18:"Core.CollectErrors";i:7;s:18:"Core.ColorKeywords";i:10;s:30:"Core.ConvertDocumentToFragment";i:7;s:24:"Core.AcceptFullDocuments";O:8:"stdClass":2:{s:3:"key";s:30:"Core.ConvertDocumentToFragment";s:7:"isAlias";b:1;}s:36:"Core.DirectLexLineNumberSyncInterval";i:5;s:20:"Core.DisableExcludes";i:7;s:15:"Core.EnableIDNA";i:7;s:13:"Core.Encoding";i:2;s:26:"Core.EscapeInvalidChildren";i:7;s:22:"Core.EscapeInvalidTags";i:7;s:29:"Core.EscapeNonASCIICharacters";i:7;s:19:"Core.HiddenElements";i:8;s:13:"Core.Language";i:1;s:24:"Core.LegacyEntityDecoder";i:7;s:14:"Core.LexerImpl";i:-11;s:24:"Core.MaintainLineNumbers";i:-7;s:22:"Core.NormalizeNewlines";i:7;s:21:"Core.RemoveInvalidImg";i:7;s:33:"Core.RemoveProcessingInstructions";i:7;s:25:"Core.RemoveScriptContents";i:-7;s:13:"Filter.Custom";i:9;s:34:"Filter.ExtractStyleBlocks.Escaping";i:7;s:33:"Filter.ExtractStyleBlocksEscaping";O:8:"stdClass":2:{s:3:"key";s:34:"Filter.ExtractStyleBlocks.Escaping";s:7:"isAlias";b:1;}s:38:"FilterParam.ExtractStyleBlocksEscaping";O:8:"stdClass":2:{s:3:"key";s:34:"Filter.ExtractStyleBlocks.Escaping";s:7:"isAlias";b:1;}s:31:"Filter.ExtractStyleBlocks.Scope";i:-1;s:30:"Filter.ExtractStyleBlocksScope";O:8:"stdClass":2:{s:3:"key";s:31:"Filter.ExtractStyleBlocks.Scope";s:7:"isAlias";b:1;}s:35:"FilterParam.ExtractStyleBlocksScope";O:8:"stdClass":2:{s:3:"key";s:31:"Filter.ExtractStyleBlocks.Scope";s:7:"isAlias";b:1;}s:34:"Filter.ExtractStyleBlocks.TidyImpl";i:-11;s:38:"FilterParam.ExtractStyleBlocksTidyImpl";O:8:"stdClass":2:{s:3:"key";s:34:"Filter.ExtractStyleBlocks.TidyImpl";s:7:"isAlias";b:1;}s:25:"Filter.ExtractStyleBlocks";i:7;s:14:"Filter.YouTube";i:7;s:12:"HTML.Allowed";i:-4;s:22:"HTML.AllowedAttributes";i:-8;s:20:"HTML.AllowedComments";i:8;s:26:"HTML.AllowedCommentsRegexp";i:-1;s:20:"HTML.AllowedElements";i:-8;s:19:"HTML.AllowedModules";i:-8;s:23:"HTML.Attr.Name.UseCDATA";i:7;s:17:"HTML.BlockWrapper";i:1;s:16:"HTML.CoreModules";i:8;s:18:"HTML.CustomDoctype";i:-1;s:17:"HTML.DefinitionID";i:-1;s:18:"HTML.DefinitionRev";i:5;s:12:"HTML.Doctype";O:8:"stdClass":3:{s:4:"type";i:1;s:10:"allow_null";b:1;s:7:"allowed";a:5:{s:22:"HTML 4.01 Transitional";b:1;s:16:"HTML 4.01 Strict";b:1;s:22:"XHTML 1.0 Transitional";b:1;s:16:"XHTML 1.0 Strict";b:1;s:9:"XHTML 1.1";b:1;}}s:25:"HTML.FlashAllowFullScreen";i:7;s:24:"HTML.ForbiddenAttributes";i:8;s:22:"HTML.ForbiddenElements";i:8;s:17:"HTML.MaxImgLength";i:-5;s:13:"HTML.Nofollow";i:7;s:11:"HTML.Parent";i:1;s:16:"HTML.Proprietary";i:7;s:14:"HTML.SafeEmbed";i:7;s:15:"HTML.SafeIframe";i:7;s:15:"HTML.SafeObject";i:7;s:18:"HTML.SafeScripting";i:8;s:11:"HTML.Strict";i:7;s:16:"HTML.TargetBlank";i:7;s:19:"HTML.TargetNoopener";i:7;s:21:"HTML.TargetNoreferrer";i:7;s:12:"HTML.TidyAdd";i:8;s:14:"HTML.TidyLevel";O:8:"stdClass":2:{s:4:"type";i:1;s:7:"allowed";a:4:{s:4:"none";b:1;s:5:"light";b:1;s:6:"medium";b:1;s:5:"heavy";b:1;}}s:15:"HTML.TidyRemove";i:8;s:12:"HTML.Trusted";i:7;s:10:"HTML.XHTML";i:7;s:10:"Core.XHTML";O:8:"stdClass":2:{s:3:"key";s:10:"HTML.XHTML";s:7:"isAlias";b:1;}s:28:"Output.CommentScriptContents";i:7;s:26:"Core.CommentScriptContents";O:8:"stdClass":2:{s:3:"key";s:28:"Output.CommentScriptContents";s:7:"isAlias";b:1;}s:19:"Output.FixInnerHTML";i:7;s:18:"Output.FlashCompat";i:7;s:14:"Output.Newline";i:-1;s:15:"Output.SortAttr";i:7;s:17:"Output.TidyFormat";i:7;s:15:"Core.TidyFormat";O:8:"stdClass":2:{s:3:"key";s:17:"Output.TidyFormat";s:7:"isAlias";b:1;}s:17:"Test.ForceNoIconv";i:7;s:18:"URI.AllowedSchemes";i:8;s:8:"URI.Base";i:-1;s:17:"URI.DefaultScheme";i:-1;s:16:"URI.DefinitionID";i:-1;s:17:"URI.DefinitionRev";i:5;s:11:"URI.Disable";i:7;s:15:"Attr.DisableURI";O:8:"stdClass":2:{s:3:"key";s:11:"URI.Disable";s:7:"isAlias";b:1;}s:19:"URI.DisableExternal";i:7;s:28:"URI.DisableExternalResources";i:7;s:20:"URI.DisableResources";i:7;s:8:"URI.Host";i:-1;s:17:"URI.HostBlacklist";i:9;s:16:"URI.MakeAbsolute";i:7;s:9:"URI.Munge";i:-1;s:18:"URI.MungeResources";i:7;s:18:"URI.MungeSecretKey";i:-1;s:26:"URI.OverrideAllowedSchemes";i:7;s:20:"URI.SafeIframeRegexp";i:-1;}} 1 BO:25:"HTMLPurifier_ConfigSchema":3:{s:8:"defaults";a:126:{s:19:"Attr.AllowedClasses";N;s:24:"Attr.AllowedFrameTargets";a:0:{}s:15:"Attr.AllowedRel";a:0:{}s:15:"Attr.AllowedRev";a:0:{}s:18:"Attr.ClassUseCDATA";N;s:20:"Attr.DefaultImageAlt";N;s:24:"Attr.DefaultInvalidImage";s:0:"";s:27:"Attr.DefaultInvalidImageAlt";s:13:"Invalid image";s:19:"Attr.DefaultTextDir";s:3:"ltr";s:13:"Attr.EnableID";b:0;s:21:"Attr.ForbiddenClasses";a:0:{}s:13:"Attr.ID.HTML5";N;s:16:"Attr.IDBlacklist";a:0:{}s:22:"Attr.IDBlacklistRegexp";N;s:13:"Attr.IDPrefix";s:0:"";s:18:"Attr.IDPrefixLocal";s:0:"";s:24:"AutoFormat.AutoParagraph";b:0;s:17:"AutoFormat.Custom";a:0:{}s:25:"AutoFormat.DisplayLinkURI";b:0;s:18:"AutoFormat.Linkify";b:0;s:33:"AutoFormat.PurifierLinkify.DocURL";s:3:"#%s";s:26:"AutoFormat.PurifierLinkify";b:0;s:32:"AutoFormat.RemoveEmpty.Predicate";a:4:{s:8:"colgroup";a:0:{}s:2:"th";a:0:{}s:2:"td";a:0:{}s:6:"iframe";a:1:{i:0;s:3:"src";}}s:44:"AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions";a:2:{s:2:"td";b:1;s:2:"th";b:1;}s:33:"AutoFormat.RemoveEmpty.RemoveNbsp";b:0;s:22:"AutoFormat.RemoveEmpty";b:0;s:39:"AutoFormat.RemoveSpansWithoutAttributes";b:0;s:19:"CSS.AllowDuplicates";b:0;s:18:"CSS.AllowImportant";b:0;s:15:"CSS.AllowTricky";b:0;s:16:"CSS.AllowedFonts";N;s:21:"CSS.AllowedProperties";N;s:17:"CSS.DefinitionRev";i:1;s:23:"CSS.ForbiddenProperties";a:0:{}s:16:"CSS.MaxImgLength";s:6:"1200px";s:15:"CSS.Proprietary";b:0;s:11:"CSS.Trusted";b:0;s:20:"Cache.DefinitionImpl";s:10:"Serializer";s:20:"Cache.SerializerPath";N;s:27:"Cache.SerializerPermissions";i:493;s:22:"Core.AggressivelyFixLt";b:1;s:29:"Core.AggressivelyRemoveScript";b:1;s:28:"Core.AllowHostnameUnderscore";b:0;s:23:"Core.AllowParseManyTags";b:0;s:18:"Core.CollectErrors";b:0;s:18:"Core.ColorKeywords";a:148:{s:9:"aliceblue";s:7:"#F0F8FF";s:12:"antiquewhite";s:7:"#FAEBD7";s:4:"aqua";s:7:"#00FFFF";s:10:"aquamarine";s:7:"#7FFFD4";s:5:"azure";s:7:"#F0FFFF";s:5:"beige";s:7:"#F5F5DC";s:6:"bisque";s:7:"#FFE4C4";s:5:"black";s:7:"#000000";s:14:"blanchedalmond";s:7:"#FFEBCD";s:4:"blue";s:7:"#0000FF";s:10:"blueviolet";s:7:"#8A2BE2";s:5:"brown";s:7:"#A52A2A";s:9:"burlywood";s:7:"#DEB887";s:9:"cadetblue";s:7:"#5F9EA0";s:10:"chartreuse";s:7:"#7FFF00";s:9:"chocolate";s:7:"#D2691E";s:5:"coral";s:7:"#FF7F50";s:14:"cornflowerblue";s:7:"#6495ED";s:8:"cornsilk";s:7:"#FFF8DC";s:7:"crimson";s:7:"#DC143C";s:4:"cyan";s:7:"#00FFFF";s:8:"darkblue";s:7:"#00008B";s:8:"darkcyan";s:7:"#008B8B";s:13:"darkgoldenrod";s:7:"#B8860B";s:8:"darkgray";s:7:"#A9A9A9";s:8:"darkgrey";s:7:"#A9A9A9";s:9:"darkgreen";s:7:"#006400";s:9:"darkkhaki";s:7:"#BDB76B";s:11:"darkmagenta";s:7:"#8B008B";s:14:"darkolivegreen";s:7:"#556B2F";s:10:"darkorange";s:7:"#FF8C00";s:10:"darkorchid";s:7:"#9932CC";s:7:"darkred";s:7:"#8B0000";s:10:"darksalmon";s:7:"#E9967A";s:12:"darkseagreen";s:7:"#8FBC8F";s:13:"darkslateblue";s:7:"#483D8B";s:13:"darkslategray";s:7:"#2F4F4F";s:13:"darkslategrey";s:7:"#2F4F4F";s:13:"darkturquoise";s:7:"#00CED1";s:10:"darkviolet";s:7:"#9400D3";s:8:"deeppink";s:7:"#FF1493";s:11:"deepskyblue";s:7:"#00BFFF";s:7:"dimgray";s:7:"#696969";s:7:"dimgrey";s:7:"#696969";s:10:"dodgerblue";s:7:"#1E90FF";s:9:"firebrick";s:7:"#B22222";s:11:"floralwhite";s:7:"#FFFAF0";s:11:"forestgreen";s:7:"#228B22";s:7:"fuchsia";s:7:"#FF00FF";s:9:"gainsboro";s:7:"#DCDCDC";s:10:"ghostwhite";s:7:"#F8F8FF";s:4:"gold";s:7:"#FFD700";s:9:"goldenrod";s:7:"#DAA520";s:4:"gray";s:7:"#808080";s:4:"grey";s:7:"#808080";s:5:"green";s:7:"#008000";s:11:"greenyellow";s:7:"#ADFF2F";s:8:"honeydew";s:7:"#F0FFF0";s:7:"hotpink";s:7:"#FF69B4";s:9:"indianred";s:7:"#CD5C5C";s:6:"indigo";s:7:"#4B0082";s:5:"ivory";s:7:"#FFFFF0";s:5:"khaki";s:7:"#F0E68C";s:8:"lavender";s:7:"#E6E6FA";s:13:"lavenderblush";s:7:"#FFF0F5";s:9:"lawngreen";s:7:"#7CFC00";s:12:"lemonchiffon";s:7:"#FFFACD";s:9:"lightblue";s:7:"#ADD8E6";s:10:"lightcoral";s:7:"#F08080";s:9:"lightcyan";s:7:"#E0FFFF";s:20:"lightgoldenrodyellow";s:7:"#FAFAD2";s:9:"lightgray";s:7:"#D3D3D3";s:9:"lightgrey";s:7:"#D3D3D3";s:10:"lightgreen";s:7:"#90EE90";s:9:"lightpink";s:7:"#FFB6C1";s:11:"lightsalmon";s:7:"#FFA07A";s:13:"lightseagreen";s:7:"#20B2AA";s:12:"lightskyblue";s:7:"#87CEFA";s:14:"lightslategray";s:7:"#778899";s:14:"lightslategrey";s:7:"#778899";s:14:"lightsteelblue";s:7:"#B0C4DE";s:11:"lightyellow";s:7:"#FFFFE0";s:4:"lime";s:7:"#00FF00";s:9:"limegreen";s:7:"#32CD32";s:5:"linen";s:7:"#FAF0E6";s:7:"magenta";s:7:"#FF00FF";s:6:"maroon";s:7:"#800000";s:16:"mediumaquamarine";s:7:"#66CDAA";s:10:"mediumblue";s:7:"#0000CD";s:12:"mediumorchid";s:7:"#BA55D3";s:12:"mediumpurple";s:7:"#9370DB";s:14:"mediumseagreen";s:7:"#3CB371";s:15:"mediumslateblue";s:7:"#7B68EE";s:17:"mediumspringgreen";s:7:"#00FA9A";s:15:"mediumturquoise";s:7:"#48D1CC";s:15:"mediumvioletred";s:7:"#C71585";s:12:"midnightblue";s:7:"#191970";s:9:"mintcream";s:7:"#F5FFFA";s:9:"mistyrose";s:7:"#FFE4E1";s:8:"moccasin";s:7:"#FFE4B5";s:11:"navajowhite";s:7:"#FFDEAD";s:4:"navy";s:7:"#000080";s:7:"oldlace";s:7:"#FDF5E6";s:5:"olive";s:7:"#808000";s:9:"olivedrab";s:7:"#6B8E23";s:6:"orange";s:7:"#FFA500";s:9:"orangered";s:7:"#FF4500";s:6:"orchid";s:7:"#DA70D6";s:13:"palegoldenrod";s:7:"#EEE8AA";s:9:"palegreen";s:7:"#98FB98";s:13:"paleturquoise";s:7:"#AFEEEE";s:13:"palevioletred";s:7:"#DB7093";s:10:"papayawhip";s:7:"#FFEFD5";s:9:"peachpuff";s:7:"#FFDAB9";s:4:"peru";s:7:"#CD853F";s:4:"pink";s:7:"#FFC0CB";s:4:"plum";s:7:"#DDA0DD";s:10:"powderblue";s:7:"#B0E0E6";s:6:"purple";s:7:"#800080";s:13:"rebeccapurple";s:7:"#663399";s:3:"red";s:7:"#FF0000";s:9:"rosybrown";s:7:"#BC8F8F";s:9:"royalblue";s:7:"#4169E1";s:11:"saddlebrown";s:7:"#8B4513";s:6:"salmon";s:7:"#FA8072";s:10:"sandybrown";s:7:"#F4A460";s:8:"seagreen";s:7:"#2E8B57";s:8:"seashell";s:7:"#FFF5EE";s:6:"sienna";s:7:"#A0522D";s:6:"silver";s:7:"#C0C0C0";s:7:"skyblue";s:7:"#87CEEB";s:9:"slateblue";s:7:"#6A5ACD";s:9:"slategray";s:7:"#708090";s:9:"slategrey";s:7:"#708090";s:4:"snow";s:7:"#FFFAFA";s:11:"springgreen";s:7:"#00FF7F";s:9:"steelblue";s:7:"#4682B4";s:3:"tan";s:7:"#D2B48C";s:4:"teal";s:7:"#008080";s:7:"thistle";s:7:"#D8BFD8";s:6:"tomato";s:7:"#FF6347";s:9:"turquoise";s:7:"#40E0D0";s:6:"violet";s:7:"#EE82EE";s:5:"wheat";s:7:"#F5DEB3";s:5:"white";s:7:"#FFFFFF";s:10:"whitesmoke";s:7:"#F5F5F5";s:6:"yellow";s:7:"#FFFF00";s:11:"yellowgreen";s:7:"#9ACD32";}s:30:"Core.ConvertDocumentToFragment";b:1;s:36:"Core.DirectLexLineNumberSyncInterval";i:0;s:20:"Core.DisableExcludes";b:0;s:15:"Core.EnableIDNA";b:0;s:13:"Core.Encoding";s:5:"utf-8";s:26:"Core.EscapeInvalidChildren";b:0;s:22:"Core.EscapeInvalidTags";b:0;s:29:"Core.EscapeNonASCIICharacters";b:0;s:19:"Core.HiddenElements";a:2:{s:6:"script";b:1;s:5:"style";b:1;}s:13:"Core.Language";s:2:"en";s:24:"Core.LegacyEntityDecoder";b:0;s:14:"Core.LexerImpl";N;s:24:"Core.MaintainLineNumbers";N;s:22:"Core.NormalizeNewlines";b:1;s:21:"Core.RemoveInvalidImg";b:1;s:33:"Core.RemoveProcessingInstructions";b:0;s:25:"Core.RemoveScriptContents";N;s:13:"Filter.Custom";a:0:{}s:34:"Filter.ExtractStyleBlocks.Escaping";b:1;s:31:"Filter.ExtractStyleBlocks.Scope";N;s:34:"Filter.ExtractStyleBlocks.TidyImpl";N;s:25:"Filter.ExtractStyleBlocks";b:0;s:14:"Filter.YouTube";b:0;s:12:"HTML.Allowed";N;s:22:"HTML.AllowedAttributes";N;s:20:"HTML.AllowedComments";a:0:{}s:26:"HTML.AllowedCommentsRegexp";N;s:20:"HTML.AllowedElements";N;s:19:"HTML.AllowedModules";N;s:23:"HTML.Attr.Name.UseCDATA";b:0;s:17:"HTML.BlockWrapper";s:1:"p";s:16:"HTML.CoreModules";a:7:{s:9:"Structure";b:1;s:4:"Text";b:1;s:9:"Hypertext";b:1;s:4:"List";b:1;s:22:"NonXMLCommonAttributes";b:1;s:19:"XMLCommonAttributes";b:1;s:16:"CommonAttributes";b:1;}s:18:"HTML.CustomDoctype";N;s:17:"HTML.DefinitionID";N;s:18:"HTML.DefinitionRev";i:1;s:12:"HTML.Doctype";N;s:25:"HTML.FlashAllowFullScreen";b:0;s:24:"HTML.ForbiddenAttributes";a:0:{}s:22:"HTML.ForbiddenElements";a:0:{}s:17:"HTML.MaxImgLength";i:1200;s:13:"HTML.Nofollow";b:0;s:11:"HTML.Parent";s:3:"div";s:16:"HTML.Proprietary";b:0;s:14:"HTML.SafeEmbed";b:0;s:15:"HTML.SafeIframe";b:0;s:15:"HTML.SafeObject";b:0;s:18:"HTML.SafeScripting";a:0:{}s:11:"HTML.Strict";b:0;s:16:"HTML.TargetBlank";b:0;s:19:"HTML.TargetNoopener";b:1;s:21:"HTML.TargetNoreferrer";b:1;s:12:"HTML.TidyAdd";a:0:{}s:14:"HTML.TidyLevel";s:6:"medium";s:15:"HTML.TidyRemove";a:0:{}s:12:"HTML.Trusted";b:0;s:10:"HTML.XHTML";b:1;s:28:"Output.CommentScriptContents";b:1;s:19:"Output.FixInnerHTML";b:1;s:18:"Output.FlashCompat";b:0;s:14:"Output.Newline";N;s:15:"Output.SortAttr";b:0;s:17:"Output.TidyFormat";b:0;s:17:"Test.ForceNoIconv";b:0;s:18:"URI.AllowedSchemes";a:7:{s:4:"http";b:1;s:5:"https";b:1;s:6:"mailto";b:1;s:3:"ftp";b:1;s:4:"nntp";b:1;s:4:"news";b:1;s:3:"tel";b:1;}s:8:"URI.Base";N;s:17:"URI.DefaultScheme";s:4:"http";s:16:"URI.DefinitionID";N;s:17:"URI.DefinitionRev";i:1;s:11:"URI.Disable";b:0;s:19:"URI.DisableExternal";b:0;s:28:"URI.DisableExternalResources";b:0;s:20:"URI.DisableResources";b:0;s:8:"URI.Host";N;s:17:"URI.HostBlacklist";a:0:{}s:16:"URI.MakeAbsolute";b:0;s:9:"URI.Munge";N;s:18:"URI.MungeResources";b:0;s:18:"URI.MungeSecretKey";N;s:26:"URI.OverrideAllowedSchemes";b:1;s:20:"URI.SafeIframeRegexp";N;}s:12:"defaultPlist";O:25:"HTMLPurifier_PropertyList":3:{s:7:"*data";a:126:{s:19:"Attr.AllowedClasses";N;s:24:"Attr.AllowedFrameTargets";a:0:{}s:15:"Attr.AllowedRel";a:0:{}s:15:"Attr.AllowedRev";a:0:{}s:18:"Attr.ClassUseCDATA";N;s:20:"Attr.DefaultImageAlt";N;s:24:"Attr.DefaultInvalidImage";s:0:"";s:27:"Attr.DefaultInvalidImageAlt";s:13:"Invalid image";s:19:"Attr.DefaultTextDir";s:3:"ltr";s:13:"Attr.EnableID";b:0;s:21:"Attr.ForbiddenClasses";a:0:{}s:13:"Attr.ID.HTML5";N;s:16:"Attr.IDBlacklist";a:0:{}s:22:"Attr.IDBlacklistRegexp";N;s:13:"Attr.IDPrefix";s:0:"";s:18:"Attr.IDPrefixLocal";s:0:"";s:24:"AutoFormat.AutoParagraph";b:0;s:17:"AutoFormat.Custom";a:0:{}s:25:"AutoFormat.DisplayLinkURI";b:0;s:18:"AutoFormat.Linkify";b:0;s:33:"AutoFormat.PurifierLinkify.DocURL";s:3:"#%s";s:26:"AutoFormat.PurifierLinkify";b:0;s:32:"AutoFormat.RemoveEmpty.Predicate";a:4:{s:8:"colgroup";a:0:{}s:2:"th";a:0:{}s:2:"td";a:0:{}s:6:"iframe";a:1:{i:0;s:3:"src";}}s:44:"AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions";a:2:{s:2:"td";b:1;s:2:"th";b:1;}s:33:"AutoFormat.RemoveEmpty.RemoveNbsp";b:0;s:22:"AutoFormat.RemoveEmpty";b:0;s:39:"AutoFormat.RemoveSpansWithoutAttributes";b:0;s:19:"CSS.AllowDuplicates";b:0;s:18:"CSS.AllowImportant";b:0;s:15:"CSS.AllowTricky";b:0;s:16:"CSS.AllowedFonts";N;s:21:"CSS.AllowedProperties";N;s:17:"CSS.DefinitionRev";i:1;s:23:"CSS.ForbiddenProperties";a:0:{}s:16:"CSS.MaxImgLength";s:6:"1200px";s:15:"CSS.Proprietary";b:0;s:11:"CSS.Trusted";b:0;s:20:"Cache.DefinitionImpl";s:10:"Serializer";s:20:"Cache.SerializerPath";N;s:27:"Cache.SerializerPermissions";i:493;s:22:"Core.AggressivelyFixLt";b:1;s:29:"Core.AggressivelyRemoveScript";b:1;s:28:"Core.AllowHostnameUnderscore";b:0;s:23:"Core.AllowParseManyTags";b:0;s:18:"Core.CollectErrors";b:0;s:18:"Core.ColorKeywords";a:148:{s:9:"aliceblue";s:7:"#F0F8FF";s:12:"antiquewhite";s:7:"#FAEBD7";s:4:"aqua";s:7:"#00FFFF";s:10:"aquamarine";s:7:"#7FFFD4";s:5:"azure";s:7:"#F0FFFF";s:5:"beige";s:7:"#F5F5DC";s:6:"bisque";s:7:"#FFE4C4";s:5:"black";s:7:"#000000";s:14:"blanchedalmond";s:7:"#FFEBCD";s:4:"blue";s:7:"#0000FF";s:10:"blueviolet";s:7:"#8A2BE2";s:5:"brown";s:7:"#A52A2A";s:9:"burlywood";s:7:"#DEB887";s:9:"cadetblue";s:7:"#5F9EA0";s:10:"chartreuse";s:7:"#7FFF00";s:9:"chocolate";s:7:"#D2691E";s:5:"coral";s:7:"#FF7F50";s:14:"cornflowerblue";s:7:"#6495ED";s:8:"cornsilk";s:7:"#FFF8DC";s:7:"crimson";s:7:"#DC143C";s:4:"cyan";s:7:"#00FFFF";s:8:"darkblue";s:7:"#00008B";s:8:"darkcyan";s:7:"#008B8B";s:13:"darkgoldenrod";s:7:"#B8860B";s:8:"darkgray";s:7:"#A9A9A9";s:8:"darkgrey";s:7:"#A9A9A9";s:9:"darkgreen";s:7:"#006400";s:9:"darkkhaki";s:7:"#BDB76B";s:11:"darkmagenta";s:7:"#8B008B";s:14:"darkolivegreen";s:7:"#556B2F";s:10:"darkorange";s:7:"#FF8C00";s:10:"darkorchid";s:7:"#9932CC";s:7:"darkred";s:7:"#8B0000";s:10:"darksalmon";s:7:"#E9967A";s:12:"darkseagreen";s:7:"#8FBC8F";s:13:"darkslateblue";s:7:"#483D8B";s:13:"darkslategray";s:7:"#2F4F4F";s:13:"darkslategrey";s:7:"#2F4F4F";s:13:"darkturquoise";s:7:"#00CED1";s:10:"darkviolet";s:7:"#9400D3";s:8:"deeppink";s:7:"#FF1493";s:11:"deepskyblue";s:7:"#00BFFF";s:7:"dimgray";s:7:"#696969";s:7:"dimgrey";s:7:"#696969";s:10:"dodgerblue";s:7:"#1E90FF";s:9:"firebrick";s:7:"#B22222";s:11:"floralwhite";s:7:"#FFFAF0";s:11:"forestgreen";s:7:"#228B22";s:7:"fuchsia";s:7:"#FF00FF";s:9:"gainsboro";s:7:"#DCDCDC";s:10:"ghostwhite";s:7:"#F8F8FF";s:4:"gold";s:7:"#FFD700";s:9:"goldenrod";s:7:"#DAA520";s:4:"gray";s:7:"#808080";s:4:"grey";s:7:"#808080";s:5:"green";s:7:"#008000";s:11:"greenyellow";s:7:"#ADFF2F";s:8:"honeydew";s:7:"#F0FFF0";s:7:"hotpink";s:7:"#FF69B4";s:9:"indianred";s:7:"#CD5C5C";s:6:"indigo";s:7:"#4B0082";s:5:"ivory";s:7:"#FFFFF0";s:5:"khaki";s:7:"#F0E68C";s:8:"lavender";s:7:"#E6E6FA";s:13:"lavenderblush";s:7:"#FFF0F5";s:9:"lawngreen";s:7:"#7CFC00";s:12:"lemonchiffon";s:7:"#FFFACD";s:9:"lightblue";s:7:"#ADD8E6";s:10:"lightcoral";s:7:"#F08080";s:9:"lightcyan";s:7:"#E0FFFF";s:20:"lightgoldenrodyellow";s:7:"#FAFAD2";s:9:"lightgray";s:7:"#D3D3D3";s:9:"lightgrey";s:7:"#D3D3D3";s:10:"lightgreen";s:7:"#90EE90";s:9:"lightpink";s:7:"#FFB6C1";s:11:"lightsalmon";s:7:"#FFA07A";s:13:"lightseagreen";s:7:"#20B2AA";s:12:"lightskyblue";s:7:"#87CEFA";s:14:"lightslategray";s:7:"#778899";s:14:"lightslategrey";s:7:"#778899";s:14:"lightsteelblue";s:7:"#B0C4DE";s:11:"lightyellow";s:7:"#FFFFE0";s:4:"lime";s:7:"#00FF00";s:9:"limegreen";s:7:"#32CD32";s:5:"linen";s:7:"#FAF0E6";s:7:"magenta";s:7:"#FF00FF";s:6:"maroon";s:7:"#800000";s:16:"mediumaquamarine";s:7:"#66CDAA";s:10:"mediumblue";s:7:"#0000CD";s:12:"mediumorchid";s:7:"#BA55D3";s:12:"mediumpurple";s:7:"#9370DB";s:14:"mediumseagreen";s:7:"#3CB371";s:15:"mediumslateblue";s:7:"#7B68EE";s:17:"mediumspringgreen";s:7:"#00FA9A";s:15:"mediumturquoise";s:7:"#48D1CC";s:15:"mediumvioletred";s:7:"#C71585";s:12:"midnightblue";s:7:"#191970";s:9:"mintcream";s:7:"#F5FFFA";s:9:"mistyrose";s:7:"#FFE4E1";s:8:"moccasin";s:7:"#FFE4B5";s:11:"navajowhite";s:7:"#FFDEAD";s:4:"navy";s:7:"#000080";s:7:"oldlace";s:7:"#FDF5E6";s:5:"olive";s:7:"#808000";s:9:"olivedrab";s:7:"#6B8E23";s:6:"orange";s:7:"#FFA500";s:9:"orangered";s:7:"#FF4500";s:6:"orchid";s:7:"#DA70D6";s:13:"palegoldenrod";s:7:"#EEE8AA";s:9:"palegreen";s:7:"#98FB98";s:13:"paleturquoise";s:7:"#AFEEEE";s:13:"palevioletred";s:7:"#DB7093";s:10:"papayawhip";s:7:"#FFEFD5";s:9:"peachpuff";s:7:"#FFDAB9";s:4:"peru";s:7:"#CD853F";s:4:"pink";s:7:"#FFC0CB";s:4:"plum";s:7:"#DDA0DD";s:10:"powderblue";s:7:"#B0E0E6";s:6:"purple";s:7:"#800080";s:13:"rebeccapurple";s:7:"#663399";s:3:"red";s:7:"#FF0000";s:9:"rosybrown";s:7:"#BC8F8F";s:9:"royalblue";s:7:"#4169E1";s:11:"saddlebrown";s:7:"#8B4513";s:6:"salmon";s:7:"#FA8072";s:10:"sandybrown";s:7:"#F4A460";s:8:"seagreen";s:7:"#2E8B57";s:8:"seashell";s:7:"#FFF5EE";s:6:"sienna";s:7:"#A0522D";s:6:"silver";s:7:"#C0C0C0";s:7:"skyblue";s:7:"#87CEEB";s:9:"slateblue";s:7:"#6A5ACD";s:9:"slategray";s:7:"#708090";s:9:"slategrey";s:7:"#708090";s:4:"snow";s:7:"#FFFAFA";s:11:"springgreen";s:7:"#00FF7F";s:9:"steelblue";s:7:"#4682B4";s:3:"tan";s:7:"#D2B48C";s:4:"teal";s:7:"#008080";s:7:"thistle";s:7:"#D8BFD8";s:6:"tomato";s:7:"#FF6347";s:9:"turquoise";s:7:"#40E0D0";s:6:"violet";s:7:"#EE82EE";s:5:"wheat";s:7:"#F5DEB3";s:5:"white";s:7:"#FFFFFF";s:10:"whitesmoke";s:7:"#F5F5F5";s:6:"yellow";s:7:"#FFFF00";s:11:"yellowgreen";s:7:"#9ACD32";}s:30:"Core.ConvertDocumentToFragment";b:1;s:36:"Core.DirectLexLineNumberSyncInterval";i:0;s:20:"Core.DisableExcludes";b:0;s:15:"Core.EnableIDNA";b:0;s:13:"Core.Encoding";s:5:"utf-8";s:26:"Core.EscapeInvalidChildren";b:0;s:22:"Core.EscapeInvalidTags";b:0;s:29:"Core.EscapeNonASCIICharacters";b:0;s:19:"Core.HiddenElements";a:2:{s:6:"script";b:1;s:5:"style";b:1;}s:13:"Core.Language";s:2:"en";s:24:"Core.LegacyEntityDecoder";b:0;s:14:"Core.LexerImpl";N;s:24:"Core.MaintainLineNumbers";N;s:22:"Core.NormalizeNewlines";b:1;s:21:"Core.RemoveInvalidImg";b:1;s:33:"Core.RemoveProcessingInstructions";b:0;s:25:"Core.RemoveScriptContents";N;s:13:"Filter.Custom";a:0:{}s:34:"Filter.ExtractStyleBlocks.Escaping";b:1;s:31:"Filter.ExtractStyleBlocks.Scope";N;s:34:"Filter.ExtractStyleBlocks.TidyImpl";N;s:25:"Filter.ExtractStyleBlocks";b:0;s:14:"Filter.YouTube";b:0;s:12:"HTML.Allowed";N;s:22:"HTML.AllowedAttributes";N;s:20:"HTML.AllowedComments";a:0:{}s:26:"HTML.AllowedCommentsRegexp";N;s:20:"HTML.AllowedElements";N;s:19:"HTML.AllowedModules";N;s:23:"HTML.Attr.Name.UseCDATA";b:0;s:17:"HTML.BlockWrapper";s:1:"p";s:16:"HTML.CoreModules";a:7:{s:9:"Structure";b:1;s:4:"Text";b:1;s:9:"Hypertext";b:1;s:4:"List";b:1;s:22:"NonXMLCommonAttributes";b:1;s:19:"XMLCommonAttributes";b:1;s:16:"CommonAttributes";b:1;}s:18:"HTML.CustomDoctype";N;s:17:"HTML.DefinitionID";N;s:18:"HTML.DefinitionRev";i:1;s:12:"HTML.Doctype";N;s:25:"HTML.FlashAllowFullScreen";b:0;s:24:"HTML.ForbiddenAttributes";a:0:{}s:22:"HTML.ForbiddenElements";a:0:{}s:17:"HTML.MaxImgLength";i:1200;s:13:"HTML.Nofollow";b:0;s:11:"HTML.Parent";s:3:"div";s:16:"HTML.Proprietary";b:0;s:14:"HTML.SafeEmbed";b:0;s:15:"HTML.SafeIframe";b:0;s:15:"HTML.SafeObject";b:0;s:18:"HTML.SafeScripting";a:0:{}s:11:"HTML.Strict";b:0;s:16:"HTML.TargetBlank";b:0;s:19:"HTML.TargetNoopener";b:1;s:21:"HTML.TargetNoreferrer";b:1;s:12:"HTML.TidyAdd";a:0:{}s:14:"HTML.TidyLevel";s:6:"medium";s:15:"HTML.TidyRemove";a:0:{}s:12:"HTML.Trusted";b:0;s:10:"HTML.XHTML";b:1;s:28:"Output.CommentScriptContents";b:1;s:19:"Output.FixInnerHTML";b:1;s:18:"Output.FlashCompat";b:0;s:14:"Output.Newline";N;s:15:"Output.SortAttr";b:0;s:17:"Output.TidyFormat";b:0;s:17:"Test.ForceNoIconv";b:0;s:18:"URI.AllowedSchemes";a:7:{s:4:"http";b:1;s:5:"https";b:1;s:6:"mailto";b:1;s:3:"ftp";b:1;s:4:"nntp";b:1;s:4:"news";b:1;s:3:"tel";b:1;}s:8:"URI.Base";N;s:17:"URI.DefaultScheme";s:4:"http";s:16:"URI.DefinitionID";N;s:17:"URI.DefinitionRev";i:1;s:11:"URI.Disable";b:0;s:19:"URI.DisableExternal";b:0;s:28:"URI.DisableExternalResources";b:0;s:20:"URI.DisableResources";b:0;s:8:"URI.Host";N;s:17:"URI.HostBlacklist";a:0:{}s:16:"URI.MakeAbsolute";b:0;s:9:"URI.Munge";N;s:18:"URI.MungeResources";b:0;s:18:"URI.MungeSecretKey";N;s:26:"URI.OverrideAllowedSchemes";b:1;s:20:"URI.SafeIframeRegexp";N;}s:9:"*parent";N;s:8:"*cache";N;}s:4:"info";a:139:{s:19:"Attr.AllowedClasses";i:-8;s:24:"Attr.AllowedFrameTargets";i:8;s:15:"Attr.AllowedRel";i:8;s:15:"Attr.AllowedRev";i:8;s:18:"Attr.ClassUseCDATA";i:-7;s:20:"Attr.DefaultImageAlt";i:-1;s:24:"Attr.DefaultInvalidImage";i:1;s:27:"Attr.DefaultInvalidImageAlt";i:1;s:19:"Attr.DefaultTextDir";O:8:"stdClass":2:{s:4:"type";i:1;s:7:"allowed";a:2:{s:3:"ltr";b:1;s:3:"rtl";b:1;}}s:13:"Attr.EnableID";i:7;s:17:"HTML.EnableAttrID";O:8:"stdClass":2:{s:3:"key";s:13:"Attr.EnableID";s:7:"isAlias";b:1;}s:21:"Attr.ForbiddenClasses";i:8;s:13:"Attr.ID.HTML5";i:-7;s:16:"Attr.IDBlacklist";i:9;s:22:"Attr.IDBlacklistRegexp";i:-1;s:13:"Attr.IDPrefix";i:1;s:18:"Attr.IDPrefixLocal";i:1;s:24:"AutoFormat.AutoParagraph";i:7;s:17:"AutoFormat.Custom";i:9;s:25:"AutoFormat.DisplayLinkURI";i:7;s:18:"AutoFormat.Linkify";i:7;s:33:"AutoFormat.PurifierLinkify.DocURL";i:1;s:37:"AutoFormatParam.PurifierLinkifyDocURL";O:8:"stdClass":2:{s:3:"key";s:33:"AutoFormat.PurifierLinkify.DocURL";s:7:"isAlias";b:1;}s:26:"AutoFormat.PurifierLinkify";i:7;s:32:"AutoFormat.RemoveEmpty.Predicate";i:10;s:44:"AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions";i:8;s:33:"AutoFormat.RemoveEmpty.RemoveNbsp";i:7;s:22:"AutoFormat.RemoveEmpty";i:7;s:39:"AutoFormat.RemoveSpansWithoutAttributes";i:7;s:19:"CSS.AllowDuplicates";i:7;s:18:"CSS.AllowImportant";i:7;s:15:"CSS.AllowTricky";i:7;s:16:"CSS.AllowedFonts";i:-8;s:21:"CSS.AllowedProperties";i:-8;s:17:"CSS.DefinitionRev";i:5;s:23:"CSS.ForbiddenProperties";i:8;s:16:"CSS.MaxImgLength";i:-1;s:15:"CSS.Proprietary";i:7;s:11:"CSS.Trusted";i:7;s:20:"Cache.DefinitionImpl";i:-1;s:20:"Core.DefinitionCache";O:8:"stdClass":2:{s:3:"key";s:20:"Cache.DefinitionImpl";s:7:"isAlias";b:1;}s:20:"Cache.SerializerPath";i:-1;s:27:"Cache.SerializerPermissions";i:-5;s:22:"Core.AggressivelyFixLt";i:7;s:29:"Core.AggressivelyRemoveScript";i:7;s:28:"Core.AllowHostnameUnderscore";i:7;s:23:"Core.AllowParseManyTags";i:7;s:18:"Core.CollectErrors";i:7;s:18:"Core.ColorKeywords";i:10;s:30:"Core.ConvertDocumentToFragment";i:7;s:24:"Core.AcceptFullDocuments";O:8:"stdClass":2:{s:3:"key";s:30:"Core.ConvertDocumentToFragment";s:7:"isAlias";b:1;}s:36:"Core.DirectLexLineNumberSyncInterval";i:5;s:20:"Core.DisableExcludes";i:7;s:15:"Core.EnableIDNA";i:7;s:13:"Core.Encoding";i:2;s:26:"Core.EscapeInvalidChildren";i:7;s:22:"Core.EscapeInvalidTags";i:7;s:29:"Core.EscapeNonASCIICharacters";i:7;s:19:"Core.HiddenElements";i:8;s:13:"Core.Language";i:1;s:24:"Core.LegacyEntityDecoder";i:7;s:14:"Core.LexerImpl";i:-11;s:24:"Core.MaintainLineNumbers";i:-7;s:22:"Core.NormalizeNewlines";i:7;s:21:"Core.RemoveInvalidImg";i:7;s:33:"Core.RemoveProcessingInstructions";i:7;s:25:"Core.RemoveScriptContents";i:-7;s:13:"Filter.Custom";i:9;s:34:"Filter.ExtractStyleBlocks.Escaping";i:7;s:33:"Filter.ExtractStyleBlocksEscaping";O:8:"stdClass":2:{s:3:"key";s:34:"Filter.ExtractStyleBlocks.Escaping";s:7:"isAlias";b:1;}s:38:"FilterParam.ExtractStyleBlocksEscaping";O:8:"stdClass":2:{s:3:"key";s:34:"Filter.ExtractStyleBlocks.Escaping";s:7:"isAlias";b:1;}s:31:"Filter.ExtractStyleBlocks.Scope";i:-1;s:30:"Filter.ExtractStyleBlocksScope";O:8:"stdClass":2:{s:3:"key";s:31:"Filter.ExtractStyleBlocks.Scope";s:7:"isAlias";b:1;}s:35:"FilterParam.ExtractStyleBlocksScope";O:8:"stdClass":2:{s:3:"key";s:31:"Filter.ExtractStyleBlocks.Scope";s:7:"isAlias";b:1;}s:34:"Filter.ExtractStyleBlocks.TidyImpl";i:-11;s:38:"FilterParam.ExtractStyleBlocksTidyImpl";O:8:"stdClass":2:{s:3:"key";s:34:"Filter.ExtractStyleBlocks.TidyImpl";s:7:"isAlias";b:1;}s:25:"Filter.ExtractStyleBlocks";i:7;s:14:"Filter.YouTube";i:7;s:12:"HTML.Allowed";i:-4;s:22:"HTML.AllowedAttributes";i:-8;s:20:"HTML.AllowedComments";i:8;s:26:"HTML.AllowedCommentsRegexp";i:-1;s:20:"HTML.AllowedElements";i:-8;s:19:"HTML.AllowedModules";i:-8;s:23:"HTML.Attr.Name.UseCDATA";i:7;s:17:"HTML.BlockWrapper";i:1;s:16:"HTML.CoreModules";i:8;s:18:"HTML.CustomDoctype";i:-1;s:17:"HTML.DefinitionID";i:-1;s:18:"HTML.DefinitionRev";i:5;s:12:"HTML.Doctype";O:8:"stdClass":3:{s:4:"type";i:1;s:10:"allow_null";b:1;s:7:"allowed";a:5:{s:22:"HTML 4.01 Transitional";b:1;s:16:"HTML 4.01 Strict";b:1;s:22:"XHTML 1.0 Transitional";b:1;s:16:"XHTML 1.0 Strict";b:1;s:9:"XHTML 1.1";b:1;}}s:25:"HTML.FlashAllowFullScreen";i:7;s:24:"HTML.ForbiddenAttributes";i:8;s:22:"HTML.ForbiddenElements";i:8;s:17:"HTML.MaxImgLength";i:-5;s:13:"HTML.Nofollow";i:7;s:11:"HTML.Parent";i:1;s:16:"HTML.Proprietary";i:7;s:14:"HTML.SafeEmbed";i:7;s:15:"HTML.SafeIframe";i:7;s:15:"HTML.SafeObject";i:7;s:18:"HTML.SafeScripting";i:8;s:11:"HTML.Strict";i:7;s:16:"HTML.TargetBlank";i:7;s:19:"HTML.TargetNoopener";i:7;s:21:"HTML.TargetNoreferrer";i:7;s:12:"HTML.TidyAdd";i:8;s:14:"HTML.TidyLevel";O:8:"stdClass":2:{s:4:"type";i:1;s:7:"allowed";a:4:{s:4:"none";b:1;s:5:"light";b:1;s:6:"medium";b:1;s:5:"heavy";b:1;}}s:15:"HTML.TidyRemove";i:8;s:12:"HTML.Trusted";i:7;s:10:"HTML.XHTML";i:7;s:10:"Core.XHTML";O:8:"stdClass":2:{s:3:"key";s:10:"HTML.XHTML";s:7:"isAlias";b:1;}s:28:"Output.CommentScriptContents";i:7;s:26:"Core.CommentScriptContents";O:8:"stdClass":2:{s:3:"key";s:28:"Output.CommentScriptContents";s:7:"isAlias";b:1;}s:19:"Output.FixInnerHTML";i:7;s:18:"Output.FlashCompat";i:7;s:14:"Output.Newline";i:-1;s:15:"Output.SortAttr";i:7;s:17:"Output.TidyFormat";i:7;s:15:"Core.TidyFormat";O:8:"stdClass":2:{s:3:"key";s:17:"Output.TidyFormat";s:7:"isAlias";b:1;}s:17:"Test.ForceNoIconv";i:7;s:18:"URI.AllowedSchemes";i:8;s:8:"URI.Base";i:-1;s:17:"URI.DefaultScheme";i:-1;s:16:"URI.DefinitionID";i:-1;s:17:"URI.DefinitionRev";i:5;s:11:"URI.Disable";i:7;s:15:"Attr.DisableURI";O:8:"stdClass":2:{s:3:"key";s:11:"URI.Disable";s:7:"isAlias";b:1;}s:19:"URI.DisableExternal";i:7;s:28:"URI.DisableExternalResources";i:7;s:20:"URI.DisableResources";i:7;s:8:"URI.Host";i:-1;s:17:"URI.HostBlacklist";i:9;s:16:"URI.MakeAbsolute";i:7;s:9:"URI.Munge";i:-1;s:18:"URI.MungeResources";i:7;s:18:"URI.MungeSecretKey";i:-1;s:26:"URI.OverrideAllowedSchemes";i:7;s:20:"URI.SafeIframeRegexp";i:-1;}}
@@ -6,7 +6,7 @@ DEFAULT: false @@ -6,7 +6,7 @@ DEFAULT: false
6 <p> 6 <p>
7 When enabled, HTML Purifier will treat any elements that contain only 7 When enabled, HTML Purifier will treat any elements that contain only
8 non-breaking spaces as well as regular whitespace as empty, and remove 8 non-breaking spaces as well as regular whitespace as empty, and remove
9 - them when %AutoForamt.RemoveEmpty is enabled. 9 + them when %AutoFormat.RemoveEmpty is enabled.
10 </p> 10 </p>
11 <p> 11 <p>
12 See %AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions for a list of elements 12 See %AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions for a list of elements
  1 +Core.AllowParseManyTags
  2 +TYPE: bool
  3 +DEFAULT: false
  4 +VERSION: 4.10.1
  5 +--DESCRIPTION--
  6 +<p>
  7 + This directive allows parsing of many nested tags.
  8 + If you set true, relaxes any hardcoded limit from the parser.
  9 + However, in that case it may cause a Dos attack.
  10 + Be careful when enabling it.
  11 +</p>
  12 +--# vim: et sw=4 sts=4
@@ -3,23 +3,154 @@ TYPE: hash @@ -3,23 +3,154 @@ TYPE: hash
3 VERSION: 2.0.0 3 VERSION: 2.0.0
4 --DEFAULT-- 4 --DEFAULT--
5 array ( 5 array (
6 - 'maroon' => '#800000',  
7 - 'red' => '#FF0000',  
8 - 'orange' => '#FFA500',  
9 - 'yellow' => '#FFFF00',  
10 - 'olive' => '#808000',  
11 - 'purple' => '#800080', 6 + 'aliceblue' => '#F0F8FF',
  7 + 'antiquewhite' => '#FAEBD7',
  8 + 'aqua' => '#00FFFF',
  9 + 'aquamarine' => '#7FFFD4',
  10 + 'azure' => '#F0FFFF',
  11 + 'beige' => '#F5F5DC',
  12 + 'bisque' => '#FFE4C4',
  13 + 'black' => '#000000',
  14 + 'blanchedalmond' => '#FFEBCD',
  15 + 'blue' => '#0000FF',
  16 + 'blueviolet' => '#8A2BE2',
  17 + 'brown' => '#A52A2A',
  18 + 'burlywood' => '#DEB887',
  19 + 'cadetblue' => '#5F9EA0',
  20 + 'chartreuse' => '#7FFF00',
  21 + 'chocolate' => '#D2691E',
  22 + 'coral' => '#FF7F50',
  23 + 'cornflowerblue' => '#6495ED',
  24 + 'cornsilk' => '#FFF8DC',
  25 + 'crimson' => '#DC143C',
  26 + 'cyan' => '#00FFFF',
  27 + 'darkblue' => '#00008B',
  28 + 'darkcyan' => '#008B8B',
  29 + 'darkgoldenrod' => '#B8860B',
  30 + 'darkgray' => '#A9A9A9',
  31 + 'darkgrey' => '#A9A9A9',
  32 + 'darkgreen' => '#006400',
  33 + 'darkkhaki' => '#BDB76B',
  34 + 'darkmagenta' => '#8B008B',
  35 + 'darkolivegreen' => '#556B2F',
  36 + 'darkorange' => '#FF8C00',
  37 + 'darkorchid' => '#9932CC',
  38 + 'darkred' => '#8B0000',
  39 + 'darksalmon' => '#E9967A',
  40 + 'darkseagreen' => '#8FBC8F',
  41 + 'darkslateblue' => '#483D8B',
  42 + 'darkslategray' => '#2F4F4F',
  43 + 'darkslategrey' => '#2F4F4F',
  44 + 'darkturquoise' => '#00CED1',
  45 + 'darkviolet' => '#9400D3',
  46 + 'deeppink' => '#FF1493',
  47 + 'deepskyblue' => '#00BFFF',
  48 + 'dimgray' => '#696969',
  49 + 'dimgrey' => '#696969',
  50 + 'dodgerblue' => '#1E90FF',
  51 + 'firebrick' => '#B22222',
  52 + 'floralwhite' => '#FFFAF0',
  53 + 'forestgreen' => '#228B22',
12 'fuchsia' => '#FF00FF', 54 'fuchsia' => '#FF00FF',
13 - 'white' => '#FFFFFF',  
14 - 'lime' => '#00FF00', 55 + 'gainsboro' => '#DCDCDC',
  56 + 'ghostwhite' => '#F8F8FF',
  57 + 'gold' => '#FFD700',
  58 + 'goldenrod' => '#DAA520',
  59 + 'gray' => '#808080',
  60 + 'grey' => '#808080',
15 'green' => '#008000', 61 'green' => '#008000',
  62 + 'greenyellow' => '#ADFF2F',
  63 + 'honeydew' => '#F0FFF0',
  64 + 'hotpink' => '#FF69B4',
  65 + 'indianred' => '#CD5C5C',
  66 + 'indigo' => '#4B0082',
  67 + 'ivory' => '#FFFFF0',
  68 + 'khaki' => '#F0E68C',
  69 + 'lavender' => '#E6E6FA',
  70 + 'lavenderblush' => '#FFF0F5',
  71 + 'lawngreen' => '#7CFC00',
  72 + 'lemonchiffon' => '#FFFACD',
  73 + 'lightblue' => '#ADD8E6',
  74 + 'lightcoral' => '#F08080',
  75 + 'lightcyan' => '#E0FFFF',
  76 + 'lightgoldenrodyellow' => '#FAFAD2',
  77 + 'lightgray' => '#D3D3D3',
  78 + 'lightgrey' => '#D3D3D3',
  79 + 'lightgreen' => '#90EE90',
  80 + 'lightpink' => '#FFB6C1',
  81 + 'lightsalmon' => '#FFA07A',
  82 + 'lightseagreen' => '#20B2AA',
  83 + 'lightskyblue' => '#87CEFA',
  84 + 'lightslategray' => '#778899',
  85 + 'lightslategrey' => '#778899',
  86 + 'lightsteelblue' => '#B0C4DE',
  87 + 'lightyellow' => '#FFFFE0',
  88 + 'lime' => '#00FF00',
  89 + 'limegreen' => '#32CD32',
  90 + 'linen' => '#FAF0E6',
  91 + 'magenta' => '#FF00FF',
  92 + 'maroon' => '#800000',
  93 + 'mediumaquamarine' => '#66CDAA',
  94 + 'mediumblue' => '#0000CD',
  95 + 'mediumorchid' => '#BA55D3',
  96 + 'mediumpurple' => '#9370DB',
  97 + 'mediumseagreen' => '#3CB371',
  98 + 'mediumslateblue' => '#7B68EE',
  99 + 'mediumspringgreen' => '#00FA9A',
  100 + 'mediumturquoise' => '#48D1CC',
  101 + 'mediumvioletred' => '#C71585',
  102 + 'midnightblue' => '#191970',
  103 + 'mintcream' => '#F5FFFA',
  104 + 'mistyrose' => '#FFE4E1',
  105 + 'moccasin' => '#FFE4B5',
  106 + 'navajowhite' => '#FFDEAD',
16 'navy' => '#000080', 107 'navy' => '#000080',
17 - 'blue' => '#0000FF',  
18 - 'aqua' => '#00FFFF',  
19 - 'teal' => '#008080',  
20 - 'black' => '#000000', 108 + 'oldlace' => '#FDF5E6',
  109 + 'olive' => '#808000',
  110 + 'olivedrab' => '#6B8E23',
  111 + 'orange' => '#FFA500',
  112 + 'orangered' => '#FF4500',
  113 + 'orchid' => '#DA70D6',
  114 + 'palegoldenrod' => '#EEE8AA',
  115 + 'palegreen' => '#98FB98',
  116 + 'paleturquoise' => '#AFEEEE',
  117 + 'palevioletred' => '#DB7093',
  118 + 'papayawhip' => '#FFEFD5',
  119 + 'peachpuff' => '#FFDAB9',
  120 + 'peru' => '#CD853F',
  121 + 'pink' => '#FFC0CB',
  122 + 'plum' => '#DDA0DD',
  123 + 'powderblue' => '#B0E0E6',
  124 + 'purple' => '#800080',
  125 + 'rebeccapurple' => '#663399',
  126 + 'red' => '#FF0000',
  127 + 'rosybrown' => '#BC8F8F',
  128 + 'royalblue' => '#4169E1',
  129 + 'saddlebrown' => '#8B4513',
  130 + 'salmon' => '#FA8072',
  131 + 'sandybrown' => '#F4A460',
  132 + 'seagreen' => '#2E8B57',
  133 + 'seashell' => '#FFF5EE',
  134 + 'sienna' => '#A0522D',
21 'silver' => '#C0C0C0', 135 'silver' => '#C0C0C0',
22 - 'gray' => '#808080', 136 + 'skyblue' => '#87CEEB',
  137 + 'slateblue' => '#6A5ACD',
  138 + 'slategray' => '#708090',
  139 + 'slategrey' => '#708090',
  140 + 'snow' => '#FFFAFA',
  141 + 'springgreen' => '#00FF7F',
  142 + 'steelblue' => '#4682B4',
  143 + 'tan' => '#D2B48C',
  144 + 'teal' => '#008080',
  145 + 'thistle' => '#D8BFD8',
  146 + 'tomato' => '#FF6347',
  147 + 'turquoise' => '#40E0D0',
  148 + 'violet' => '#EE82EE',
  149 + 'wheat' => '#F5DEB3',
  150 + 'white' => '#FFFFFF',
  151 + 'whitesmoke' => '#F5F5F5',
  152 + 'yellow' => '#FFFF00',
  153 + 'yellowgreen' => '#9ACD32'
23 ) 154 )
24 --DESCRIPTION-- 155 --DESCRIPTION--
25 156
@@ -118,7 +118,7 @@ class HTMLPurifier_EntityParser @@ -118,7 +118,7 @@ class HTMLPurifier_EntityParser
118 $entity = $matches[0]; 118 $entity = $matches[0];
119 $hex_part = @$matches[1]; 119 $hex_part = @$matches[1];
120 $dec_part = @$matches[2]; 120 $dec_part = @$matches[2];
121 - $named_part = empty($matches[3]) ? @$matches[4] : $matches[3]; 121 + $named_part = empty($matches[3]) ? (empty($matches[4]) ? "" : $matches[4]) : $matches[3];
122 if ($hex_part !== NULL && $hex_part !== "") { 122 if ($hex_part !== NULL && $hex_part !== "") {
123 return HTMLPurifier_Encoder::unichr(hexdec($hex_part)); 123 return HTMLPurifier_Encoder::unichr(hexdec($hex_part));
124 } elseif ($dec_part !== NULL && $dec_part !== "") { 124 } elseif ($dec_part !== NULL && $dec_part !== "") {
@@ -23,13 +23,13 @@ class HTMLPurifier_HTMLModule_SafeScripting extends HTMLPurifier_HTMLModule @@ -23,13 +23,13 @@ class HTMLPurifier_HTMLModule_SafeScripting extends HTMLPurifier_HTMLModule
23 $script = $this->addElement( 23 $script = $this->addElement(
24 'script', 24 'script',
25 'Inline', 25 'Inline',
26 - 'Empty', 26 + 'Optional:', // Not `Empty` to not allow to autoclose the <script /> tag @see https://www.w3.org/TR/html4/interact/scripts.html
27 null, 27 null,
28 array( 28 array(
29 // While technically not required by the spec, we're forcing 29 // While technically not required by the spec, we're forcing
30 // it to this value. 30 // it to this value.
31 'type' => 'Enum#text/javascript', 31 'type' => 'Enum#text/javascript',
32 - 'src*' => new HTMLPurifier_AttrDef_Enum(array_keys($allowed)) 32 + 'src*' => new HTMLPurifier_AttrDef_Enum(array_keys($allowed), /*case sensitive*/ true)
33 ) 33 )
34 ); 34 );
35 $script->attr_transform_pre[] = 35 $script->attr_transform_pre[] =
@@ -8,4 +8,6 @@ $messages = array( @@ -8,4 +8,6 @@ $messages = array(
8 'HTMLPurifier' => 'HTML Purifier X' 8 'HTMLPurifier' => 'HTML Purifier X'
9 ); 9 );
10 10
  11 +$errorNames = array();
  12 +
11 // vim: et sw=4 sts=4 13 // vim: et sw=4 sts=4
@@ -9,4 +9,6 @@ $messages = array( @@ -9,4 +9,6 @@ $messages = array(
9 'HTMLPurifier' => 'HTML Purifier XNone' 9 'HTMLPurifier' => 'HTML Purifier XNone'
10 ); 10 );
11 11
  12 +$errorNames = array();
  13 +
12 // vim: et sw=4 sts=4 14 // vim: et sw=4 sts=4
@@ -68,8 +68,13 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer @@ -68,8 +68,13 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer
68 $doc = new DOMDocument(); 68 $doc = new DOMDocument();
69 $doc->encoding = 'UTF-8'; // theoretically, the above has this covered 69 $doc->encoding = 'UTF-8'; // theoretically, the above has this covered
70 70
  71 + $options = 0;
  72 + if ($config->get('Core.AllowParseManyTags') && defined('LIBXML_PARSEHUGE')) {
  73 + $options |= LIBXML_PARSEHUGE;
  74 + }
  75 +
71 set_error_handler(array($this, 'muteErrorHandler')); 76 set_error_handler(array($this, 'muteErrorHandler'));
72 - $doc->loadHTML($html); 77 + $doc->loadHTML($html, $options);
73 restore_error_handler(); 78 restore_error_handler();
74 79
75 $body = $doc->getElementsByTagName('html')->item(0)-> // <html> 80 $body = $doc->getElementsByTagName('html')->item(0)-> // <html>
@@ -133,11 +138,11 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer @@ -133,11 +138,11 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer
133 */ 138 */
134 protected function getTagName($node) 139 protected function getTagName($node)
135 { 140 {
136 - if (property_exists($node, 'tagName')) { 141 + if (isset($node->tagName)) {
137 return $node->tagName; 142 return $node->tagName;
138 - } else if (property_exists($node, 'nodeName')) { 143 + } else if (isset($node->nodeName)) {
139 return $node->nodeName; 144 return $node->nodeName;
140 - } else if (property_exists($node, 'localName')) { 145 + } else if (isset($node->localName)) {
141 return $node->localName; 146 return $node->localName;
142 } 147 }
143 return null; 148 return null;
@@ -150,11 +155,11 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer @@ -150,11 +155,11 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer
150 */ 155 */
151 protected function getData($node) 156 protected function getData($node)
152 { 157 {
153 - if (property_exists($node, 'data')) { 158 + if (isset($node->data)) {
154 return $node->data; 159 return $node->data;
155 - } else if (property_exists($node, 'nodeValue')) { 160 + } else if (isset($node->nodeValue)) {
156 return $node->nodeValue; 161 return $node->nodeValue;
157 - } else if (property_exists($node, 'textContent')) { 162 + } else if (isset($node->textContent)) {
158 return $node->textContent; 163 return $node->textContent;
159 } 164 }
160 return null; 165 return null;
@@ -48,7 +48,7 @@ class HTMLPurifier_Printer_ConfigForm extends HTMLPurifier_Printer @@ -48,7 +48,7 @@ class HTMLPurifier_Printer_ConfigForm extends HTMLPurifier_Printer
48 $this->compress = $compress; 48 $this->compress = $compress;
49 // initialize sub-printers 49 // initialize sub-printers
50 $this->fields[0] = new HTMLPurifier_Printer_ConfigForm_default(); 50 $this->fields[0] = new HTMLPurifier_Printer_ConfigForm_default();
51 - $this->fields[HTMLPurifier_VarParser::BOOL] = new HTMLPurifier_Printer_ConfigForm_bool(); 51 + $this->fields[HTMLPurifier_VarParser::C_BOOL] = new HTMLPurifier_Printer_ConfigForm_bool();
52 } 52 }
53 53
54 /** 54 /**
@@ -339,7 +339,7 @@ class HTMLPurifier_Printer_ConfigForm_default extends HTMLPurifier_Printer @@ -339,7 +339,7 @@ class HTMLPurifier_Printer_ConfigForm_default extends HTMLPurifier_Printer
339 $value = ''; 339 $value = '';
340 } 340 }
341 } 341 }
342 - if ($type === HTMLPurifier_VarParser::MIXED) { 342 + if ($type === HTMLPurifier_VarParser::C_MIXED) {
343 return 'Not supported'; 343 return 'Not supported';
344 $value = serialize($value); 344 $value = serialize($value);
345 } 345 }
@@ -7,34 +7,34 @@ @@ -7,34 +7,34 @@
7 class HTMLPurifier_VarParser 7 class HTMLPurifier_VarParser
8 { 8 {
9 9
10 - const STRING = 1; 10 + const C_STRING = 1;
11 const ISTRING = 2; 11 const ISTRING = 2;
12 const TEXT = 3; 12 const TEXT = 3;
13 const ITEXT = 4; 13 const ITEXT = 4;
14 - const INT = 5;  
15 - const FLOAT = 6;  
16 - const BOOL = 7; 14 + const C_INT = 5;
  15 + const C_FLOAT = 6;
  16 + const C_BOOL = 7;
17 const LOOKUP = 8; 17 const LOOKUP = 8;
18 const ALIST = 9; 18 const ALIST = 9;
19 const HASH = 10; 19 const HASH = 10;
20 - const MIXED = 11; 20 + const C_MIXED = 11;
21 21
22 /** 22 /**
23 * Lookup table of allowed types. Mainly for backwards compatibility, but 23 * Lookup table of allowed types. Mainly for backwards compatibility, but
24 * also convenient for transforming string type names to the integer constants. 24 * also convenient for transforming string type names to the integer constants.
25 */ 25 */
26 public static $types = array( 26 public static $types = array(
27 - 'string' => self::STRING, 27 + 'string' => self::C_STRING,
28 'istring' => self::ISTRING, 28 'istring' => self::ISTRING,
29 'text' => self::TEXT, 29 'text' => self::TEXT,
30 'itext' => self::ITEXT, 30 'itext' => self::ITEXT,
31 - 'int' => self::INT,  
32 - 'float' => self::FLOAT,  
33 - 'bool' => self::BOOL, 31 + 'int' => self::C_INT,
  32 + 'float' => self::C_FLOAT,
  33 + 'bool' => self::C_BOOL,
34 'lookup' => self::LOOKUP, 34 'lookup' => self::LOOKUP,
35 'list' => self::ALIST, 35 'list' => self::ALIST,
36 'hash' => self::HASH, 36 'hash' => self::HASH,
37 - 'mixed' => self::MIXED 37 + 'mixed' => self::C_MIXED
38 ); 38 );
39 39
40 /** 40 /**
@@ -42,7 +42,7 @@ class HTMLPurifier_VarParser @@ -42,7 +42,7 @@ class HTMLPurifier_VarParser
42 * allowed value lists. 42 * allowed value lists.
43 */ 43 */
44 public static $stringTypes = array( 44 public static $stringTypes = array(
45 - self::STRING => true, 45 + self::C_STRING => true,
46 self::ISTRING => true, 46 self::ISTRING => true,
47 self::TEXT => true, 47 self::TEXT => true,
48 self::ITEXT => true, 48 self::ITEXT => true,
@@ -74,7 +74,7 @@ class HTMLPurifier_VarParser @@ -74,7 +74,7 @@ class HTMLPurifier_VarParser
74 // These are basic checks, to make sure nothing horribly wrong 74 // These are basic checks, to make sure nothing horribly wrong
75 // happened in our implementations. 75 // happened in our implementations.
76 switch ($type) { 76 switch ($type) {
77 - case (self::STRING): 77 + case (self::C_STRING):
78 case (self::ISTRING): 78 case (self::ISTRING):
79 case (self::TEXT): 79 case (self::TEXT):
80 case (self::ITEXT): 80 case (self::ITEXT):
@@ -85,17 +85,17 @@ class HTMLPurifier_VarParser @@ -85,17 +85,17 @@ class HTMLPurifier_VarParser
85 $var = strtolower($var); 85 $var = strtolower($var);
86 } 86 }
87 return $var; 87 return $var;
88 - case (self::INT): 88 + case (self::C_INT):
89 if (!is_int($var)) { 89 if (!is_int($var)) {
90 break; 90 break;
91 } 91 }
92 return $var; 92 return $var;
93 - case (self::FLOAT): 93 + case (self::C_FLOAT):
94 if (!is_float($var)) { 94 if (!is_float($var)) {
95 break; 95 break;
96 } 96 }
97 return $var; 97 return $var;
98 - case (self::BOOL): 98 + case (self::C_BOOL):
99 if (!is_bool($var)) { 99 if (!is_bool($var)) {
100 break; 100 break;
101 } 101 }
@@ -119,7 +119,7 @@ class HTMLPurifier_VarParser @@ -119,7 +119,7 @@ class HTMLPurifier_VarParser
119 } 119 }
120 } 120 }
121 return $var; 121 return $var;
122 - case (self::MIXED): 122 + case (self::C_MIXED):
123 return $var; 123 return $var;
124 default: 124 default:
125 $this->errorInconsistent(get_class($this), $type); 125 $this->errorInconsistent(get_class($this), $type);
@@ -23,23 +23,23 @@ class HTMLPurifier_VarParser_Flexible extends HTMLPurifier_VarParser @@ -23,23 +23,23 @@ class HTMLPurifier_VarParser_Flexible extends HTMLPurifier_VarParser
23 // Note: if code "breaks" from the switch, it triggers a generic 23 // Note: if code "breaks" from the switch, it triggers a generic
24 // exception to be thrown. Specific errors can be specifically 24 // exception to be thrown. Specific errors can be specifically
25 // done here. 25 // done here.
26 - case self::MIXED: 26 + case self::C_MIXED:
27 case self::ISTRING: 27 case self::ISTRING:
28 - case self::STRING: 28 + case self::C_STRING:
29 case self::TEXT: 29 case self::TEXT:
30 case self::ITEXT: 30 case self::ITEXT:
31 return $var; 31 return $var;
32 - case self::INT: 32 + case self::C_INT:
33 if (is_string($var) && ctype_digit($var)) { 33 if (is_string($var) && ctype_digit($var)) {
34 $var = (int)$var; 34 $var = (int)$var;
35 } 35 }
36 return $var; 36 return $var;
37 - case self::FLOAT: 37 + case self::C_FLOAT:
38 if ((is_string($var) && is_numeric($var)) || is_int($var)) { 38 if ((is_string($var) && is_numeric($var)) || is_int($var)) {
39 $var = (float)$var; 39 $var = (float)$var;
40 } 40 }
41 return $var; 41 return $var;
42 - case self::BOOL: 42 + case self::C_BOOL:
43 if (is_int($var) && ($var === 0 || $var === 1)) { 43 if (is_int($var) && ($var === 0 || $var === 1)) {
44 $var = (bool)$var; 44 $var = (bool)$var;
45 } elseif (is_string($var)) { 45 } elseif (is_string($var)) {
1 -Deny from all 1 +<IfModule mod_authz_core.c>
  2 + Require all denied
  3 +</IfModule>
  4 +
  5 +<IfModule !mod_authz_core.c>
  6 + Deny from all
  7 +</>
1 -#!/usr/bin/php  
2 -<?php  
3 -  
4 -chdir(dirname(__FILE__));  
5 -require_once 'common.php';  
6 -assertCli();  
7 -  
8 -/**  
9 - * @file  
10 - * Runs all generation/flush cache scripts to ensure that somewhat volatile  
11 - * generated files are up-to-date.  
12 - */  
13 -  
14 -function e($cmd)  
15 -{  
16 - echo "\$ $cmd\n";  
17 - passthru($cmd, $status);  
18 - echo "\n";  
19 - if ($status) exit($status);  
20 -}  
21 -  
22 -$php = empty($_SERVER['argv'][1]) ? 'php' : $_SERVER['argv'][1];  
23 -  
24 -e($php . ' generate-includes.php');  
25 -e($php . ' generate-schema-cache.php');  
26 -e($php . ' flush-definition-cache.php');  
27 -e($php . ' generate-standalone.php');  
28 -e($php . ' config-scanner.php');  
29 -  
30 -// vim: et sw=4 sts=4  
  1 +#!/bin/bash
  2 +set -ex
  3 +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
  4 +php "$DIR/generate-includes.php"
  5 +php "$DIR/generate-schema-cache.php"
  6 +php "$DIR/flush-definition-cache.php"
  7 +php "$DIR/generate-standalone.php"
  8 +php "$DIR/config-scanner.php"
1 -#!/usr/bin/php  
2 -<?php  
3 -  
4 -chdir(dirname(__FILE__));  
5 -require_once 'common.php';  
6 -assertCli();  
7 -  
8 -/**  
9 - * @file  
10 - * Converts all instances of $config->set and $config->get to the new  
11 - * format, as described by docs/dev-config-bcbreaks.txt  
12 - */  
13 -  
14 -$FS = new FSTools();  
15 -chdir(dirname(__FILE__) . '/..');  
16 -$raw_files = $FS->globr('.', '*.php');  
17 -foreach ($raw_files as $file) {  
18 - $file = substr($file, 2); // rm leading './'  
19 - if (strpos($file, 'library/standalone/') === 0) continue;  
20 - if (strpos($file, 'maintenance/update-config.php') === 0) continue;  
21 - if (strpos($file, 'test-settings.php') === 0) continue;  
22 - if (substr_count($file, '.') > 1) continue; // rm meta files  
23 - // process the file  
24 - $contents = file_get_contents($file);  
25 - $contents = preg_replace(  
26 - "#config->(set|get)\('(.+?)', '(.+?)'#",  
27 - "config->\\1('\\2.\\3'",  
28 - $contents  
29 - );  
30 - if ($contents === '') continue;  
31 - file_put_contents($file, $contents);  
32 -}  
33 -  
34 -// vim: et sw=4 sts=4  
@@ -53,5 +53,6 @@ $config->set('Core.Encoding', $GLOBALS['PHORUM']['DATA']['CHARSET']); // we'll c @@ -53,5 +53,6 @@ $config->set('Core.Encoding', $GLOBALS['PHORUM']['DATA']['CHARSET']); // we'll c
53 if (strtolower($GLOBALS['PHORUM']['DATA']['CHARSET']) !== 'utf-8') { 53 if (strtolower($GLOBALS['PHORUM']['DATA']['CHARSET']) !== 'utf-8') {
54 $config->set('Core.EscapeNonASCIICharacters', true); 54 $config->set('Core.EscapeNonASCIICharacters', true);
55 } 55 }
  56 +$config->set('Core.AllowParseManyTags', false);
56 57
57 // vim: et sw=4 sts=4 58 // vim: et sw=4 sts=4
1 -<?php  
2 -  
3 -// Tags releases  
4 -  
5 -if (php_sapi_name() != 'cli') {  
6 - echo 'Release script cannot be called from web-browser.';  
7 - exit;  
8 -}  
9 -  
10 -require 'svn.php';  
11 -  
12 -$svn_info = my_svn_info('.');  
13 -  
14 -$version = trim(file_get_contents('VERSION'));  
15 -  
16 -$trunk_url = $svn_info['Repository Root'] . '/htmlpurifier/trunk';  
17 -$trunk_tag_url = $svn_info['Repository Root'] . '/htmlpurifier/tags/' . $version;  
18 -  
19 -echo "Tagging trunk to tags/$version...";  
20 -passthru("svn copy --message \"Tag $version release.\" $trunk_url $trunk_tag_url");  
21 -  
22 -// vim: et sw=4 sts=4  
@@ -102,7 +102,7 @@ if (!$c) { @@ -102,7 +102,7 @@ if (!$c) {
102 } 102 }
103 file_put_contents('library/HTMLPurifier/Config.php', $config_c); 103 file_put_contents('library/HTMLPurifier/Config.php', $config_c);
104 104
105 -passthru('php maintenance/flush.php'); 105 +passthru('maintenance/flush.sh');
106 106
107 if ($is_dev) echo "Review changes, write something in WHATSNEW and FOCUS, and then commit with log 'Release $version.'" . PHP_EOL; 107 if ($is_dev) echo "Review changes, write something in WHATSNEW and FOCUS, and then commit with log 'Release $version.'" . PHP_EOL;
108 else echo "Numbers updated to dev, no other modifications necessary!"; 108 else echo "Numbers updated to dev, no other modifications necessary!";
@@ -8,6 +8,13 @@ and this project adheres to [Semantic Versioning](https://semver.org). @@ -8,6 +8,13 @@ and this project adheres to [Semantic Versioning](https://semver.org).
8 ## [Unreleased] 8 ## [Unreleased]
9 9
10 10
  11 +## [1.8.2] - 2019-07-08
  12 +
  13 +### Fixed
  14 +
  15 +- Uncaught error when opening ods file and properties aren't defined - [Issue #1047](https://github.com/PHPOffice/PhpSpreadsheet/issues/1047)
  16 +- Xlsx Reader Cell datavalidations bug - [PR #1052](https://github.com/PHPOffice/PhpSpreadsheet/pull/1052)
  17 +
11 ## [1.8.1] - 2019-07-02 18 ## [1.8.1] - 2019-07-02
12 19
13 ### Fixed 20 ### Fixed
@@ -58,21 +58,6 @@ abstract class BaseReader implements IReader @@ -58,21 +58,6 @@ abstract class BaseReader implements IReader
58 public function __construct() 58 public function __construct()
59 { 59 {
60 $this->readFilter = new DefaultReadFilter(); 60 $this->readFilter = new DefaultReadFilter();
61 -  
62 - // A fatal error will bypass the destructor, so we register a shutdown here  
63 - register_shutdown_function([$this, '__destruct']);  
64 - }  
65 -  
66 - private function shutdown()  
67 - {  
68 - if ($this->securityScanner !== null) {  
69 - $this->securityScanner = null;  
70 - }  
71 - }  
72 -  
73 - public function __destruct()  
74 - {  
75 - $this->shutdown();  
76 } 61 }
77 62
78 public function getReadDataOnly() 63 public function getReadDataOnly()
@@ -146,7 +131,7 @@ abstract class BaseReader implements IReader @@ -146,7 +131,7 @@ abstract class BaseReader implements IReader
146 return $this; 131 return $this;
147 } 132 }
148 133
149 - public function getSecuritySCanner() 134 + public function getSecurityScanner()
150 { 135 {
151 if (property_exists($this, 'securityScanner')) { 136 if (property_exists($this, 'securityScanner')) {
152 return $this->securityScanner; 137 return $this->securityScanner;
@@ -20,13 +20,13 @@ class Properties @@ -20,13 +20,13 @@ class Properties
20 $officeProperty = $xml->children($namespacesMeta['office']); 20 $officeProperty = $xml->children($namespacesMeta['office']);
21 foreach ($officeProperty as $officePropertyData) { 21 foreach ($officeProperty as $officePropertyData) {
22 /** @var \SimpleXMLElement $officePropertyData */ 22 /** @var \SimpleXMLElement $officePropertyData */
23 - $officePropertiesDC = []; 23 + $officePropertiesDC = (object) [];
24 if (isset($namespacesMeta['dc'])) { 24 if (isset($namespacesMeta['dc'])) {
25 $officePropertiesDC = $officePropertyData->children($namespacesMeta['dc']); 25 $officePropertiesDC = $officePropertyData->children($namespacesMeta['dc']);
26 } 26 }
27 $this->setCoreProperties($docProps, $officePropertiesDC); 27 $this->setCoreProperties($docProps, $officePropertiesDC);
28 28
29 - $officePropertyMeta = []; 29 + $officePropertyMeta = (object) [];
30 if (isset($namespacesMeta['dc'])) { 30 if (isset($namespacesMeta['dc'])) {
31 $officePropertyMeta = $officePropertyData->children($namespacesMeta['meta']); 31 $officePropertyMeta = $officePropertyData->children($namespacesMeta['meta']);
32 } 32 }
@@ -25,7 +25,7 @@ class XmlScanner @@ -25,7 +25,7 @@ class XmlScanner
25 $this->disableEntityLoaderCheck(); 25 $this->disableEntityLoaderCheck();
26 26
27 // A fatal error will bypass the destructor, so we register a shutdown here 27 // A fatal error will bypass the destructor, so we register a shutdown here
28 - register_shutdown_function([$this, '__destruct']); 28 + register_shutdown_function([__CLASS__, 'shutdown']);
29 } 29 }
30 30
31 public static function getInstance(Reader\IReader $reader) 31 public static function getInstance(Reader\IReader $reader)
@@ -72,16 +72,17 @@ class XmlScanner @@ -72,16 +72,17 @@ class XmlScanner
72 } 72 }
73 } 73 }
74 74
75 - private function shutdown() 75 + public static function shutdown()
76 { 76 {
77 if (self::$libxmlDisableEntityLoaderValue !== null) { 77 if (self::$libxmlDisableEntityLoaderValue !== null) {
78 libxml_disable_entity_loader(self::$libxmlDisableEntityLoaderValue); 78 libxml_disable_entity_loader(self::$libxmlDisableEntityLoaderValue);
  79 + self::$libxmlDisableEntityLoaderValue = null;
79 } 80 }
80 } 81 }
81 82
82 public function __destruct() 83 public function __destruct()
83 { 84 {
84 - $this->shutdown(); 85 + self::shutdown();
85 } 86 }
86 87
87 public function setAdditionalCallback(callable $callback) 88 public function setAdditionalCallback(callable $callback)
@@ -93,13 +94,13 @@ class XmlScanner @@ -93,13 +94,13 @@ class XmlScanner
93 { 94 {
94 $pattern = '/encoding="(.*?)"/'; 95 $pattern = '/encoding="(.*?)"/';
95 $result = preg_match($pattern, $xml, $matches); 96 $result = preg_match($pattern, $xml, $matches);
96 - $charset = $result ? $matches[1] : 'UTF-8'; 97 + $charset = strtoupper($result ? $matches[1] : 'UTF-8');
97 98
98 if ($charset !== 'UTF-8') { 99 if ($charset !== 'UTF-8') {
99 $xml = mb_convert_encoding($xml, 'UTF-8', $charset); 100 $xml = mb_convert_encoding($xml, 'UTF-8', $charset);
100 101
101 $result = preg_match($pattern, $xml, $matches); 102 $result = preg_match($pattern, $xml, $matches);
102 - $charset = $result ? $matches[1] : 'UTF-8'; 103 + $charset = strtoupper($result ? $matches[1] : 'UTF-8');
103 if ($charset !== 'UTF-8') { 104 if ($charset !== 'UTF-8') {
104 throw new Reader\Exception('Suspicious Double-encoded XML, spreadsheet file load() aborted to prevent XXE/XEE attacks'); 105 throw new Reader\Exception('Suspicious Double-encoded XML, spreadsheet file load() aborted to prevent XXE/XEE attacks');
105 } 106 }
@@ -19,7 +19,7 @@ class DataValidations @@ -19,7 +19,7 @@ class DataValidations
19 19
20 public function load() 20 public function load()
21 { 21 {
22 - foreach ($this->worksheetXml->dataValidation as $dataValidation) { 22 + foreach ($this->worksheetXml->dataValidations->dataValidation as $dataValidation) {
23 // Uppercase coordinate 23 // Uppercase coordinate
24 $range = strtoupper($dataValidation['sqref']); 24 $range = strtoupper($dataValidation['sqref']);
25 $rangeSet = explode(' ', $range); 25 $rangeSet = explode(' ', $range);
  1 +*.phar
  2 +*.zip
  3 +build/artifacts
  4 +phpunit.xml
  5 +phpunit.functional.xml
  6 +.DS_Store
  7 +.swp
  8 +.build
  9 +composer.lock
  10 +vendor
  11 +src/package.xml
  12 +.idea/
  1 +filter:
  2 + excluded_paths: [tests/*]
  3 +checks:
  4 + php:
  5 + code_rating: true
  6 + remove_extra_empty_lines: true
  7 + remove_php_closing_tag: true
  8 + remove_trailing_whitespace: true
  9 + fix_use_statements:
  10 + remove_unused: true
  11 + preserve_multiple: false
  12 + preserve_blanklines: true
  13 + order_alphabetically: true
  14 + fix_php_opening_tag: true
  15 + fix_linefeed: true
  16 + fix_line_ending: true
  17 + fix_identation_4spaces: true
  18 + fix_doc_comments: true
  19 +tools:
  20 + external_code_coverage:
  21 + timeout: 1200
  22 + runs: 3
  23 + php_analyzer: true
  24 + php_code_coverage: false
  25 + php_code_sniffer:
  26 + config:
  27 + standard: PSR2
  28 + filter:
  29 + paths: ['src']
  30 + php_loc:
  31 + enabled: true
  32 + excluded_dirs: [vendor, tests]
  33 + php_cpd:
  34 + enabled: true
  35 + excluded_dirs: [vendor, tests]
  1 +sudo: false
  2 +language: php
  3 +
  4 +php:
  5 + - 5.4
  6 + - 5.5
  7 + - 5.6
  8 + - 7.0
  9 +
  10 +before_script:
  11 + - export QINIU_TEST_ENV="travis"
  12 + - travis_retry composer self-update
  13 + - travis_retry composer install --no-interaction --prefer-source --dev
  14 +
  15 +script:
  16 + - ./vendor/bin/phpcs --standard=PSR2 src
  17 + - ./vendor/bin/phpcs --standard=PSR2 examples
  18 + - ./vendor/bin/phpcs --standard=PSR2 tests
  19 + - ./vendor/bin/phpunit --coverage-text --coverage-clover=coverage.clover tests/Qiniu/Tests/
  20 +
  21 +after_script:
  22 + - wget https://scrutinizer-ci.com/ocular.phar
  23 + - php ocular.phar code-coverage:upload --format=php-clover coverage.clover
  24 +
  25 +env:
  26 + global:
  27 + - secure: "V9BsntXQZwvO9EOD6itzaae2uq+GemzyTUTxMTJx1/jFoUNpCU2O2UAgjA2XSEr5sgci0KWDV4Krbzv3EBB4uplOFLMI3w32256UHbT9E0x3YjhfPJZk68MH1iS1be7X81LDHON7yveavK8987s3qzjeUcbfLSPgccT+cvf7+dc="
  28 + - QINIU_ACCESS_KEY=vHg2e7nOh7Jsucv2Azr5FH6omPgX22zoJRWa0FN5
  1 +# Changelog
  2 +
  3 +## 7.2.7 (2018-11-06)
  4 +* 添加 QVM 内网上传到 KODO 的 zone 设置
  5 +
  6 +## 7.2.6 (2018-05-18)
  7 +* 修复rs,rsf在不同机房默认的https域名
  8 +
  9 +## 7.2.5 (2018-05-10)
  10 +* 修复表单上传中多余的参数checkCrc导致的fname错位问题
  11 +
  12 +## 7.2.4 (2018-05-09)
  13 +### 增加
  14 +* 连麦功能
  15 +
  16 +## 7.2.3 (2018-01-20)
  17 +### 增加
  18 +* 新加坡机房
  19 +### 修正
  20 +* 获取域名的入口域名
  21 +* http回复头部兼容大小写
  22 +
  23 +## 7.2.2 (2017-11-06)
  24 +### 增加
  25 +* Qiniu算法的鉴权方法
  26 +
  27 +## 7.1.4 (2017-06-21)
  28 +### 增加
  29 +* cdn 文件/目录 刷新
  30 +* cdn 获取 流量/带宽
  31 +* cdn 获取域名的访问日志列表
  32 +* cdn 对资源链接进行时间戳防盗链签名
  33 +
  34 +## 7.1.3 (2016-11-18)
  35 +### 增加
  36 +* move, copy操作增加force参数
  37 +
  38 +## 7.1.2 (2016-11-12)
  39 +### 修正
  40 +* 明确抛出获取各区域域名失败时的报错
  41 +
  42 +## 7.1.1 (2016-11-02)
  43 +### 修正
  44 +* 多区域配置文件存储目录从home修改到tmp目录
  45 +
  46 +
  47 +## 7.1.0 (2016-10-22)
  48 +### 增加
  49 +* 多存储区域的支持
  50 +
  51 +## 7.0.8 (2016-07-19)
  52 +### 增加
  53 +* demo
  54 +* https url 支持
  55 +* deleteAfterDays 策略
  56 +* 添加图片处理链接统一拼接方法 by @SherlockRen
  57 +
  58 +## 7.0.7 (2016-01-12)
  59 +### 修正
  60 +* PersistentFop参数pipeline和notify_url失效
  61 +* resume 模式 close file inputstream
  62 +
  63 +## 7.0.6 (2015-12-05)
  64 +### 修正
  65 +* php7.0 Json 对空字符串解析单元测试报错
  66 +* 开启安全模式或者设置可操作目录树时,设置CURLOPT_FOLLOWLOCATION报错, by @twocabbages
  67 +* fetch 支持不指定key, by @sinkcup
  68 +
  69 +## 7.0.5 (2015-10-29)
  70 +### 增加
  71 +* 增加上传策略最小文件大小限制 fsizeMin
  72 +* 增加常见examples
  73 +
  74 +## 7.0.4 (2015-07-23)
  75 +### 修正
  76 +* 一些地方的严格比较检查
  77 +* resumeupload 备用地址失效
  78 +
  79 +## 7.0.3 (2015-07-10)
  80 +### 修改
  81 +* 多zone 支持
  82 +
  83 +## 7.0.2 (2015-04-18)
  84 +### 修改
  85 +* fetch 接口返回内容调整
  86 +* pfop 接口调整
  87 +
  88 +###修正
  89 +* exception 类调用
  90 +
  91 +## 7.0.1 (2015-03-27)
  92 +### 增加
  93 +* 增加代码注释
  94 +
  95 +## 7.0.0 (2015-02-03)
  96 +
  97 +### 增加
  98 +* 简化上传接口
  99 +* 自动选择断点续上传还是直传
  100 +* 重构代码,接口和内部结构更清晰
  101 +* 改变mime
  102 +* 代码覆盖度报告
  103 +* policy改为array, 便于灵活增加,并加入过期字段检查
  104 +* 文件列表支持目录形式
  105 +* 利用元编程方式支持 fop 和 pfop
  1 +# 贡献代码指南
  2 +
  3 +我们非常欢迎大家来贡献代码,我们会向贡献者致以最诚挚的敬意。
  4 +
  5 +一般可以通过在Github上提交[Pull Request](https://github.com/qiniu/php-sdk)来贡献代码。
  6 +
  7 +## Pull Request要求
  8 +
  9 +- **[PSR-2 编码风格标准](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** 。要通过项目中的code sniffer检查。
  10 +
  11 +- **代码格式** 提交前 请按 ./vendor/bin/phpcbf --standard=PSR2 进行格式化。
  12 +
  13 +- **必须添加测试!** - 如果没有测试(单元测试、集成测试都可以),那么提交的补丁是不会通过的。
  14 +
  15 +- **记得更新文档** - 保证`README.md`以及其他相关文档及时更新,和代码的变更保持一致性。
  16 +
  17 +- **考虑我们的发布周期** - 我们的版本号会服从[SemVer v2.0.0](http://semver.org/),我们绝对不会随意变更对外的API。
  18 +
  19 +- **创建feature分支** - 最好不要从你的master分支提交 pull request。
  20 +
  21 +- **一个feature提交一个pull请求** - 如果你的代码变更了多个操作,那就提交多个pull请求吧。
  22 +
  23 +- **清晰的commit历史** - 保证你的pull请求的每次commit操作都是有意义的。如果你开发中需要执行多次的即时commit操作,那么请把它们放到一起再提交pull请求。
  24 +
  25 +## 运行测试
  26 +
  27 +``` bash
  28 +./vendor/bin/phpunit tests/Qiniu/Tests/
  29 +
  30 +```
  1 +The MIT License (MIT)
  2 +
  3 +Copyright (c) 2014 Qiniu, Ltd.<sdk@qiniu.com>
  4 +
  5 +Permission is hereby granted, free of charge, to any person obtaining a copy
  6 +of this software and associated documentation files (the "Software"), to deal
  7 +in the Software without restriction, including without limitation the rights
  8 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9 +copies of the Software, and to permit persons to whom the Software is
  10 +furnished to do so, subject to the following conditions:
  11 +
  12 +The above copyright notice and this permission notice shall be included in all
  13 +copies or substantial portions of the Software.
  14 +
  15 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  21 +SOFTWARE.
  22 +
  1 +# Qiniu Cloud SDK for PHP
  2 +[![doxygen.io](http://doxygen.io/github.com/qiniu/php-sdk/?status.svg)](http://doxygen.io/github.com/qiniu/php-sdk/)
  3 +[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE)
  4 +[![Build Status](https://travis-ci.org/qiniu/php-sdk.svg)](https://travis-ci.org/qiniu/php-sdk)
  5 +[![Latest Stable Version](https://img.shields.io/packagist/v/qiniu/php-sdk.svg)](https://packagist.org/packages/qiniu/php-sdk)
  6 +[![Total Downloads](https://img.shields.io/packagist/dt/qiniu/php-sdk.svg)](https://packagist.org/packages/qiniu/php-sdk)
  7 +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/qiniu/php-sdk/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/qiniu/php-sdk/?branch=master)
  8 +[![Code Coverage](https://scrutinizer-ci.com/g/qiniu/php-sdk/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/qiniu/php-sdk/?branch=master)
  9 +[![Join Chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/qiniu/php-sdk?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
  10 +[![@qiniu on weibo](http://img.shields.io/badge/weibo-%40qiniutek-blue.svg)](http://weibo.com/qiniutek)
  11 +
  12 +## 安装
  13 +
  14 +* 通过composer,这是推荐的方式,可以使用composer.json 声明依赖,或者运行下面的命令。SDK 包已经放到这里 [`qiniu/php-sdk`][install-packagist]
  15 +```bash
  16 +$ composer require qiniu/php-sdk
  17 +```
  18 +* 直接下载安装,SDK 没有依赖其他第三方库,但需要参照 composer的autoloader,增加一个自己的autoloader程序。
  19 +
  20 +## 运行环境
  21 +
  22 +| Qiniu SDK版本 | PHP 版本 |
  23 +|:--------------------:|:---------------------------:|
  24 +| 7.x | cURL extension, 5.3 - 5.6,7.0 |
  25 +| 6.x | cURL extension, 5.2 - 5.6 |
  26 +
  27 +## 使用方法
  28 +
  29 +### 上传
  30 +```php
  31 +use Qiniu\Storage\UploadManager;
  32 +use Qiniu\Auth;
  33 +...
  34 + $upManager = new UploadManager();
  35 + $auth = new Auth($accessKey, $secretKey);
  36 + $token = $auth->uploadToken($bucketName);
  37 + list($ret, $error) = $upManager->put($token, 'formput', 'hello world');
  38 +...
  39 +```
  40 +
  41 +## 测试
  42 +
  43 +``` bash
  44 +$ ./vendor/bin/phpunit tests/Qiniu/Tests/
  45 +```
  46 +
  47 +## 常见问题
  48 +
  49 +- $error保留了请求响应的信息,失败情况下ret 为none, 将$error可以打印出来,提交给我们。
  50 +- API 的使用 demo 可以参考 [单元测试](https://github.com/qiniu/php-sdk/blob/master/tests)
  51 +
  52 +## 代码贡献
  53 +
  54 +详情参考[代码提交指南](https://github.com/qiniu/php-sdk/blob/master/CONTRIBUTING.md)
  55 +
  56 +## 贡献记录
  57 +
  58 +- [所有贡献者](https://github.com/qiniu/php-sdk/contributors)
  59 +
  60 +## 联系我们
  61 +
  62 +- 如果需要帮助,请提交工单(在portal右侧点击咨询和建议提交工单,或者直接向 support@qiniu.com 发送邮件)
  63 +- 如果有什么问题,可以到问答社区提问,[问答社区](http://qiniu.segmentfault.com/)
  64 +- 更详细的文档,见[官方文档站](http://developer.qiniu.com/)
  65 +- 如果发现了bug, 欢迎提交 [issue](https://github.com/qiniu/php-sdk/issues)
  66 +- 如果有功能需求,欢迎提交 [issue](https://github.com/qiniu/php-sdk/issues)
  67 +- 如果要提交代码,欢迎提交 pull request
  68 +- 欢迎关注我们的[微信](http://www.qiniu.com/#weixin) [微博](http://weibo.com/qiniutek),及时获取动态信息。
  69 +
  70 +## 代码许可
  71 +
  72 +The MIT License (MIT).详情见 [License文件](https://github.com/qiniu/php-sdk/blob/master/LICENSE).
  73 +
  74 +[packagist]: http://packagist.org
  75 +[install-packagist]: https://packagist.org/packages/qiniu/php-sdk
  1 +<?php
  2 +
  3 +function classLoader($class)
  4 +{
  5 + $path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
  6 + $file = __DIR__ . '/src/' . $path . '.php';
  7 +
  8 + if (file_exists($file)) {
  9 + require_once $file;
  10 + }
  11 +}
  12 +spl_autoload_register('classLoader');
  13 +
  14 +require_once __DIR__ . '/src/Qiniu/functions.php';
  1 +{
  2 + "name": "qiniu/php-sdk",
  3 + "type": "library",
  4 + "description": "Qiniu Resource (Cloud) Storage SDK for PHP",
  5 + "keywords": ["qiniu", "storage", "sdk", "cloud"],
  6 + "homepage": "http://developer.qiniu.com/",
  7 + "license": "MIT",
  8 + "authors": [
  9 + {
  10 + "name": "Qiniu",
  11 + "email": "sdk@qiniu.com",
  12 + "homepage": "http://www.qiniu.com"
  13 + }
  14 + ],
  15 + "require": {
  16 + "php": ">=5.3.3"
  17 + },
  18 + "require-dev": {
  19 + "phpunit/phpunit": "~4.0",
  20 + "squizlabs/php_codesniffer": "~2.3"
  21 + },
  22 + "autoload": {
  23 + "psr-4": {"Qiniu\\": "src/Qiniu"},
  24 + "files": ["src/Qiniu/functions.php"]
  25 + }
  26 +}
  1 +# Rtc Streaming Cloud Server-Side Library For PHP
  2 +
  3 +## Features
  4 +
  5 +- Appclient
  6 + - [x] 创建房间: client->createApp()
  7 + - [x] 查看房间: client->getApp()
  8 + - [x] 删除房间: client->deleteApp()
  9 + - [x] 生成房间token: client->appToken()
  10 +
  11 +
  12 +
  13 +## Contents
  14 +
  15 +- [Installation](#installation)
  16 +- [Usage](#usage)
  17 + - [Configuration](#configuration)
  18 + - [App](#app)
  19 + - [Create a app](#create-a-app)
  20 + - [Get a app](#get-a-app)
  21 + - [Delete a app](#delete-a-app)
  22 + - [Generate a app token](#generate-a-app-token)
  23 +
  24 +
  25 +## Usage
  26 +
  27 +### App
  28 +
  29 +#### Create a app
  30 +
  31 +```php
  32 +$ak = "gwd_gV4gPKZZsmEOvAuNU1AcumicmuHooTfu64q5";
  33 +$sk = "xxxx";
  34 +$auth = new Auth($ak, $sk);
  35 +$client = new Qiniu\Rtc\AppClient($auth);
  36 +$resp=$client->createApp("901","testApp");
  37 +print_r($resp);
  38 +```
  39 +
  40 +#### Get an app
  41 +
  42 +```php
  43 +$ak = "gwd_gV4gPKZZsmEOvAuNU1AcumicmuHooTfu64q5";
  44 +$sk = "xxxx";
  45 +$auth = new Auth($ak, $sk);
  46 +$client = new Qiniu\Rtc\AppClient($auth);
  47 +$resp=$client->getApp("deq02uhb6");
  48 +print_r($resp);
  49 +```
  50 +
  51 +#### Delete an app
  52 +
  53 +```php
  54 +$ak = "gwd_gV4gPKZZsmEOvAuNU1AcumicmuHooTfu64q5";
  55 +$sk = "xxxx";
  56 +$auth = new Auth($ak, $sk);
  57 +$client = new Qiniu\Rtc\AppClient($auth);
  58 +$resp=$client->deleteApp("deq02uhb6");
  59 +print_r($resp);
  60 +```
  61 +
  62 +#### Generate an app token
  63 +
  64 +```php
  65 +$ak = "gwd_gV4gPKZZsmEOvAuNU1AcumicmuHooTfu64q5";
  66 +$sk = "xxxx";
  67 +$auth = new Auth($ak, $sk);
  68 +$client = new Qiniu\Rtc\AppClient($auth);
  69 +$resp=$client->appToken("deq02uhb6", "lfx", '1111', (time()+3600), 'user');
  70 +print_r($resp);
  71 +```
  1 +<?php
  2 +require_once("../../autoload.php");
  3 +
  4 +use \Qiniu\Auth;
  5 +
  6 +$ak = 'gwd_gV4gPKZZsmEOvAuNU1AcumicmuHooTfu64q5';
  7 +$sk = 'xxxx';
  8 +
  9 +$auth = new Auth($ak, $sk);
  10 +$client = new Qiniu\Rtc\AppClient($auth);
  11 +$hub = 'lfxlive';
  12 +$title = 'lfxl';
  13 +try {
  14 + //创建app
  15 + $resp = $client->createApp($hub, $title, $maxUsers);
  16 + print_r($resp);
  17 + // 获取app状态
  18 + $resp = $client->getApp('dgdl5ge8y');
  19 + print_r($resp);
  20 + //修改app状态
  21 + $mergePublishRtmp = null;
  22 + $mergePublishRtmp['enable'] = true;
  23 + $resp = $client->updateApp('dgdl5ge8y', $hub, $title, $maxUsers, $mergePublishRtmp);
  24 + print_r($resp);
  25 + //删除app
  26 + $resp = $client->deleteApp('dgdl5ge8y');
  27 + print_r($resp);
  28 + //获取房间连麦的成员
  29 + $resp=$client->listUser("dgbfvvzid", 'lfxl');
  30 + print_r($resp);
  31 + //剔除房间的连麦成员
  32 + $resp=$client->kickUser("dgbfvvzid", 'lfx', "qiniu-f6e07b78-4dc8-45fb-a701-a9e158abb8e6");
  33 + print_r($resp);
  34 + // 列举房间
  35 + $resp=$client->listActiveRooms("dgbfvvzid", 'lfx', null, null);
  36 + print_r($resp);
  37 + //鉴权的有效时间: 1个小时.
  38 + $resp = $client->appToken("dgd4vecde", "lfxl", '1111', (time()+3600), 'user');
  39 + print_r($resp);
  40 +} catch (\Exception $e) {
  41 + echo "Error:", $e, "\n";
  42 +}
  1 +<?php
  2 +require_once("../../autoload.php");
  3 +
  4 +use \Qiniu\Auth;
  5 +
  6 +$ak="xxxx";
  7 +$sk="xxxx";
  8 +
  9 +$auth = new Auth($ak, $sk);
  10 +$client = new Qiniu\Sms\Sms($auth);
  11 +
  12 +//发送信息模块
  13 +$template_id="1131792074274775040";
  14 +$mobiles=array("18011111111","18011111111");
  15 +$code = array('code' => 'code' );
  16 +try {
  17 + //发送短信
  18 + $resp = $client->sendMessage($template_id, $mobiles, $code);
  19 + print_r($resp);
  20 +} catch (\Exception $e) {
  21 + echo "Error:", $e, "\n";
  22 +}exit;
  23 +//模板模块
  24 +$name="tstest001";
  25 +$template="tesy001 ${code}";
  26 +$type="notification";
  27 +$description="tstest001";
  28 +$signature_id="1131464448834277376";
  29 +$id="1131810682442883072";
  30 +
  31 +try {
  32 + //创建模板
  33 + $resp = $client->createTemplate($name, $template, $type, $description, $signature_id);
  34 + print_r($resp);
  35 + //查询模板
  36 + $resp = $client->queryTemplate();
  37 + print_r($resp);
  38 + //修改模板
  39 + $resp = $client->updateTemplate($id, $name, $template, $description, $signature_id);
  40 + print_r($resp);
  41 + //删除模板
  42 + $resp = $client->deleteTemplate($id);
  43 + print_r($resp);
  44 +} catch (\Exception $e) {
  45 + echo "Error:", $e, "\n";
  46 +}
  47 +//签名模块
  48 +$signature = 'lfxlive2';
  49 +$source = 'enterprises_and_institutions';
  50 +$pic="/Users/Desktop/sss.jpg";
  51 +$audit_status="passed";
  52 +$page=1;
  53 +$page_size=1;
  54 +$id="1131464448834277376";
  55 +
  56 +try {
  57 + //创建签名
  58 + $resp = $client->createSignature($signature, $source, $pic);
  59 + print_r($resp);
  60 + //查询签名
  61 + $resp = $client->checkSignature($audit_status);
  62 + //修改签名
  63 + $resp = $client->updateSignature($id, $signature, $source, $pic);
  64 + print_r($resp);
  65 + //删除ID
  66 + $resp = $client->deleteSignature($id);
  67 + print_r($resp);
  68 +} catch (\Exception $e) {
  69 + echo "Error:", $e, "\n";
  70 +}
  1 +# examples
  2 +
  3 +这些 examples 旨在帮助你快速了解使用七牛的sdk。这些demo都是可以直接运行的, 但是在运行之前需要填上您自己的参数。
  4 +
  5 +比如:
  6 +
  7 +* `$bucket` 需要填上您想操作的 [bucket名字](http://developer.qiniu.com/docs/v6/api/overview/concepts.html#bucket)
  8 +* `$accessKey` 和 `$secretKey` 可以在我们的[管理后台](https://portal.qiniu.com/setting/key)找到。
  9 +* 在进行`视频转码`, `压缩文件`等异步操作时 需要使用到的队列名称也可以在我们[管理后台](https://portal.qiniu.com/mps/pipeline)新建。
  10 +
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +$name = 'demo';
  15 +$prefix = 'test';
  16 +$delete_after_days = 80;
  17 +$to_line_after_days =70;
  18 +
  19 +list($Info, $err) = $bucketManager->bucketLifecycleRule(
  20 + $bucket,
  21 + $name,
  22 + $prefix,
  23 + $delete_after_days,
  24 + $to_line_after_days
  25 +);
  26 +if ($err) {
  27 + print_r($err);
  28 +} else {
  29 + print_r($Info);
  30 +}
  1 +<?php
  2 +
  3 +require_once __DIR__ . '/../autoload.php';
  4 +
  5 +use \Qiniu\Cdn\CdnManager;
  6 +
  7 +$accessKey = getenv('QINIU_ACCESS_KEY');
  8 +$secretKey = getenv('QINIU_SECRET_KEY');
  9 +
  10 +$auth = new Qiniu\Auth($accessKey, $secretKey);
  11 +$cdnManager = new CdnManager($auth);
  12 +
  13 +//获取流量和带宽数据
  14 +//参考文档:http://developer.qiniu.com/article/fusion/api/traffic-bandwidth.html
  15 +
  16 +$domains = array(
  17 + "javasdk.qiniudn.com",
  18 + "phpsdk.qiniudn.com"
  19 +);
  20 +
  21 +$startDate = "2017-08-20";
  22 +$endDate = "2017-08-21";
  23 +
  24 +//5min or hour or day
  25 +$granularity = "day";
  26 +
  27 +//获取带宽数据
  28 +list($bandwidthData, $getBandwidthErr) = $cdnManager->getBandwidthData(
  29 + $domains,
  30 + $startDate,
  31 + $endDate,
  32 + $granularity
  33 +);
  34 +
  35 +if ($getBandwidthErr != null) {
  36 + var_dump($getBandwidthErr);
  37 +} else {
  38 + echo "get bandwidth data success\n";
  39 + print_r($bandwidthData);
  40 +}
  1 +<?php
  2 +
  3 +require_once __DIR__ . '/../autoload.php';
  4 +
  5 +use \Qiniu\Cdn\CdnManager;
  6 +
  7 +$accessKey = getenv('QINIU_ACCESS_KEY');
  8 +$secretKey = getenv('QINIU_SECRET_KEY');
  9 +
  10 +$auth = new Qiniu\Auth($accessKey, $secretKey);
  11 +$cdnManager = new CdnManager($auth);
  12 +
  13 +//获取流量和带宽数据
  14 +//参考文档:http://developer.qiniu.com/article/fusion/api/traffic-bandwidth.html
  15 +
  16 +$domains = array(
  17 + "javasdk.qiniudn.com",
  18 + "phpsdk.qiniudn.com"
  19 +);
  20 +
  21 +$startDate = "2017-08-20";
  22 +$endDate = "2017-08-21";
  23 +
  24 +//5min or hour or day
  25 +$granularity = "day";
  26 +
  27 +//获取流量数据
  28 +list($fluxData, $getFluxErr) = $cdnManager->getFluxData($domains, $startDate, $endDate, $granularity);
  29 +if ($getFluxErr != null) {
  30 + var_dump($getFluxErr);
  31 +} else {
  32 + echo "get flux data success\n";
  33 + print_r($fluxData);
  34 +}
  1 +<?php
  2 +
  3 +require_once __DIR__ . '/../autoload.php';
  4 +
  5 +use \Qiniu\Cdn\CdnManager;
  6 +
  7 +$accessKey = getenv('QINIU_ACCESS_KEY');
  8 +$secretKey = getenv('QINIU_SECRET_KEY');
  9 +
  10 +$auth = new Qiniu\Auth($accessKey, $secretKey);
  11 +$cdnManager = new CdnManager($auth);
  12 +
  13 +$domains = array(
  14 + "javasdk.qiniudn.com",
  15 + "phpsdk.qiniudn.com"
  16 +);
  17 +
  18 +$logDate = '2017-08-20';
  19 +
  20 +//获取日志下载链接
  21 +//参考文档:http://developer.qiniu.com/article/fusion/api/log.html
  22 +
  23 +list($logListData, $getLogErr) = $cdnManager->getCdnLogList($domains, $logDate);
  24 +if ($getLogErr != null) {
  25 + var_dump($getLogErr);
  26 +} else {
  27 + echo "get cdn log list success\n";
  28 + print_r($logListData);
  29 +}
  1 +<?php
  2 +
  3 +require_once __DIR__ . '/../autoload.php';
  4 +
  5 +use \Qiniu\Cdn\CdnManager;
  6 +
  7 +$accessKey = getenv('QINIU_ACCESS_KEY');
  8 +$secretKey = getenv('QINIU_SECRET_KEY');
  9 +
  10 +$auth = new Qiniu\Auth($accessKey, $secretKey);
  11 +
  12 +//待刷新的文件列表和目录,文件列表最多一次100个,目录最多一次10个
  13 +//参考文档:http://developer.qiniu.com/article/fusion/api/refresh.html
  14 +$urls = array(
  15 + "http://phpsdk.qiniudn.com/qiniu.jpg",
  16 + "http://phpsdk.qiniudn.com/qiniu2.jpg",
  17 +);
  18 +
  19 +//刷新目录需要联系七牛技术支持开通账户权限
  20 +$dirs = array(
  21 + "http://phpsdk.qiniudn.com/test/"
  22 +);
  23 +
  24 +$cdnManager = new CdnManager($auth);
  25 +
  26 +// 目前客户默认没有目录刷新权限,刷新会有400038报错,参考:https://developer.qiniu.com/fusion/api/1229/cache-refresh
  27 +// 需要刷新目录请工单联系技术支持 https://support.qiniu.com/tickets/category
  28 +list($refreshResult, $refreshErr) = $cdnManager->refreshUrlsAndDirs($urls, $dirs);
  29 +if ($refreshErr != null) {
  30 + var_dump($refreshErr);
  31 +} else {
  32 + echo "refresh request sent\n";
  33 + print_r($refreshResult);
  34 +}
  35 +
  36 +//如果只有刷新链接或者目录的需求,可以分布使用
  37 +
  38 +list($refreshResult, $refreshErr) = $cdnManager->refreshUrls($urls);
  39 +if ($refreshErr != null) {
  40 + var_dump($refreshErr);
  41 +} else {
  42 + echo "refresh request sent\n";
  43 + print_r($refreshResult);
  44 +}
  45 +
  46 +list($refreshResult, $refreshErr) = $cdnManager->refreshDirs($dirs);
  47 +if ($refreshErr != null) {
  48 + var_dump($refreshErr);
  49 +} else {
  50 + echo "refresh request sent\n";
  51 + print_r($refreshResult);
  52 +}
  1 +<?php
  2 +
  3 +require_once __DIR__ . '/../autoload.php';
  4 +
  5 +use \Qiniu\Cdn\CdnManager;
  6 +
  7 +//创建时间戳防盗链
  8 +//时间戳防盗链密钥,后台获取
  9 +$encryptKey = 'your_domain_timestamp_antileech_encryptkey';
  10 +
  11 +//带访问协议的域名
  12 +$url1 = 'http://phpsdk.qiniuts.com/24.jpg?avinfo';
  13 +$url2 = 'http://phpsdk.qiniuts.com/24.jpg';
  14 +
  15 +//有效期时间(单位秒)
  16 +$durationInSeconds = 3600;
  17 +
  18 +$signedUrl = CdnManager::createTimestampAntiLeechUrl($url1, $encryptKey, $durationInSeconds);
  19 +print($signedUrl);
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$name = 'xxxx';
  14 +
  15 +list($Info, $err) = $bucketManager->deleteBucket($name);
  16 +if ($err) {
  17 + print_r($err);
  18 +} else {
  19 + print_r($Info);
  20 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +$name = 'demo';
  15 +
  16 +list($Info, $err) = $bucketManager->deleteBucketEvent($bucket, $name);
  17 +if ($err) {
  18 + print_r($err);
  19 +} else {
  20 + print_r($Info);
  21 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +$name = 'demo';
  15 +
  16 +list($Info, $err) = $bucketManager->deleteBucketLifecycleRule($bucket, $name);
  17 +if ($err) {
  18 + print_r($err);
  19 +} else {
  20 + print_r($Info);
  21 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +
  15 +list($Info, $err) = $bucketManager->getBucketEvents($bucket);
  16 +if ($err) {
  17 + print_r($err);
  18 +} else {
  19 + print_r($Info);
  20 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +
  15 +list($Info, $err) = $bucketManager->getBucketLifecycleRules($bucket);
  16 +if ($err) {
  17 + print_r($err);
  18 +} else {
  19 + print_r($Info);
  20 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$region = 'z1';
  14 +
  15 +list($Info, $err) = $bucketManager->listbuckets($region);
  16 +if ($err) {
  17 + print_r($err);
  18 +} else {
  19 + print_r($Info);
  20 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +
  15 +list($Info, $err) = $bucketManager->getBucketQuota($bucket);
  16 +if ($err) {
  17 + print_r($err);
  18 +} else {
  19 + print_r($Info);
  20 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +
  15 +list($Info, $err) = $bucketManager->bucketInfo($bucket);
  16 +if ($err) {
  17 + print_r($err);
  18 +} else {
  19 + print_r($Info);
  20 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$region = 'z1';
  14 +
  15 +list($Info, $err) = $bucketManager->bucketInfos($region);
  16 +if ($err) {
  17 + print_r($err);
  18 +} else {
  19 + print_r($Info);
  20 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +
  15 +list($Info, $err) = $bucketManager->getCorsRules($bucket);
  16 +if ($err) {
  17 + print_r($err);
  18 +} else {
  19 + print_r($Info);
  20 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +// 引入图片处理类
  5 +use Qiniu\Processing\ImageUrlBuilder;
  6 +
  7 +$imageUrlBuilder = new ImageUrlBuilder();
  8 +
  9 +// 要处理图片
  10 +$url = 'http://78re52.com1.z0.glb.clouddn.com/resource/gogopher.jpg';
  11 +$url2 = 'http://78re52.com1.z0.glb.clouddn.com/resource/gogopher.jpg?watermark/1/gravity/SouthEast/dx/0/dy/0/image/'
  12 + . 'aHR0cDovL2Fkcy1jZG4uY2h1Y2h1amllLmNvbS9Ga1R6bnpIY2RLdmRBUFc5cHZZZ3pTc21UY0tB';
  13 +$waterImage = 'http://developer.qiniu.com/resource/logo-2.jpg';
  14 +
  15 +/**
  16 + * 缩略图链接拼接
  17 + *
  18 + * @param string $url 图片链接
  19 + * @param int $mode 缩略模式
  20 + * @param int $width 宽度
  21 + * @param int $height 长度
  22 + * @param string $format 输出类型 [可选]
  23 + * @param int $quality 图片质量 [可选]
  24 + * @param int $interlace 是否支持渐进显示 [可选]
  25 + * @param int $ignoreError 忽略结果 [可选]
  26 + * @return string
  27 + * @link http://developer.qiniu.com/code/v6/api/kodo-api/image/imageview2.html
  28 + * @author Sherlock Ren <sherlock_ren@icloud.com>
  29 + */
  30 +$thumbLink = $imageUrlBuilder->thumbnail($url, 1, 100, 100);
  31 +
  32 +// 函数方式调用 也可拼接多个操作参数 图片+水印
  33 +$thumbLink2 = \Qiniu\thumbnail($url2, 1, 100, 100);
  34 +var_dump($thumbLink, $thumbLink2);
  35 +
  36 +/**
  37 + * 图片水印
  38 + *
  39 + * @param string $url 图片链接
  40 + * @param string $image 水印图片链接
  41 + * @param numeric $dissolve 透明度 [可选]
  42 + * @param string $gravity 水印位置 [可选]
  43 + * @param numeric $dx 横轴边距 [可选]
  44 + * @param numeric $dy 纵轴边距 [可选]
  45 + * @param numeric $watermarkScale 自适应原图的短边比例 [可选]
  46 + * @link http://developer.qiniu.com/code/v6/api/kodo-api/image/watermark.html
  47 + * @return string
  48 + * @author Sherlock Ren <sherlock_ren@icloud.com>
  49 + */
  50 +$waterLink = $imageUrlBuilder->waterImg($url, $waterImage);
  51 +// 函数调用方法
  52 +//$waterLink = \Qiniu\waterImg($url, $waterImage);
  53 +var_dump($waterLink);
  54 +
  55 +/**
  56 + * 文字水印
  57 + *
  58 + * @param string $url 图片链接
  59 + * @param string $text 文字
  60 + * @param string $font 文字字体
  61 + * @param string $fontSize 文字字号
  62 + * @param string $fontColor 文字颜色 [可选]
  63 + * @param numeric $dissolve 透明度 [可选]
  64 + * @param string $gravity 水印位置 [可选]
  65 + * @param numeric $dx 横轴边距 [可选]
  66 + * @param numeric $dy 纵轴边距 [可选]
  67 + * @link http://developer.qiniu.com/code/v6/api/kodo-api/image/watermark.html#text-watermark
  68 + * @return string
  69 + * @author Sherlock Ren <sherlock_ren@icloud.com>
  70 + */
  71 +$textLink = $imageUrlBuilder->waterText($url, '你瞅啥', '微软雅黑', 300);
  72 +// 函数调用方法
  73 +// $textLink = \Qiniu\waterText($url, '你瞅啥', '微软雅黑', 300);
  74 +var_dump($textLink);
  1 +<?php
  2 +
  3 +require_once __DIR__ . '/../autoload.php';
  4 +
  5 +use Qiniu\Auth;
  6 +use Qiniu\Processing\PersistentFop;
  7 +
  8 +$accessKey = 'Access_Key';
  9 +$secretKey = 'Secret_Key';
  10 +$auth = new Auth($accessKey, $secretKey);
  11 +
  12 +// 要转码的文件所在的空间。
  13 +$bucket = 'Bucket_Name';
  14 +
  15 +// 转码是使用的队列名称。 https://portal.qiniu.com/mps/pipeline
  16 +$pipeline = 'pipeline_name';
  17 +
  18 +// 初始化
  19 +$pfop = new PersistentFop($auth, $bucket, $pipeline);
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Processing\PersistentFop;
  5 +
  6 +$pfop = new Qiniu\Processing\PersistentFop(null, null);
  7 +
  8 +// 触发持久化处理后返回的 Id
  9 +$persistentId = 'z1.5b8a48e5856db843bc24cfc3';
  10 +
  11 +// 通过persistentId查询该 触发持久化处理的状态
  12 +list($ret, $err) = $pfop->status($persistentId);
  13 +
  14 +if ($err) {
  15 + print_r($err);
  16 +} else {
  17 + print_r($ret);
  18 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +use Qiniu\Processing\PersistentFop;
  6 +
  7 +// 去我们的portal 后台来获取AK, SK
  8 +$accessKey = getenv('QINIU_ACCESS_KEY');
  9 +$secretKey = getenv('QINIU_SECRET_KEY');
  10 +$bucket = getenv('QINIU_TEST_BUCKET');
  11 +$key = 'qiniu.png';
  12 +
  13 +$auth = new Auth($accessKey, $secretKey);
  14 +// 异步任务的队列, 去后台新建: https://portal.qiniu.com/mps/pipeline
  15 +$pipeline = 'sdktest';
  16 +
  17 +$pfop = new PersistentFop($auth, null);
  18 +
  19 +// 进行zip压缩的url
  20 +$url1 = 'http://phpsdk.qiniudn.com/php-logo.png';
  21 +$url2 = 'http://phpsdk.qiniudn.com/1.png';
  22 +
  23 +//压缩后的key
  24 +$zipKey = 'test.zip';
  25 +
  26 +$fops = 'mkzip/2/url/' . \Qiniu\base64_urlSafeEncode($url1);
  27 +$fops .= '/url/' . \Qiniu\base64_urlSafeEncode($url2);
  28 +$fops .= '|saveas/' . \Qiniu\base64_urlSafeEncode("$bucket:$zipKey");
  29 +
  30 +$notify_url = null;
  31 +$force = false;
  32 +
  33 +list($id, $err) = $pfop->execute($bucket, $key, $fops, $pipeline, $notify_url, $force);
  34 +
  35 +echo "\n====> pfop mkzip result: \n";
  36 +if ($err != null) {
  37 + var_dump($err);
  38 +} else {
  39 + echo "PersistentFop Id: $id\n";
  40 +
  41 + $res = "http://api.qiniu.com/status/get/prefop?id=$id";
  42 + echo "Processing result: $res";
  43 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +use Qiniu\Processing\PersistentFop;
  6 +
  7 +//对已经上传到七牛的视频发起异步转码操作
  8 +$accessKey = getenv('QINIU_ACCESS_KEY');
  9 +$secretKey = getenv('QINIU_SECRET_KEY');
  10 +$bucket = getenv('QINIU_TEST_BUCKET');
  11 +$auth = new Auth($accessKey, $secretKey);
  12 +
  13 +//要转码的文件所在的空间和文件名。
  14 +$key = 'qiniu.mp4';
  15 +
  16 +//转码是使用的队列名称。 https://portal.qiniu.com/mps/pipeline
  17 +$pipeline = 'sdktest';
  18 +
  19 +//转码完成后通知到你的业务服务器。
  20 +$notifyUrl = 'http://375dec79.ngrok.com/notify.php';
  21 +$force = false;
  22 +
  23 +$config = new \Qiniu\Config();
  24 +$config->useHTTPS = true;
  25 +$pfop = new PersistentFop($auth, $config);
  26 +
  27 +//要进行视频截图操作
  28 +$fops = "vframe/jpg/offset/1/w/480/h/360/rotate/90|saveas/" .
  29 + \Qiniu\base64_urlSafeEncode($bucket . ":qiniu_480x360.jpg");
  30 +
  31 +list($id, $err) = $pfop->execute($bucket, $key, $fops, $pipeline, $notifyUrl, $force);
  32 +echo "\n====> pfop avthumb result: \n";
  33 +if ($err != null) {
  34 + var_dump($err);
  35 +} else {
  36 + echo "PersistentFop Id: $id\n";
  37 +}
  38 +
  39 +//查询转码的进度和状态
  40 +list($ret, $err) = $pfop->status($id);
  41 +echo "\n====> pfop avthumb status: \n";
  42 +if ($err != null) {
  43 + var_dump($err);
  44 +} else {
  45 + var_dump($ret);
  46 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +use Qiniu\Processing\PersistentFop;
  6 +
  7 +//对已经上传到七牛的视频发起异步转码操作
  8 +
  9 +$accessKey = getenv('QINIU_ACCESS_KEY');
  10 +$secretKey = getenv('QINIU_SECRET_KEY');
  11 +$bucket = getenv('QINIU_TEST_BUCKET');
  12 +
  13 +$auth = new Auth($accessKey, $secretKey);
  14 +
  15 +//要转码的文件所在的空间和文件名。
  16 +$key = 'qiniu.mp4';
  17 +
  18 +//转码是使用的队列名称。 https://portal.qiniu.com/mps/pipeline
  19 +$pipeline = 'sdktest';
  20 +$force = false;
  21 +
  22 +//转码完成后通知到你的业务服务器。
  23 +$notifyUrl = 'http://375dec79.ngrok.com/notify.php';
  24 +$config = new \Qiniu\Config();
  25 +//$config->useHTTPS=true;
  26 +
  27 +$pfop = new PersistentFop($auth, $config);
  28 +
  29 +//要进行转码的转码操作。 http://developer.qiniu.com/docs/v6/api/reference/fop/av/avthumb.html
  30 +$fops = "avthumb/mp4/s/640x360/vb/1.4m|saveas/" . \Qiniu\base64_urlSafeEncode($bucket . ":qiniu_640x360.mp4");
  31 +
  32 +list($id, $err) = $pfop->execute($bucket, $key, $fops, $pipeline, $notifyUrl, $force);
  33 +echo "\n====> pfop avthumb result: \n";
  34 +if ($err != null) {
  35 + var_dump($err);
  36 +} else {
  37 + echo "PersistentFop Id: $id\n";
  38 +}
  39 +
  40 +//查询转码的进度和状态
  41 +list($ret, $err) = $pfop->status($id);
  42 +echo "\n====> pfop avthumb status: \n";
  43 +if ($err != null) {
  44 + var_dump($err);
  45 +} else {
  46 + var_dump($ret);
  47 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +use Qiniu\Processing\PersistentFop;
  6 +
  7 +//对已经上传到七牛的视频发起异步转码操作
  8 +
  9 +$accessKey = getenv('QINIU_ACCESS_KEY');
  10 +$secretKey = getenv('QINIU_SECRET_KEY');
  11 +$bucket = getenv('QINIU_TEST_BUCKET');
  12 +
  13 +$auth = new Auth($accessKey, $secretKey);
  14 +
  15 +//要转码的文件所在的空间和文件名。
  16 +$key = 'qiniu.mp4';
  17 +
  18 +//转码是使用的队列名称。 https://portal.qiniu.com/mps/pipeline
  19 +$pipeline = 'sdktest';
  20 +
  21 +//转码完成后通知到你的业务服务器。
  22 +$notifyUrl = 'http://375dec79.ngrok.com/notify.php';
  23 +$force = false;
  24 +
  25 +$config = new \Qiniu\Config();
  26 +//$config->useHTTPS=true;
  27 +$pfop = new PersistentFop($auth, $config);
  28 +
  29 +//需要添加水印的图片UrlSafeBase64
  30 +//可以参考http://developer.qiniu.com/code/v6/api/dora-api/av/video-watermark.html
  31 +$base64URL = Qiniu\base64_urlSafeEncode('http://devtools.qiniu.com/qiniu.png');
  32 +
  33 +//水印参数
  34 +$fops = "avthumb/mp4/s/640x360/vb/1.4m/image/" . $base64URL . "|saveas/"
  35 + . \Qiniu\base64_urlSafeEncode($bucket . ":qiniu_wm.mp4");
  36 +
  37 +list($id, $err) = $pfop->execute($bucket, $key, $fops, $pipeline, $notifyUrl, $force);
  38 +echo "\n====> pfop avthumb result: \n";
  39 +if ($err != null) {
  40 + var_dump($err);
  41 +} else {
  42 + echo "PersistentFop Id: $id\n";
  43 +}
  44 +
  45 +//查询转码的进度和状态
  46 +list($ret, $err) = $pfop->status($id);
  47 +echo "\n====> pfop avthumb status: \n";
  48 +if ($err != null) {
  49 + var_dump($err);
  50 +} else {
  51 + var_dump($ret);
  52 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +use Qiniu\Processing\PersistentFop;
  6 +
  7 +$accessKey = 'Access_Key';
  8 +$secretKey = 'Secret_Key';
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +
  11 +//要持久化处理的文件所在的空间和文件名。
  12 +$bucket = 'Bucket_Name';
  13 +
  14 +//持久化处理使用的队列名称。 https://portal.qiniu.com/mps/pipeline
  15 +$pipeline = 'pipeline_name';
  16 +
  17 +//持久化处理完成后通知到你的业务服务器。
  18 +$notifyUrl = 'http://375dec79.ngrok.com/notify.php';
  19 +$pfop = new PersistentFop($auth, $bucket, $pipeline, $notifyUrl);
  20 +
  21 +$id = "z2.5955c739e3d0041bf80c9baa";
  22 +//查询持久化处理的进度和状态
  23 +list($ret, $err) = $pfop->status($id);
  24 +echo "\n====> pfop avthumb status: \n";
  25 +if ($err != null) {
  26 + var_dump($err);
  27 +} else {
  28 + var_dump($ret);
  29 +}
  1 +<?php
  2 +
  3 +require_once __DIR__ . '/../autoload.php';
  4 +
  5 +use Qiniu\Auth;
  6 +use Qiniu\Http\Client;
  7 +
  8 +$accessKey = getenv('QINIU_ACCESS_KEY');
  9 +$secretKey = getenv('QINIU_SECRET_KEY');
  10 +$auth = new Auth($accessKey, $secretKey);
  11 +$config = new \Qiniu\Config();
  12 +$argusManager = new \Qiniu\Storage\ArgusManager($auth, $config);
  13 +
  14 +$reqBody = array();
  15 +$reqBody['uri'] = "xxxx";
  16 +
  17 +$ops = array();
  18 +$ops = array(
  19 + array(
  20 + 'op' => 'pulp',
  21 + 'params' => array(
  22 + 'labels' => array(
  23 + array(
  24 + 'label' => "1",
  25 + 'select' => 1,
  26 + 'score' => 2,
  27 + ),
  28 + )
  29 + )
  30 + ),
  31 +);
  32 +
  33 +$params = array();
  34 +$params = array(
  35 + 'async' => false,
  36 + 'vframe' => array(
  37 + 'mode' => 1,
  38 + 'interval' => 8,
  39 + )
  40 +);
  41 +
  42 +$req = array();
  43 +$req['data'] = $reqBody;
  44 +$req['ops'] = $ops;
  45 +$req['params'] = $params;
  46 +$body = json_encode($req);
  47 +
  48 +$vid = "xxxx";
  49 +list($ret, $err) = $argusManager->pulpVideo($body, $vid);
  50 +
  51 +if ($err !== null) {
  52 + var_dump($err);
  53 +} else {
  54 + var_dump($ret);
  55 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +$private = 1;
  15 +
  16 +list($Info, $err) = $bucketManager->putBucketAccessMode($bucket, $private);
  17 +if ($err) {
  18 + print_r($err);
  19 +} else {
  20 + print_r($Info);
  21 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +$mode = 1;
  15 +
  16 +list($Info, $err) = $bucketManager->putBucketAccessStyleMode($bucket, $mode);
  17 +if ($err) {
  18 + print_r($err);
  19 +} else {
  20 + print_r($Info);
  21 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +$name = 'testdemo';
  15 +$prefix = 'test1';
  16 +$suffix = 'mp3';
  17 +$event = array("move","copy");
  18 +$callbackURL = 'http://www.qiniu.com';
  19 +
  20 +list($Info, $err) = $bucketManager->putBucketEvent($bucket, $name, $prefix, $suffix, $event, $callbackURL);
  21 +if ($err) {
  22 + print_r($err);
  23 +} else {
  24 + print_r($Info);
  25 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +$maxAge = 15768000;
  15 +
  16 +list($Info, $err) = $bucketManager->putBucketMaxAge($bucket, $maxAge);
  17 +if ($err) {
  18 + print_r($err);
  19 +} else {
  20 + print_r($Info);
  21 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +$size = 99999;
  15 +$count = 99;
  16 +
  17 +list($Info, $err) = $bucketManager->putBucketQuota($bucket, $size, $count);
  18 +if ($err) {
  19 + print_r($err);
  20 +} else {
  21 + print_r($Info);
  22 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +
  9 +$auth = new Auth($accessKey, $secretKey);
  10 +$config = new \Qiniu\Config();
  11 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  12 +
  13 +$bucket = 'xxxx';
  14 +$mode = 1;
  15 +$norefer = "1";
  16 +$pattern = "*.qiniu.com";
  17 +
  18 +list($Info, $err) = $bucketManager->putReferAntiLeech($bucket, $mode, $norefer, $pattern);
  19 +if ($err) {
  20 + print_r($err);
  21 +} else {
  22 + print_r($Info);
  23 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +use Qiniu\Etag;
  4 +
  5 +$localFile = "/Users/jemy/Documents/qiniu.mp4";
  6 +list($etag, $err) = Etag::sum($localFile);
  7 +if ($err == null) {
  8 + echo "Etag: $etag";
  9 +} else {
  10 + var_dump($err);
  11 +}
  1 +<?php
  2 +require_once __DIR__ . '/../autoload.php';
  3 +
  4 +use \Qiniu\Auth;
  5 +
  6 +$accessKey = getenv('QINIU_ACCESS_KEY');
  7 +$secretKey = getenv('QINIU_SECRET_KEY');
  8 +$bucket = getenv('QINIU_TEST_BUCKET');
  9 +
  10 +
  11 +$auth = new Auth($accessKey, $secretKey);
  12 +$config = new \Qiniu\Config();
  13 +$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
  14 +
  15 +//每次最多不能超过1000个
  16 +$keyMimePairs = array(
  17 + 'qiniu.mp4' => 'video/x-mp4',
  18 + 'qiniu.png' => 'image/x-png',
  19 + 'qiniu.jpg' => 'image/x-jpg'
  20 +);
  21 +
  22 +$ops = $bucketManager->buildBatchChangeMime($bucket, $keyMimePairs);
  23 +list($ret, $err) = $bucketManager->batch($ops);
  24 +if ($err) {
  25 + print_r($err);
  26 +} else {
  27 + print_r($ret);
  28 +}