Procházet zdrojové kódy

for php7.0 and compose

stanley-king před 4 roky
rodič
revize
c0a7060ade
69 změnil soubory, kde provedl 7189 přidání a 452 odebrání
  1. 2 0
      admin/control/tools.php
  2. 1 0
      admin/index.php
  3. 17 22
      centra_srv.php
  4. 1 0
      cms/index.php
  5. 25 0
      conf/nginx/fastcgi.conf
  6. 25 0
      conf/nginx/fastcgi.conf.default
  7. 24 0
      conf/nginx/fastcgi_params
  8. 109 0
      conf/nginx/koi-utf
  9. 103 0
      conf/nginx/koi-win
  10. 27 0
      conf/nginx/lrlzssl/214455844540210.key
  11. 67 0
      conf/nginx/lrlzssl/214455844540210.pem
  12. 89 0
      conf/nginx/mime.types
  13. 87 0
      conf/nginx/nginx.conf
  14. 117 0
      conf/nginx/nginx.conf.default
  15. 16 0
      conf/nginx/scgi_params
  16. 16 0
      conf/nginx/uwsgi_params
  17. 126 0
      conf/nginx/win-utf
  18. 3 0
      conf/php-fpm/docker-php-fpm-start
  19. 1955 0
      conf/php-fpm/php-debug.ini
  20. 143 0
      conf/php-fpm/php-fpm.conf
  21. 4 0
      conf/php/docker-php-spwan-start
  22. 1952 0
      conf/php/php-debug.ini
  23. 944 0
      conf/redis/6379.conf
  24. 944 0
      conf/redis/6380.conf
  25. 0 3
      core/framework/core/base.php
  26. 1 1
      core/framework/libraries/email.php
  27. 0 1
      core/framework/libraries/geohash.php
  28. 8 4
      core/framework/libraries/security.php
  29. 18 29
      core/lrlz.php
  30. 2 2
      crontab.php
  31. 1 1
      crontab/minutes.bat
  32. 0 0
      daemon.log
  33. 0 28
      data/api/mini_wxpay/lib/WxPay.Config.php
  34. 6 33
      data/api/open_wxpay/lib/OpenWxPay.Config.php
  35. 60 60
      data/cache/flea_area/flea_area_1.php
  36. 58 0
      docker-compose-dev.yml
  37. 57 0
      docker-compose.yml
  38. 10 9
      fcgi_run.php
  39. 1 15
      fooder.php
  40. 1 1
      gcidfiller.php
  41. 10 19
      global.php
  42. 4 0
      helper/algorithm.php
  43. 4 5
      helper/fcgi_server.php
  44. 8 0
      helper/message/msgstates.php
  45. 20 26
      helper/message/msgutil.php
  46. 23 36
      helper/message/subscriber.php
  47. 0 20
      helper/pay/alipay.php
  48. 1 1
      helper/pay/wxpay.php
  49. 60 65
      helper/session.php
  50. 1 1
      helper/special_helper.php
  51. 0 20
      helper/third_author/signaturer.php
  52. 0 17
      helper/third_author/wxauthor.php
  53. 10 0
      index.html
  54. 1 7
      index.php
  55. 3 0
      info.php
  56. 1 2
      logmonitor.php
  57. 2 3
      mobile/control/control.php
  58. 0 1
      mobile/control/index.php
  59. 1 2
      mobile/control/member_talk.php
  60. 1 1
      mobile/util/errcode.php
  61. 1 2
      room_factory.php
  62. 1 2
      room_srv.php
  63. 1 2
      run.php
  64. 9 3
      test/TestGeohash.php
  65. 1 1
      test/TestTalk.php
  66. 3 3
      ugc_srv.php
  67. 1 2
      upfile.php
  68. 1 1
      util.php
  69. 1 1
      zmr.php

+ 2 - 0
admin/control/tools.php

@@ -42,6 +42,8 @@ class toolsControl extends SystemControl
 
                     $pay_sn   = $order['pay_sn'];
                     $trade_no = $order['trade_no'];
+
+                    //todo 对完全不需要通过微信和支付宝支付现金的订单,就不会有trade_no,因此此时推送会失败。
                     if(empty($pay_sn) || empty($trade_no)) {
                         showMessage(L('nc_common_save_fail'), urlAdmin('tools', 'oms_order_push'));
                         return;

+ 1 - 0
admin/index.php

@@ -8,6 +8,7 @@
 define('BASE_PATH',str_replace('\\','/',dirname(__FILE__)));
 if (!@include(dirname(dirname(__FILE__)).'/global.php')) exit('global.php isn\'t exists!');
 if (!@include(BASE_CORE_PATH.'/lrlz.php')) exit('lrlz.php isn\'t exists!');
+
 define('TPL_NAME',TPL_ADMIN_NAME);
 define('ADMIN_TEMPLATES_URL',ADMIN_SITE_URL.'/templates/'.TPL_NAME);
 define('BASE_TPL_PATH',BASE_PATH.'/templates/'.TPL_NAME);

+ 17 - 22
centra_srv.php

@@ -1,22 +1,21 @@
 <?php
 
-define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
-
-require_once (BASE_ROOT_PATH . '/fooder.php');
-require_once (BASE_ROOT_PATH . '/helper/event_looper.php');
-
-require_once (BASE_ROOT_PATH . '/helper/search/processor.php');
-require_once (BASE_ROOT_PATH . '/helper/search/util.php');
-require_once (BASE_ROOT_PATH . '/helper/category_helper.php');
-require_once (BASE_ROOT_PATH . '/helper/brand_helper.php');
-require_once (BASE_ROOT_PATH . '/helper/goods/commonid_helper.php');
-require_once (BASE_ROOT_PATH . '/helper/search/searcher.php');
-require_once (BASE_ROOT_PATH . '/helper/special_helper.php');
-require_once (BASE_ROOT_PATH . '/helper/search/area_library.php');
-require_once (BASE_ROOT_PATH . '/helper/brand_helper.php');
-require_once (BASE_ROOT_PATH . '/helper/algorithm.php');
-require_once (BASE_ROOT_PATH . '/helper/message/msgutil.php');
-require_once (BASE_ROOT_PATH . '/helper/message/subscriber.php');
+require_once(BASE_ROOT_PATH . '/global.php');
+require_once(BASE_ROOT_PATH . '/fooder.php');
+require_once(BASE_ROOT_PATH . '/helper/event_looper.php');
+require_once(BASE_ROOT_PATH . '/helper/search/processor.php');
+require_once(BASE_ROOT_PATH . '/helper/search/util.php');
+require_once(BASE_ROOT_PATH . '/helper/category_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/brand_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/goods/commonid_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/search/searcher.php');
+require_once(BASE_ROOT_PATH . '/helper/special_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/search/area_library.php');
+require_once(BASE_ROOT_PATH . '/helper/brand_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/algorithm.php');
+require_once(BASE_ROOT_PATH . '/helper/message/msgstates.php');
+require_once(BASE_ROOT_PATH . '/helper/message/msgutil.php');
+require_once(BASE_ROOT_PATH . '/helper/message/subscriber.php');
 
 function all_channels()
 {
@@ -55,8 +54,4 @@ global $config;
 $host = $config['searcher']['host'];
 $port = $config['searcher']['port'];
 
-event\util::fork_listen($host,$port,'searchwork',1);
-
-
-
-
+event\util::fork_listen($host,$port,'searchwork',1);

+ 1 - 0
cms/index.php

@@ -8,6 +8,7 @@
  */
 define('APP_ID','cms');
 define('BASE_PATH',str_replace('\\','/',dirname(__FILE__)));
+
 if (!@include(dirname(dirname(__FILE__)).'/global.php')) exit('global.php isn\'t exists!');
 if (!@include(BASE_CORE_PATH.'/lrlz.php')) exit('lrlz.php isn\'t exists!');
 

+ 25 - 0
conf/nginx/fastcgi.conf

@@ -0,0 +1,25 @@
+
+fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
+fastcgi_param  QUERY_STRING       $query_string;
+fastcgi_param  REQUEST_METHOD     $request_method;
+fastcgi_param  CONTENT_TYPE       $content_type;
+fastcgi_param  CONTENT_LENGTH     $content_length;
+
+fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
+fastcgi_param  REQUEST_URI        $request_uri;
+fastcgi_param  DOCUMENT_URI       $document_uri;
+fastcgi_param  DOCUMENT_ROOT      $document_root;
+fastcgi_param  SERVER_PROTOCOL    $server_protocol;
+fastcgi_param  HTTPS              $https if_not_empty;
+
+fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
+fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
+
+fastcgi_param  REMOTE_ADDR        $remote_addr;
+fastcgi_param  REMOTE_PORT        $remote_port;
+fastcgi_param  SERVER_ADDR        $server_addr;
+fastcgi_param  SERVER_PORT        $server_port;
+fastcgi_param  SERVER_NAME        $server_name;
+
+# PHP only, required if PHP was built with --enable-force-cgi-redirect
+fastcgi_param  REDIRECT_STATUS    200;

+ 25 - 0
conf/nginx/fastcgi.conf.default

@@ -0,0 +1,25 @@
+
+fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
+fastcgi_param  QUERY_STRING       $query_string;
+fastcgi_param  REQUEST_METHOD     $request_method;
+fastcgi_param  CONTENT_TYPE       $content_type;
+fastcgi_param  CONTENT_LENGTH     $content_length;
+
+fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
+fastcgi_param  REQUEST_URI        $request_uri;
+fastcgi_param  DOCUMENT_URI       $document_uri;
+fastcgi_param  DOCUMENT_ROOT      $document_root;
+fastcgi_param  SERVER_PROTOCOL    $server_protocol;
+fastcgi_param  HTTPS              $https if_not_empty;
+
+fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
+fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
+
+fastcgi_param  REMOTE_ADDR        $remote_addr;
+fastcgi_param  REMOTE_PORT        $remote_port;
+fastcgi_param  SERVER_ADDR        $server_addr;
+fastcgi_param  SERVER_PORT        $server_port;
+fastcgi_param  SERVER_NAME        $server_name;
+
+# PHP only, required if PHP was built with --enable-force-cgi-redirect
+fastcgi_param  REDIRECT_STATUS    200;

+ 24 - 0
conf/nginx/fastcgi_params

@@ -0,0 +1,24 @@
+
+fastcgi_param  QUERY_STRING       $query_string;
+fastcgi_param  REQUEST_METHOD     $request_method;
+fastcgi_param  CONTENT_TYPE       $content_type;
+fastcgi_param  CONTENT_LENGTH     $content_length;
+
+fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
+fastcgi_param  REQUEST_URI        $request_uri;
+fastcgi_param  DOCUMENT_URI       $document_uri;
+fastcgi_param  DOCUMENT_ROOT      $document_root;
+fastcgi_param  SERVER_PROTOCOL    $server_protocol;
+fastcgi_param  HTTPS              $https if_not_empty;
+
+fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
+fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
+
+fastcgi_param  REMOTE_ADDR        $remote_addr;
+fastcgi_param  REMOTE_PORT        $remote_port;
+fastcgi_param  SERVER_ADDR        $server_addr;
+fastcgi_param  SERVER_PORT        $server_port;
+fastcgi_param  SERVER_NAME        $server_name;
+
+# PHP only, required if PHP was built with --enable-force-cgi-redirect
+fastcgi_param  REDIRECT_STATUS    200;

+ 109 - 0
conf/nginx/koi-utf

@@ -0,0 +1,109 @@
+
+# This map is not a full koi8-r <> utf8 map: it does not contain
+# box-drawing and some other characters.  Besides this map contains
+# several koi8-u and Byelorussian letters which are not in koi8-r.
+# If you need a full and standard map, use contrib/unicode2nginx/koi-utf
+# map instead.
+
+charset_map  koi8-r  utf-8 {
+
+    80  E282AC ; # euro
+
+    95  E280A2 ; # bullet
+
+    9A  C2A0 ;   # &nbsp;
+
+    9E  C2B7 ;   # &middot;
+
+    A3  D191 ;   # small yo
+    A4  D194 ;   # small Ukrainian ye
+
+    A6  D196 ;   # small Ukrainian i
+    A7  D197 ;   # small Ukrainian yi
+
+    AD  D291 ;   # small Ukrainian soft g
+    AE  D19E ;   # small Byelorussian short u
+
+    B0  C2B0 ;   # &deg;
+
+    B3  D081 ;   # capital YO
+    B4  D084 ;   # capital Ukrainian YE
+
+    B6  D086 ;   # capital Ukrainian I
+    B7  D087 ;   # capital Ukrainian YI
+
+    B9  E28496 ; # numero sign
+
+    BD  D290 ;   # capital Ukrainian soft G
+    BE  D18E ;   # capital Byelorussian short U
+
+    BF  C2A9 ;   # (C)
+
+    C0  D18E ;   # small yu
+    C1  D0B0 ;   # small a
+    C2  D0B1 ;   # small b
+    C3  D186 ;   # small ts
+    C4  D0B4 ;   # small d
+    C5  D0B5 ;   # small ye
+    C6  D184 ;   # small f
+    C7  D0B3 ;   # small g
+    C8  D185 ;   # small kh
+    C9  D0B8 ;   # small i
+    CA  D0B9 ;   # small j
+    CB  D0BA ;   # small k
+    CC  D0BB ;   # small l
+    CD  D0BC ;   # small m
+    CE  D0BD ;   # small n
+    CF  D0BE ;   # small o
+
+    D0  D0BF ;   # small p
+    D1  D18F ;   # small ya
+    D2  D180 ;   # small r
+    D3  D181 ;   # small s
+    D4  D182 ;   # small t
+    D5  D183 ;   # small u
+    D6  D0B6 ;   # small zh
+    D7  D0B2 ;   # small v
+    D8  D18C ;   # small soft sign
+    D9  D18B ;   # small y
+    DA  D0B7 ;   # small z
+    DB  D188 ;   # small sh
+    DC  D18D ;   # small e
+    DD  D189 ;   # small shch
+    DE  D187 ;   # small ch
+    DF  D18A ;   # small hard sign
+
+    E0  D0AE ;   # capital YU
+    E1  D090 ;   # capital A
+    E2  D091 ;   # capital B
+    E3  D0A6 ;   # capital TS
+    E4  D094 ;   # capital D
+    E5  D095 ;   # capital YE
+    E6  D0A4 ;   # capital F
+    E7  D093 ;   # capital G
+    E8  D0A5 ;   # capital KH
+    E9  D098 ;   # capital I
+    EA  D099 ;   # capital J
+    EB  D09A ;   # capital K
+    EC  D09B ;   # capital L
+    ED  D09C ;   # capital M
+    EE  D09D ;   # capital N
+    EF  D09E ;   # capital O
+
+    F0  D09F ;   # capital P
+    F1  D0AF ;   # capital YA
+    F2  D0A0 ;   # capital R
+    F3  D0A1 ;   # capital S
+    F4  D0A2 ;   # capital T
+    F5  D0A3 ;   # capital U
+    F6  D096 ;   # capital ZH
+    F7  D092 ;   # capital V
+    F8  D0AC ;   # capital soft sign
+    F9  D0AB ;   # capital Y
+    FA  D097 ;   # capital Z
+    FB  D0A8 ;   # capital SH
+    FC  D0AD ;   # capital E
+    FD  D0A9 ;   # capital SHCH
+    FE  D0A7 ;   # capital CH
+    FF  D0AA ;   # capital hard sign
+}

+ 103 - 0
conf/nginx/koi-win

@@ -0,0 +1,103 @@
+
+charset_map  koi8-r  windows-1251 {
+
+    80  88 ; # euro
+
+    95  95 ; # bullet
+
+    9A  A0 ; # &nbsp;
+
+    9E  B7 ; # &middot;
+
+    A3  B8 ; # small yo
+    A4  BA ; # small Ukrainian ye
+
+    A6  B3 ; # small Ukrainian i
+    A7  BF ; # small Ukrainian yi
+
+    AD  B4 ; # small Ukrainian soft g
+    AE  A2 ; # small Byelorussian short u
+
+    B0  B0 ; # &deg;
+
+    B3  A8 ; # capital YO
+    B4  AA ; # capital Ukrainian YE
+
+    B6  B2 ; # capital Ukrainian I
+    B7  AF ; # capital Ukrainian YI
+
+    B9  B9 ; # numero sign
+
+    BD  A5 ; # capital Ukrainian soft G
+    BE  A1 ; # capital Byelorussian short U
+
+    BF  A9 ; # (C)
+
+    C0  FE ; # small yu
+    C1  E0 ; # small a
+    C2  E1 ; # small b
+    C3  F6 ; # small ts
+    C4  E4 ; # small d
+    C5  E5 ; # small ye
+    C6  F4 ; # small f
+    C7  E3 ; # small g
+    C8  F5 ; # small kh
+    C9  E8 ; # small i
+    CA  E9 ; # small j
+    CB  EA ; # small k
+    CC  EB ; # small l
+    CD  EC ; # small m
+    CE  ED ; # small n
+    CF  EE ; # small o
+
+    D0  EF ; # small p
+    D1  FF ; # small ya
+    D2  F0 ; # small r
+    D3  F1 ; # small s
+    D4  F2 ; # small t
+    D5  F3 ; # small u
+    D6  E6 ; # small zh
+    D7  E2 ; # small v
+    D8  FC ; # small soft sign
+    D9  FB ; # small y
+    DA  E7 ; # small z
+    DB  F8 ; # small sh
+    DC  FD ; # small e
+    DD  F9 ; # small shch
+    DE  F7 ; # small ch
+    DF  FA ; # small hard sign
+
+    E0  DE ; # capital YU
+    E1  C0 ; # capital A
+    E2  C1 ; # capital B
+    E3  D6 ; # capital TS
+    E4  C4 ; # capital D
+    E5  C5 ; # capital YE
+    E6  D4 ; # capital F
+    E7  C3 ; # capital G
+    E8  D5 ; # capital KH
+    E9  C8 ; # capital I
+    EA  C9 ; # capital J
+    EB  CA ; # capital K
+    EC  CB ; # capital L
+    ED  CC ; # capital M
+    EE  CD ; # capital N
+    EF  CE ; # capital O
+
+    F0  CF ; # capital P
+    F1  DF ; # capital YA
+    F2  D0 ; # capital R
+    F3  D1 ; # capital S
+    F4  D2 ; # capital T
+    F5  D3 ; # capital U
+    F6  C6 ; # capital ZH
+    F7  C2 ; # capital V
+    F8  DC ; # capital soft sign
+    F9  DB ; # capital Y
+    FA  C7 ; # capital Z
+    FB  D8 ; # capital SH
+    FC  DD ; # capital E
+    FD  D9 ; # capital SHCH
+    FE  D7 ; # capital CH
+    FF  DA ; # capital hard sign
+}

+ 27 - 0
conf/nginx/lrlzssl/214455844540210.key

@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAmqpHA74SPQSjvja1EJpsHfNebq3MGUNNH1XSU7Kuf0aXqUtH
+AKab87czUjow2DqoY1qajiUPvK9r7Sy18AV7c1CqZFhurOE99kJiQVhyoCDzpyI5
+TpPpqwLxWc4TRRFKPwX6HPXKbXGjDKl+wq8sNExqFsEM3C+zVJrmf1S1lqoc+Rwq
+gH2qcaGfoytw/k/4Mzkj1FemrLIw7J27yApC1bDqsw9nURekw1J6e7VRpD2WS59Q
+Y0HXggF96/5x8TQoIO2JDZ4BJgXl4l47hhlHvwv1HXORarZfSlsv2m90RZQ8mKvf
+50+8mZWffbCOpQEbZcjB2nqmYF8rW3DnNGVLrwIDAQABAoIBAE+XnSAB6mTYRGOY
+x6kZrtXi7g/LBKNjjQa5JZnI9B+vdlC62nktREgxWQnRxF0iIpGuiKbpz6VsKQBO
+5/ny+EqpkmY9VAdHipl2JBY4rBRXoMu7wv37BF7rDsUGVchPU4QHUWUh3+BegGf9
+uav6daccQ+QdyL5vFbxOUpvoPeKgLTDd7afZ+mCljGPYMyfEt9EijHFMqbL+ple5
+JfFfjBlI3faQEyy1DWeyuyxGXMyhRzhURxB9af+ov7NCu9U1F90LXKu1dCCfUYdP
+qwamCtKtgbtg96oRIuTHjKili6D6Ry3A/fHFmuFQSLFkDqn8s/OADzzBAQSXHcq8
+0JDFVfECgYEA6FebKQco0g6tsMc4uNCV+6zfWfc5PrE7+bBr+kom1Cn90ZNWxZuC
+WClqTBk5+44go0e9H9NSk1nbiVZ+Cffc1phJfAfZXvlKP0gpF/9oLAXT0Z9MfQX3
+oGkphW0sugz8OvYw4d/sMJdH/RmdQRHo7K+/cAjM6kVK56l8ZCRAzmMCgYEAqmnj
+Bs3gzHbujRET5dvmpw5TXr8gqRyw0fGNbBf/DQTllMtEombWNomKZog9qYebXS4X
+TErbUIGTKIyOfGiFWta5M00iQcn38wEgdZ+cd0aRkVonHgaV3uHX6z+3Mfs3jysf
+9ADlDW/H7wsIPExPOtbbpijRFAnFiDGUHeoCGUUCgYEA2T8pHrjKC3ecIuJ1ACJR
+S01+XmHSzfLs0HCM1jBFlDZbVX3+MbFRtFutP9CKrdNcYzAt/7cZzBvGMemE2o8/
+mAw3EdlJAAv6x6cSfZTcc+VTBPt9ip1syDnskAzgOGrx4bPXSyyUbW7W6irsJi63
+66/9QaWI7TizbF/GpuBbFF8CgYBYJiWVI3Gg0fRba/YK9FC/IR3m6J6QW5LrRjON
+Mmxv45SN/wclqmQsGcFJgDfFNawb6veKMz52yk/ArdQWbkpszp1F+CQ8O6jSPkb4
+EPPyjsJFmYiac3WasN/rhC3S4MvAduI0aTISXTviXqaH6kEhgnpj3MEpyFQxOtQP
+FTi4sQKBgB/RROc9+U4cLg5PT3HQFAmmWKEy5Ipi9X56fu3HGZ1J9MTCTkiT5FI8
+nrua5nIkHQu9sFVMy9eIxyzlgSyqWGkuAddP8U580xwTKOrAzsGj2E5rMNpJScfU
+sglwwbRQLGw1IPi+OOl+ypwifRmVPuc7f6mwabJs92YtndbEkUxy
+-----END RSA PRIVATE KEY-----

+ 67 - 0
conf/nginx/lrlzssl/214455844540210.pem

@@ -0,0 +1,67 @@
+-----BEGIN CERTIFICATE-----
+MIIHAjCCBeqgAwIBAgIQBZtCZ5l71ytxHRvdITrA1DANBgkqhkiG9w0BAQsFADBe
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMR0wGwYDVQQDExRHZW9UcnVzdCBSU0EgQ0EgMjAxODAe
+Fw0xODAyMDIwMDAwMDBaFw0yMTAyMDExMjAwMDBaMHsxCzAJBgNVBAYTAkNOMRIw
+EAYDVQQHDAnkuIrmtbfluIIxNjA0BgNVBAoMLeS4iua1t+S4veS6uuS4veWmhuWM
+luWmhuWTgeiCoeS7veaciemZkOWFrOWPuDELMAkGA1UECxMCSVQxEzARBgNVBAMM
+CioubHJsei5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCaqkcD
+vhI9BKO+NrUQmmwd815urcwZQ00fVdJTsq5/RpepS0cAppvztzNSOjDYOqhjWpqO
+JQ+8r2vtLLXwBXtzUKpkWG6s4T32QmJBWHKgIPOnIjlOk+mrAvFZzhNFEUo/Bfoc
+9cptcaMMqX7Cryw0TGoWwQzcL7NUmuZ/VLWWqhz5HCqAfapxoZ+jK3D+T/gzOSPU
+V6assjDsnbvICkLVsOqzD2dRF6TDUnp7tVGkPZZLn1BjQdeCAX3r/nHxNCgg7YkN
+ngEmBeXiXjuGGUe/C/Udc5Fqtl9KWy/ab3RFlDyYq9/nT7yZlZ99sI6lARtlyMHa
+eqZgXytbcOc0ZUuvAgMBAAGjggOdMIIDmTAfBgNVHSMEGDAWgBSQWP+wnHWoUVR3
+se3yo0MWOJ5sxTAdBgNVHQ4EFgQUYDrBCOL5t9tSCboEXLcWltJhYwswHwYDVR0R
+BBgwFoIKKi5scmx6LmNvbYIIbHJsei5jb20wDgYDVR0PAQH/BAQDAgWgMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjA+BgNVHR8ENzA1MDOgMaAvhi1odHRw
+Oi8vY2RwLmdlb3RydXN0LmNvbS9HZW9UcnVzdFJTQUNBMjAxOC5jcmwwTAYDVR0g
+BEUwQzA3BglghkgBhv1sAQEwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGln
+aWNlcnQuY29tL0NQUzAIBgZngQwBAgIwdQYIKwYBBQUHAQEEaTBnMCYGCCsGAQUF
+BzABhhpodHRwOi8vc3RhdHVzLmdlb3RydXN0LmNvbTA9BggrBgEFBQcwAoYxaHR0
+cDovL2NhY2VydHMuZ2VvdHJ1c3QuY29tL0dlb1RydXN0UlNBQ0EyMDE4LmNydDAJ
+BgNVHRMEAjAAMIIB9QYKKwYBBAHWeQIEAgSCAeUEggHhAd8AdwCkuQmQtBhYFIe7
+E6LMZ3AKPDWYBPkb37jjd80OyA3cEAAAAWFVS7MIAAAEAwBIMEYCIQCEstmyyu8A
+h+TaSzVpfBo0Y1zIR2vz4uNBR9hCZjXpZgIhAMCB8ZG2xC/9ocPUb2Mqw2S9PArJ
+08M3Mi1GyQZWcpXVAHYAh3W/51l8+IxDmV+9827/Vo1HVjb/SrVgwbTq/16ggw8A
+AAFhVUuztwAABAMARzBFAiEAodMtu0ETxA7twPrR9weX8wPSFg62piyZOWncuM1P
+tVMCIGsl+rTTObtAg2n+7hegG5oMuDhLOCzaGGQRLDYVCOnVAHUA7ku9t3XOYLrh
+Qmkfq+GeZqMPfl+wctiDAMR7iXqo/csAAAFhVUu2EAAABAMARjBEAiBeJCh4tIHR
+kPzGvLUArrmqFi3Tuuceh9cP0cZrqg2sNAIgWfeS9oBzV5WHkPIfG6EzIXba1aHc
+dypJULrUkn/c1o8AdQBvU3asMfAxGdiZAKRRFf93FRwR2QLBACkGjbIImjfZEwAA
+AWFVS7XpAAAEAwBGMEQCIEKX8A81ZaZYJWhIpu/A0WFV7tzcMvHdlmKHjnkCe3aE
+AiBQQ37XBuJo7PCPug0GjjxN/9QNmii8ProYjhlIfYYHozANBgkqhkiG9w0BAQsF
+AAOCAQEATsCM1Vi2mBWhXgsTUXOmoVS6WHiIkaCJrrzpaJvx8M/3hHPXYs2hXJVK
+MHnB0Nm8olasxFWC+HajoaSUz1ngI4IA0idXQHJ0BC5aIC86LX10q3xZVsPqQzdJ
+yEaybjVirbA7NKKCwqesjHW+1lmxcXSBJzxD042AwdjkMIhJQ+Q13IVITz8YvhOZ
+apdheiVOUMH1vs+/CQzBVUA3GMpaZ5R1mrrlOTSLnQO2AXLupmovoQQxcDeFcjCM
+8RTuESfUBolqKQ/SBzj8zLoAH7xNA7pAiFlUFkAzgQJ3MGC7ydxgK25x6huwxYoU
+u1SPcYpnHcDe6dvsvsIotIVhwf861Q==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEizCCA3OgAwIBAgIQBUb+GCP34ZQdo5/OFMRhczANBgkqhkiG9w0BAQsFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0xNzExMDYxMjIzNDVaFw0yNzExMDYxMjIzNDVaMF4xCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xHTAbBgNVBAMTFEdlb1RydXN0IFJTQSBDQSAyMDE4MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAv4rRY03hGOqHXegWPI9/tr6HFzekDPgxP59FVEAh
+150Hm8oDI0q9m+2FAmM/n4W57Cjv8oYi2/hNVEHFtEJ/zzMXAQ6CkFLTxzSkwaEB
+2jKgQK0fWeQz/KDDlqxobNPomXOMJhB3y7c/OTLo0lko7geG4gk7hfiqafapa59Y
+rXLIW4dmrgjgdPstU0Nigz2PhUwRl9we/FAwuIMIMl5cXMThdSBK66XWdS3cLX18
+4ND+fHWhTkAChJrZDVouoKzzNYoq6tZaWmyOLKv23v14RyZ5eqoi6qnmcRID0/i6
+U9J5nL1krPYbY7tNjzgC+PBXXcWqJVoMXcUw/iBTGWzpwwIDAQABo4IBQDCCATww
+HQYDVR0OBBYEFJBY/7CcdahRVHex7fKjQxY4nmzFMB8GA1UdIwQYMBaAFAPeUDVW
+0Uy7ZvCj4hsbw5eyPdFVMA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEF
+BQcDAQYIKwYBBQUHAwIwEgYDVR0TAQH/BAgwBgEB/wIBADA0BggrBgEFBQcBAQQo
+MCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBCBgNVHR8E
+OzA5MDegNaAzhjFodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRHbG9i
+YWxSb290Q0EuY3JsMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxo
+dHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA0GCSqGSIb3DQEBCwUAA4IBAQAw
+8YdVPYQI/C5earp80s3VLOO+AtpdiXft9OlWwJLwKlUtRfccKj8QW/Pp4b7h6QAl
+ufejwQMb455OjpIbCZVS+awY/R8pAYsXCnM09GcSVe4ivMswyoCZP/vPEn/LPRhH
+hdgUPk8MlD979RGoUWz7qGAwqJChi28uRds3thx+vRZZIbEyZ62No0tJPzsSGSz8
+nQ//jP8BIwrzBAUH5WcBAbmvgWfrKcuv+PyGPqRcc4T55TlzrBnzAzZ3oClo9fTv
+O9PuiHMKrC6V6mgi0s2sa/gbXlPCD9Z24XUMxJElwIVTDuKB0Q4YMMlnpN/QChJ4
+B0AFsQ+DU0NCO+f78Xf7
+-----END CERTIFICATE-----

+ 89 - 0
conf/nginx/mime.types

@@ -0,0 +1,89 @@
+
+types {
+    text/html                             html htm shtml;
+    text/css                              css;
+    text/xml                              xml;
+    image/gif                             gif;
+    image/jpeg                            jpeg jpg;
+    application/javascript                js;
+    application/atom+xml                  atom;
+    application/rss+xml                   rss;
+
+    text/mathml                           mml;
+    text/plain                            txt;
+    text/vnd.sun.j2me.app-descriptor      jad;
+    text/vnd.wap.wml                      wml;
+    text/x-component                      htc;
+
+    image/png                             png;
+    image/tiff                            tif tiff;
+    image/vnd.wap.wbmp                    wbmp;
+    image/x-icon                          ico;
+    image/x-jng                           jng;
+    image/x-ms-bmp                        bmp;
+    image/svg+xml                         svg svgz;
+    image/webp                            webp;
+
+    application/font-woff                 woff;
+    application/java-archive              jar war ear;
+    application/json                      json;
+    application/mac-binhex40              hqx;
+    application/msword                    doc;
+    application/pdf                       pdf;
+    application/postscript                ps eps ai;
+    application/rtf                       rtf;
+    application/vnd.apple.mpegurl         m3u8;
+    application/vnd.ms-excel              xls;
+    application/vnd.ms-fontobject         eot;
+    application/vnd.ms-powerpoint         ppt;
+    application/vnd.wap.wmlc              wmlc;
+    application/vnd.google-earth.kml+xml  kml;
+    application/vnd.google-earth.kmz      kmz;
+    application/x-7z-compressed           7z;
+    application/x-cocoa                   cco;
+    application/x-java-archive-diff       jardiff;
+    application/x-java-jnlp-file          jnlp;
+    application/x-makeself                run;
+    application/x-perl                    pl pm;
+    application/x-pilot                   prc pdb;
+    application/x-rar-compressed          rar;
+    application/x-redhat-package-manager  rpm;
+    application/x-sea                     sea;
+    application/x-shockwave-flash         swf;
+    application/x-stuffit                 sit;
+    application/x-tcl                     tcl tk;
+    application/x-x509-ca-cert            der pem crt;
+    application/x-xpinstall               xpi;
+    application/xhtml+xml                 xhtml;
+    application/xspf+xml                  xspf;
+    application/zip                       zip;
+
+    application/octet-stream              bin exe dll;
+    application/octet-stream              deb;
+    application/octet-stream              dmg;
+    application/octet-stream              iso img;
+    application/octet-stream              msi msp msm;
+
+    application/vnd.openxmlformats-officedocument.wordprocessingml.document    docx;
+    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet          xlsx;
+    application/vnd.openxmlformats-officedocument.presentationml.presentation  pptx;
+
+    audio/midi                            mid midi kar;
+    audio/mpeg                            mp3;
+    audio/ogg                             ogg;
+    audio/x-m4a                           m4a;
+    audio/x-realaudio                     ra;
+
+    video/3gpp                            3gpp 3gp;
+    video/mp2t                            ts;
+    video/mp4                             mp4;
+    video/mpeg                            mpeg mpg;
+    video/quicktime                       mov;
+    video/webm                            webm;
+    video/x-flv                           flv;
+    video/x-m4v                           m4v;
+    video/x-mng                           mng;
+    video/x-ms-asf                        asx asf;
+    video/x-ms-wmv                        wmv;
+    video/x-msvideo                       avi;
+}

+ 87 - 0
conf/nginx/nginx.conf

@@ -0,0 +1,87 @@
+
+user nginx;
+worker_processes  1;
+error_log   /var/error.log  info;
+
+#pid        logs/nginx.pid;
+worker_rlimit_nofile 1024;
+
+events {
+    worker_connections  1024;
+}
+
+http 
+{
+    include       mime.types;
+    default_type  application/octet-stream;
+    fastcgi_buffer_size 32k;
+    fastcgi_buffers 8 32k;
+    underscores_in_headers on;
+    client_max_body_size 1024M;
+
+    sendfile            on;
+    keepalive_timeout   65;
+
+    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
+                      '$status $body_bytes_sent "$http_referer" '
+                      '"$http_user_agent" "$http_x_forwarded_for"';
+
+    server 
+    {
+    	listen       80;
+        set  $folder_name /var/www/html;
+       #server_name panda.lrlz.com;
+        root $folder_name;
+        index index.html index.php; 
+    	client_max_body_size 100m;
+    	proxy_connect_timeout 500s;
+        proxy_read_timeout 500s;
+        proxy_send_timeout 500s;
+        fastcgi_connect_timeout 75;
+        fastcgi_read_timeout 600;   
+        fastcgi_send_timeout 600;   
+
+        charset utf-8;
+        
+        location /logs {
+            deny all;
+            return 403;
+        }
+
+        location /data/log {
+            deny all;
+            return 403;
+        }
+        location / {
+            index  index.html index.htm index.php;
+        }
+        
+        location /mshop {
+            root $folder_name;
+            autoindex on;        
+            index  index.html index.htm index.php;
+	        try_files $uri $uri/ /mshop/index.html;
+        }
+
+        location ~ /mobile/[/\w]+\.php$ {
+            root           $folder_name;
+            fastcgi_pass   mobilesrv:9100;
+            fastcgi_index  index.php;
+            fastcgi_param  SCRIPT_FILENAME  $folder_name$fastcgi_script_name;
+            include fastcgi_params;
+        }
+
+        location ~ /mobile/[/\w]+\.html$ {
+            try_files $uri $uri/ /mobile/index.html;
+        }
+
+        location ~ \.php$ {
+	        add_header Cache-Control no-store;
+            root           $folder_name;
+            fastcgi_pass   fpmsrv:9000;
+            fastcgi_index  index.php;
+            fastcgi_param  SCRIPT_FILENAME  $folder_name$fastcgi_script_name;
+            include        fastcgi_params;
+        }
+    }
+}

+ 117 - 0
conf/nginx/nginx.conf.default

@@ -0,0 +1,117 @@
+
+#user  nobody;
+worker_processes  1;
+
+#error_log  logs/error.log;
+#error_log  logs/error.log  notice;
+#error_log  logs/error.log  info;
+
+#pid        logs/nginx.pid;
+
+
+events {
+    worker_connections  1024;
+}
+
+
+http {
+    include       mime.types;
+    default_type  application/octet-stream;
+
+    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
+    #                  '$status $body_bytes_sent "$http_referer" '
+    #                  '"$http_user_agent" "$http_x_forwarded_for"';
+
+    #access_log  logs/access.log  main;
+
+    sendfile        on;
+    #tcp_nopush     on;
+
+    #keepalive_timeout  0;
+    keepalive_timeout  65;
+
+    #gzip  on;
+
+    server {
+        listen       80;
+        server_name  localhost;
+
+        #charset koi8-r;
+
+        #access_log  logs/host.access.log  main;
+
+        location / {
+            root   html;
+            index  index.html index.htm;
+        }
+
+        #error_page  404              /404.html;
+
+        # redirect server error pages to the static page /50x.html
+        #
+        error_page   500 502 503 504  /50x.html;
+        location = /50x.html {
+            root   html;
+        }
+
+        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
+        #
+        #location ~ \.php$ {
+        #    proxy_pass   http://127.0.0.1;
+        #}
+
+        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
+        #
+        #location ~ \.php$ {
+        #    root           html;
+        #    fastcgi_pass   127.0.0.1:9000;
+        #    fastcgi_index  index.php;
+        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
+        #    include        fastcgi_params;
+        #}
+
+        # deny access to .htaccess files, if Apache's document root
+        # concurs with nginx's one
+        #
+        #location ~ /\.ht {
+        #    deny  all;
+        #}
+    }
+
+
+    # another virtual host using mix of IP-, name-, and port-based configuration
+    #
+    #server {
+    #    listen       8000;
+    #    listen       somename:8080;
+    #    server_name  somename  alias  another.alias;
+
+    #    location / {
+    #        root   html;
+    #        index  index.html index.htm;
+    #    }
+    #}
+
+
+    # HTTPS server
+    #
+    #server {
+    #    listen       443 ssl;
+    #    server_name  localhost;
+
+    #    ssl_certificate      cert.pem;
+    #    ssl_certificate_key  cert.key;
+
+    #    ssl_session_cache    shared:SSL:1m;
+    #    ssl_session_timeout  5m;
+
+    #    ssl_ciphers  HIGH:!aNULL:!MD5;
+    #    ssl_prefer_server_ciphers  on;
+
+    #    location / {
+    #        root   html;
+    #        index  index.html index.htm;
+    #    }
+    #}
+
+}

+ 16 - 0
conf/nginx/scgi_params

@@ -0,0 +1,16 @@
+
+scgi_param  REQUEST_METHOD     $request_method;
+scgi_param  REQUEST_URI        $request_uri;
+scgi_param  QUERY_STRING       $query_string;
+scgi_param  CONTENT_TYPE       $content_type;
+
+scgi_param  DOCUMENT_URI       $document_uri;
+scgi_param  DOCUMENT_ROOT      $document_root;
+scgi_param  SCGI               1;
+scgi_param  SERVER_PROTOCOL    $server_protocol;
+scgi_param  HTTPS              $https if_not_empty;
+
+scgi_param  REMOTE_ADDR        $remote_addr;
+scgi_param  REMOTE_PORT        $remote_port;
+scgi_param  SERVER_PORT        $server_port;
+scgi_param  SERVER_NAME        $server_name;

+ 16 - 0
conf/nginx/uwsgi_params

@@ -0,0 +1,16 @@
+
+uwsgi_param  QUERY_STRING       $query_string;
+uwsgi_param  REQUEST_METHOD     $request_method;
+uwsgi_param  CONTENT_TYPE       $content_type;
+uwsgi_param  CONTENT_LENGTH     $content_length;
+
+uwsgi_param  REQUEST_URI        $request_uri;
+uwsgi_param  PATH_INFO          $document_uri;
+uwsgi_param  DOCUMENT_ROOT      $document_root;
+uwsgi_param  SERVER_PROTOCOL    $server_protocol;
+uwsgi_param  HTTPS              $https if_not_empty;
+
+uwsgi_param  REMOTE_ADDR        $remote_addr;
+uwsgi_param  REMOTE_PORT        $remote_port;
+uwsgi_param  SERVER_PORT        $server_port;
+uwsgi_param  SERVER_NAME        $server_name;

+ 126 - 0
conf/nginx/win-utf

@@ -0,0 +1,126 @@
+
+# This map is not a full windows-1251 <> utf8 map: it does not
+# contain Serbian and Macedonian letters.  If you need a full map,
+# use contrib/unicode2nginx/win-utf map instead.
+
+charset_map  windows-1251  utf-8 {
+
+    82  E2809A ; # single low-9 quotation mark
+
+    84  E2809E ; # double low-9 quotation mark
+    85  E280A6 ; # ellipsis
+    86  E280A0 ; # dagger
+    87  E280A1 ; # double dagger
+    88  E282AC ; # euro
+    89  E280B0 ; # per mille
+
+    91  E28098 ; # left single quotation mark
+    92  E28099 ; # right single quotation mark
+    93  E2809C ; # left double quotation mark
+    94  E2809D ; # right double quotation mark
+    95  E280A2 ; # bullet
+    96  E28093 ; # en dash
+    97  E28094 ; # em dash
+
+    99  E284A2 ; # trade mark sign
+
+    A0  C2A0 ;   # &nbsp;
+    A1  D18E ;   # capital Byelorussian short U
+    A2  D19E ;   # small Byelorussian short u
+
+    A4  C2A4 ;   # currency sign
+    A5  D290 ;   # capital Ukrainian soft G
+    A6  C2A6 ;   # borken bar
+    A7  C2A7 ;   # section sign
+    A8  D081 ;   # capital YO
+    A9  C2A9 ;   # (C)
+    AA  D084 ;   # capital Ukrainian YE
+    AB  C2AB ;   # left-pointing double angle quotation mark
+    AC  C2AC ;   # not sign
+    AD  C2AD ;   # soft hypen
+    AE  C2AE ;   # (R)
+    AF  D087 ;   # capital Ukrainian YI
+
+    B0  C2B0 ;   # &deg;
+    B1  C2B1 ;   # plus-minus sign
+    B2  D086 ;   # capital Ukrainian I
+    B3  D196 ;   # small Ukrainian i
+    B4  D291 ;   # small Ukrainian soft g
+    B5  C2B5 ;   # micro sign
+    B6  C2B6 ;   # pilcrow sign
+    B7  C2B7 ;   # &middot;
+    B8  D191 ;   # small yo
+    B9  E28496 ; # numero sign
+    BA  D194 ;   # small Ukrainian ye
+    BB  C2BB ;   # right-pointing double angle quotation mark
+
+    BF  D197 ;   # small Ukrainian yi
+
+    C0  D090 ;   # capital A
+    C1  D091 ;   # capital B
+    C2  D092 ;   # capital V
+    C3  D093 ;   # capital G
+    C4  D094 ;   # capital D
+    C5  D095 ;   # capital YE
+    C6  D096 ;   # capital ZH
+    C7  D097 ;   # capital Z
+    C8  D098 ;   # capital I
+    C9  D099 ;   # capital J
+    CA  D09A ;   # capital K
+    CB  D09B ;   # capital L
+    CC  D09C ;   # capital M
+    CD  D09D ;   # capital N
+    CE  D09E ;   # capital O
+    CF  D09F ;   # capital P
+
+    D0  D0A0 ;   # capital R
+    D1  D0A1 ;   # capital S
+    D2  D0A2 ;   # capital T
+    D3  D0A3 ;   # capital U
+    D4  D0A4 ;   # capital F
+    D5  D0A5 ;   # capital KH
+    D6  D0A6 ;   # capital TS
+    D7  D0A7 ;   # capital CH
+    D8  D0A8 ;   # capital SH
+    D9  D0A9 ;   # capital SHCH
+    DA  D0AA ;   # capital hard sign
+    DB  D0AB ;   # capital Y
+    DC  D0AC ;   # capital soft sign
+    DD  D0AD ;   # capital E
+    DE  D0AE ;   # capital YU
+    DF  D0AF ;   # capital YA
+
+    E0  D0B0 ;   # small a
+    E1  D0B1 ;   # small b
+    E2  D0B2 ;   # small v
+    E3  D0B3 ;   # small g
+    E4  D0B4 ;   # small d
+    E5  D0B5 ;   # small ye
+    E6  D0B6 ;   # small zh
+    E7  D0B7 ;   # small z
+    E8  D0B8 ;   # small i
+    E9  D0B9 ;   # small j
+    EA  D0BA ;   # small k
+    EB  D0BB ;   # small l
+    EC  D0BC ;   # small m
+    ED  D0BD ;   # small n
+    EE  D0BE ;   # small o
+    EF  D0BF ;   # small p
+
+    F0  D180 ;   # small r
+    F1  D181 ;   # small s
+    F2  D182 ;   # small t
+    F3  D183 ;   # small u
+    F4  D184 ;   # small f
+    F5  D185 ;   # small kh
+    F6  D186 ;   # small ts
+    F7  D187 ;   # small ch
+    F8  D188 ;   # small sh
+    F9  D189 ;   # small shch
+    FA  D18A ;   # small hard sign
+    FB  D18B ;   # small y
+    FC  D18C ;   # small soft sign
+    FD  D18D ;   # small e
+    FE  D18E ;   # small yu
+    FF  D18F ;   # small ya
+}

+ 3 - 0
conf/php-fpm/docker-php-fpm-start

@@ -0,0 +1,3 @@
+#!/bin/sh
+set -e
+php-fpm

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1955 - 0
conf/php-fpm/php-debug.ini


+ 143 - 0
conf/php-fpm/php-fpm.conf

@@ -0,0 +1,143 @@
+;;;;;;;;;;;;;;;;;;;;;
+; FPM Configuration ;
+;;;;;;;;;;;;;;;;;;;;;
+
+; All relative paths in this configuration file are relative to PHP's install
+; prefix (/usr/local). This prefix can be dynamically changed by using the
+; '-p' argument from the command line.
+
+;;;;;;;;;;;;;;;;;;
+; Global Options ;
+;;;;;;;;;;;;;;;;;;
+
+[global]
+; Pid file
+; Note: the default prefix is /usr/local/var
+; Default Value: none
+;pid = run/php-fpm.pid
+
+; Error log file
+; If it's set to "syslog", log is sent to syslogd instead of being written
+; into a local file.
+; Note: the default prefix is /usr/local/var
+; Default Value: log/php-fpm.log
+;error_log = log/php-fpm.log
+
+; syslog_facility is used to specify what type of program is logging the
+; message. This lets syslogd specify that messages from different facilities
+; will be handled differently.
+; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON)
+; Default Value: daemon
+;syslog.facility = daemon
+
+; syslog_ident is prepended to every message. If you have multiple FPM
+; instances running on the same server, you can change the default value
+; which must suit common needs.
+; Default Value: php-fpm
+;syslog.ident = php-fpm
+
+; Log level
+; Possible Values: alert, error, warning, notice, debug
+; Default Value: notice
+;log_level = notice
+
+; Log limit on number of characters in the single line (log entry). If the
+; line is over the limit, it is wrapped on multiple lines. The limit is for
+; all logged characters including message prefix and suffix if present. However
+; the new line character does not count into it as it is present only when
+; logging to a file descriptor. It means the new line character is not present
+; when logging to syslog.
+; Default Value: 1024
+;log_limit = 4096
+
+; Log buffering specifies if the log line is buffered which means that the
+; line is written in a single write operation. If the value is false, then the
+; data is written directly into the file descriptor. It is an experimental
+; option that can potentionaly improve logging performance and memory usage
+; for some heavy logging scenarios. This option is ignored if logging to syslog
+; as it has to be always buffered.
+; Default value: yes
+;log_buffering = no
+
+; If this number of child processes exit with SIGSEGV or SIGBUS within the time
+; interval set by emergency_restart_interval then FPM will restart. A value
+; of '0' means 'Off'.
+; Default Value: 0
+;emergency_restart_threshold = 0
+
+; Interval of time used by emergency_restart_interval to determine when
+; a graceful restart will be initiated.  This can be useful to work around
+; accidental corruptions in an accelerator's shared memory.
+; Available Units: s(econds), m(inutes), h(ours), or d(ays)
+; Default Unit: seconds
+; Default Value: 0
+;emergency_restart_interval = 0
+
+; Time limit for child processes to wait for a reaction on signals from master.
+; Available units: s(econds), m(inutes), h(ours), or d(ays)
+; Default Unit: seconds
+; Default Value: 0
+;process_control_timeout = 0
+
+; The maximum number of processes FPM will fork. This has been designed to control
+; the global number of processes when using dynamic PM within a lot of pools.
+; Use it with caution.
+; Note: A value of 0 indicates no limit
+; Default Value: 0
+; process.max = 128
+
+; Specify the nice(2) priority to apply to the master process (only if set)
+; The value can vary from -19 (highest priority) to 20 (lowest priority)
+; Note: - It will only work if the FPM master process is launched as root
+;       - The pool process will inherit the master process priority
+;         unless specified otherwise
+; Default Value: no set
+; process.priority = -19
+
+; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
+; Default Value: yes
+;daemonize = yes
+
+; Set open file descriptor rlimit for the master process.
+; Default Value: system defined value
+;rlimit_files = 1024
+
+; Set max core size rlimit for the master process.
+; Possible Values: 'unlimited' or an integer greater or equal to 0
+; Default Value: system defined value
+;rlimit_core = 0
+
+; Specify the event mechanism FPM will use. The following is available:
+; - select     (any POSIX os)
+; - poll       (any POSIX os)
+; - epoll      (linux >= 2.5.44)
+; - kqueue     (FreeBSD >= 4.1, OpenBSD >= 2.9, NetBSD >= 2.0)
+; - /dev/poll  (Solaris >= 7)
+; - port       (Solaris >= 10)
+; Default Value: not set (auto detection)
+;events.mechanism = epoll
+
+; When FPM is built with systemd integration, specify the interval,
+; in seconds, between health report notification to systemd.
+; Set to 0 to disable.
+; Available Units: s(econds), m(inutes), h(ours)
+; Default Unit: seconds
+; Default value: 10
+;systemd_interval = 10
+
+;;;;;;;;;;;;;;;;;;;;
+; Pool Definitions ;
+;;;;;;;;;;;;;;;;;;;;
+
+; Multiple pools of child processes may be started with different listening
+; ports and different management options.  The name of the pool will be
+; used in logs and stats. There is no limitation on the number of pools which
+; FPM can handle. Your system will tell you anyway :)
+
+; Include one or more files. If glob(3) exists, it is used to include a bunch of
+; files from a glob(3) pattern. This directive can be used everywhere in the
+; file.
+; Relative path can also be used. They will be prefixed by:
+;  - the global prefix if it's been set (-p argument)
+;  - /usr/local otherwise
+include=etc/php-fpm.d/*.conf

+ 4 - 0
conf/php/docker-php-spwan-start

@@ -0,0 +1,4 @@
+#!/bin/sh
+set -e
+spawn-fcgi -a 0.0.0.0 -p 9100 -F 1 -f "php /var/www/html/fcgi_run.php"
+tail -f /var/www/html/daemon.log

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1952 - 0
conf/php/php-debug.ini


+ 944 - 0
conf/redis/6379.conf

@@ -0,0 +1,944 @@
+## Generated by install_server.sh ##
+# Redis configuration file example.
+#
+# Note that in order to read the configuration file, Redis must be
+# started with the file path as first argument:
+#
+# ./redis-server /path/to/redis.conf
+
+# Note on units: when memory size is needed, it is possible to specify
+# it in the usual form of 1k 5GB 4M and so forth:
+#
+# 1k => 1000 bytes
+# 1kb => 1024 bytes
+# 1m => 1000000 bytes
+# 1mb => 1024*1024 bytes
+# 1g => 1000000000 bytes
+# 1gb => 1024*1024*1024 bytes
+#
+# units are case insensitive so 1GB 1Gb 1gB are all the same.
+
+################################## INCLUDES ###################################
+
+# Include one or more other config files here.  This is useful if you
+# have a standard template that goes to all Redis servers but also need
+# to customize a few per-server settings.  Include files can include
+# other files, so use this wisely.
+#
+# Notice option "include" won't be rewritten by command "CONFIG REWRITE"
+# from admin or Redis Sentinel. Since Redis always uses the last processed
+# line as value of a configuration directive, you'd better put includes
+# at the beginning of this file to avoid overwriting config change at runtime.
+#
+# If instead you are interested in using includes to override configuration
+# options, it is better to use include as the last line.
+#
+# include /path/to/local.conf
+# include /path/to/other.conf
+
+################################ GENERAL  #####################################
+
+# By default Redis does not run as a daemon. Use 'yes' if you need it.
+# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
+daemonize yes
+
+# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
+# default. You can specify a custom pid file location here.
+pidfile /var/run/redis.pid
+
+# Accept connections on the specified port, default is 6379.
+# If port 0 is specified Redis will not listen on a TCP socket.
+port 6379
+
+# TCP listen() backlog.
+#
+# In high requests-per-second environments you need an high backlog in order
+# to avoid slow clients connections issues. Note that the Linux kernel
+# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
+# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
+# in order to get the desired effect.
+tcp-backlog 511
+
+# By default Redis listens for connections from all the network interfaces
+# available on the server. It is possible to listen to just one or multiple
+# interfaces using the "bind" configuration directive, followed by one or
+# more IP addresses.
+#
+# Examples:
+#
+# bind 192.168.1.100 10.0.0.1
+bind 0.0.0.0
+
+# Specify the path for the Unix socket that will be used to listen for
+# incoming connections. There is no default, so Redis will not listen
+# on a unix socket when not specified.
+#
+# unixsocket /tmp/redis.sock
+# unixsocketperm 700
+
+# Close the connection after a client is idle for N seconds (0 to disable)
+timeout 0
+
+# TCP keepalive.
+#
+# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence
+# of communication. This is useful for two reasons:
+#
+# 1) Detect dead peers.
+# 2) Take the connection alive from the point of view of network
+#    equipment in the middle.
+#
+# On Linux, the specified value (in seconds) is the period used to send ACKs.
+# Note that to close the connection the double of the time is needed.
+# On other kernels the period depends on the kernel configuration.
+#
+# A reasonable value for this option is 60 seconds.
+tcp-keepalive 0
+
+# Specify the server verbosity level.
+# This can be one of:
+# debug (a lot of information, useful for development/testing)
+# verbose (many rarely useful info, but not a mess like the debug level)
+# notice (moderately verbose, what you want in production probably)
+# warning (only very important / critical messages are logged)
+loglevel notice
+
+# Specify the log file name. Also the empty string can be used to force
+# Redis to log on the standard output. Note that if you use standard
+# output for logging but daemonize, logs will be sent to /dev/null
+logfile /var/redis/redis.log
+
+# To enable logging to the system logger, just set 'syslog-enabled' to yes,
+# and optionally update the other syslog parameters to suit your needs.
+# syslog-enabled no
+
+# Specify the syslog identity.
+# syslog-ident redis
+
+# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7.
+# syslog-facility local0
+
+# Set the number of databases. The default database is DB 0, you can select
+# a different one on a per-connection basis using SELECT <dbid> where
+# dbid is a number between 0 and 'databases'-1
+databases 16
+
+################################ SNAPSHOTTING  ################################
+#
+# Save the DB on disk:
+#
+#   save <seconds> <changes>
+#
+#   Will save the DB if both the given number of seconds and the given
+#   number of write operations against the DB occurred.
+#
+#   In the example below the behaviour will be to save:
+#   after 900 sec (15 min) if at least 1 key changed
+#   after 300 sec (5 min) if at least 10 keys changed
+#   after 60 sec if at least 10000 keys changed
+#
+#   Note: you can disable saving completely by commenting out all "save" lines.
+#
+#   It is also possible to remove all the previously configured save
+#   points by adding a save directive with a single empty string argument
+#   like in the following example:
+#
+#   save ""
+
+save 900 1
+save 300 10
+save 60 10000
+
+# By default Redis will stop accepting writes if RDB snapshots are enabled
+# (at least one save point) and the latest background save failed.
+# This will make the user aware (in a hard way) that data is not persisting
+# on disk properly, otherwise chances are that no one will notice and some
+# disaster will happen.
+#
+# If the background saving process will start working again Redis will
+# automatically allow writes again.
+#
+# However if you have setup your proper monitoring of the Redis server
+# and persistence, you may want to disable this feature so that Redis will
+# continue to work as usual even if there are problems with disk,
+# permissions, and so forth.
+stop-writes-on-bgsave-error yes
+
+# Compress string objects using LZF when dump .rdb databases?
+# For default that's set to 'yes' as it's almost always a win.
+# If you want to save some CPU in the saving child set it to 'no' but
+# the dataset will likely be bigger if you have compressible values or keys.
+rdbcompression yes
+
+# Since version 5 of RDB a CRC64 checksum is placed at the end of the file.
+# This makes the format more resistant to corruption but there is a performance
+# hit to pay (around 10%) when saving and loading RDB files, so you can disable it
+# for maximum performances.
+#
+# RDB files created with checksum disabled have a checksum of zero that will
+# tell the loading code to skip the check.
+rdbchecksum yes
+
+# The filename where to dump the DB
+dbfilename dump.rdb
+
+# The working directory.
+#
+# The DB will be written inside this directory, with the filename specified
+# above using the 'dbfilename' configuration directive.
+#
+# The Append Only File will also be created inside this directory.
+#
+# Note that you must specify a directory here, not a file name.
+dir /var/redis
+
+################################# REPLICATION #################################
+
+# Master-Slave replication. Use slaveof to make a Redis instance a copy of
+# another Redis server. A few things to understand ASAP about Redis replication.
+#
+# 1) Redis replication is asynchronous, but you can configure a master to
+#    stop accepting writes if it appears to be not connected with at least
+#    a given number of slaves.
+# 2) Redis slaves are able to perform a partial resynchronization with the
+#    master if the replication link is lost for a relatively small amount of
+#    time. You may want to configure the replication backlog size (see the next
+#    sections of this file) with a sensible value depending on your needs.
+# 3) Replication is automatic and does not need user intervention. After a
+#    network partition slaves automatically try to reconnect to masters
+#    and resynchronize with them.
+#
+# slaveof <masterip> <masterport>
+
+# If the master is password protected (using the "requirepass" configuration
+# directive below) it is possible to tell the slave to authenticate before
+# starting the replication synchronization process, otherwise the master will
+# refuse the slave request.
+#
+# masterauth <master-password>
+
+# When a slave loses its connection with the master, or when the replication
+# is still in progress, the slave can act in two different ways:
+#
+# 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will
+#    still reply to client requests, possibly with out of date data, or the
+#    data set may just be empty if this is the first synchronization.
+#
+# 2) if slave-serve-stale-data is set to 'no' the slave will reply with
+#    an error "SYNC with master in progress" to all the kind of commands
+#    but to INFO and SLAVEOF.
+#
+slave-serve-stale-data yes
+
+# You can configure a slave instance to accept writes or not. Writing against
+# a slave instance may be useful to store some ephemeral data (because data
+# written on a slave will be easily deleted after resync with the master) but
+# may also cause problems if clients are writing to it because of a
+# misconfiguration.
+#
+# Since Redis 2.6 by default slaves are read-only.
+#
+# Note: read only slaves are not designed to be exposed to untrusted clients
+# on the internet. It's just a protection layer against misuse of the instance.
+# Still a read only slave exports by default all the administrative commands
+# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve
+# security of read only slaves using 'rename-command' to shadow all the
+# administrative / dangerous commands.
+slave-read-only yes
+
+# Replication SYNC strategy: disk or socket.
+#
+# -------------------------------------------------------
+# WARNING: DISKLESS REPLICATION IS EXPERIMENTAL CURRENTLY
+# -------------------------------------------------------
+#
+# New slaves and reconnecting slaves that are not able to continue the replication
+# process just receiving differences, need to do what is called a "full
+# synchronization". An RDB file is transmitted from the master to the slaves.
+# The transmission can happen in two different ways:
+#
+# 1) Disk-backed: The Redis master creates a new process that writes the RDB
+#                 file on disk. Later the file is transferred by the parent
+#                 process to the slaves incrementally.
+# 2) Diskless: The Redis master creates a new process that directly writes the
+#              RDB file to slave sockets, without touching the disk at all.
+#
+# With disk-backed replication, while the RDB file is generated, more slaves
+# can be queued and served with the RDB file as soon as the current child producing
+# the RDB file finishes its work. With diskless replication instead once
+# the transfer starts, new slaves arriving will be queued and a new transfer
+# will start when the current one terminates.
+#
+# When diskless replication is used, the master waits a configurable amount of
+# time (in seconds) before starting the transfer in the hope that multiple slaves
+# will arrive and the transfer can be parallelized.
+#
+# With slow disks and fast (large bandwidth) networks, diskless replication
+# works better.
+repl-diskless-sync no
+
+# When diskless replication is enabled, it is possible to configure the delay
+# the server waits in order to spawn the child that transfers the RDB via socket
+# to the slaves.
+#
+# This is important since once the transfer starts, it is not possible to serve
+# new slaves arriving, that will be queued for the next RDB transfer, so the server
+# waits a delay in order to let more slaves arrive.
+#
+# The delay is specified in seconds, and by default is 5 seconds. To disable
+# it entirely just set it to 0 seconds and the transfer will start ASAP.
+repl-diskless-sync-delay 5
+
+# Slaves send PINGs to server in a predefined interval. It's possible to change
+# this interval with the repl_ping_slave_period option. The default value is 10
+# seconds.
+#
+# repl-ping-slave-period 10
+
+# The following option sets the replication timeout for:
+#
+# 1) Bulk transfer I/O during SYNC, from the point of view of slave.
+# 2) Master timeout from the point of view of slaves (data, pings).
+# 3) Slave timeout from the point of view of masters (REPLCONF ACK pings).
+#
+# It is important to make sure that this value is greater than the value
+# specified for repl-ping-slave-period otherwise a timeout will be detected
+# every time there is low traffic between the master and the slave.
+#
+# repl-timeout 60
+
+# Disable TCP_NODELAY on the slave socket after SYNC?
+#
+# If you select "yes" Redis will use a smaller number of TCP packets and
+# less bandwidth to send data to slaves. But this can add a delay for
+# the data to appear on the slave side, up to 40 milliseconds with
+# Linux kernels using a default configuration.
+#
+# If you select "no" the delay for data to appear on the slave side will
+# be reduced but more bandwidth will be used for replication.
+#
+# By default we optimize for low latency, but in very high traffic conditions
+# or when the master and slaves are many hops away, turning this to "yes" may
+# be a good idea.
+repl-disable-tcp-nodelay no
+
+# Set the replication backlog size. The backlog is a buffer that accumulates
+# slave data when slaves are disconnected for some time, so that when a slave
+# wants to reconnect again, often a full resync is not needed, but a partial
+# resync is enough, just passing the portion of data the slave missed while
+# disconnected.
+#
+# The bigger the replication backlog, the longer the time the slave can be
+# disconnected and later be able to perform a partial resynchronization.
+#
+# The backlog is only allocated once there is at least a slave connected.
+#
+# repl-backlog-size 1mb
+
+# After a master has no longer connected slaves for some time, the backlog
+# will be freed. The following option configures the amount of seconds that
+# need to elapse, starting from the time the last slave disconnected, for
+# the backlog buffer to be freed.
+#
+# A value of 0 means to never release the backlog.
+#
+# repl-backlog-ttl 3600
+
+# The slave priority is an integer number published by Redis in the INFO output.
+# It is used by Redis Sentinel in order to select a slave to promote into a
+# master if the master is no longer working correctly.
+#
+# A slave with a low priority number is considered better for promotion, so
+# for instance if there are three slaves with priority 10, 100, 25 Sentinel will
+# pick the one with priority 10, that is the lowest.
+#
+# However a special priority of 0 marks the slave as not able to perform the
+# role of master, so a slave with priority of 0 will never be selected by
+# Redis Sentinel for promotion.
+#
+# By default the priority is 100.
+slave-priority 100
+
+# It is possible for a master to stop accepting writes if there are less than
+# N slaves connected, having a lag less or equal than M seconds.
+#
+# The N slaves need to be in "online" state.
+#
+# The lag in seconds, that must be <= the specified value, is calculated from
+# the last ping received from the slave, that is usually sent every second.
+#
+# This option does not GUARANTEE that N replicas will accept the write, but
+# will limit the window of exposure for lost writes in case not enough slaves
+# are available, to the specified number of seconds.
+#
+# For example to require at least 3 slaves with a lag <= 10 seconds use:
+#
+# min-slaves-to-write 3
+# min-slaves-max-lag 10
+#
+# Setting one or the other to 0 disables the feature.
+#
+# By default min-slaves-to-write is set to 0 (feature disabled) and
+# min-slaves-max-lag is set to 10.
+
+################################## SECURITY ###################################
+
+# Require clients to issue AUTH <PASSWORD> before processing any other
+# commands.  This might be useful in environments in which you do not trust
+# others with access to the host running redis-server.
+#
+# This should stay commented out for backward compatibility and because most
+# people do not need auth (e.g. they run their own servers).
+#
+# Warning: since Redis is pretty fast an outside user can try up to
+# 150k passwords per second against a good box. This means that you should
+# use a very strong password otherwise it will be very easy to break.
+#
+# requirepass foobared
+
+# Command renaming.
+#
+# It is possible to change the name of dangerous commands in a shared
+# environment. For instance the CONFIG command may be renamed into something
+# hard to guess so that it will still be available for internal-use tools
+# but not available for general clients.
+#
+# Example:
+#
+# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
+#
+# It is also possible to completely kill a command by renaming it into
+# an empty string:
+#
+# rename-command CONFIG ""
+#
+# Please note that changing the name of commands that are logged into the
+# AOF file or transmitted to slaves may cause problems.
+
+################################### LIMITS ####################################
+
+# Set the max number of connected clients at the same time. By default
+# this limit is set to 10000 clients, however if the Redis server is not
+# able to configure the process file limit to allow for the specified limit
+# the max number of allowed clients is set to the current file limit
+# minus 32 (as Redis reserves a few file descriptors for internal uses).
+#
+# Once the limit is reached Redis will close all the new connections sending
+# an error 'max number of clients reached'.
+#
+# maxclients 10000
+
+# Don't use more memory than the specified amount of bytes.
+# When the memory limit is reached Redis will try to remove keys
+# according to the eviction policy selected (see maxmemory-policy).
+#
+# If Redis can't remove keys according to the policy, or if the policy is
+# set to 'noeviction', Redis will start to reply with errors to commands
+# that would use more memory, like SET, LPUSH, and so on, and will continue
+# to reply to read-only commands like GET.
+#
+# This option is usually useful when using Redis as an LRU cache, or to set
+# a hard memory limit for an instance (using the 'noeviction' policy).
+#
+# WARNING: If you have slaves attached to an instance with maxmemory on,
+# the size of the output buffers needed to feed the slaves are subtracted
+# from the used memory count, so that network problems / resyncs will
+# not trigger a loop where keys are evicted, and in turn the output
+# buffer of slaves is full with DELs of keys evicted triggering the deletion
+# of more keys, and so forth until the database is completely emptied.
+#
+# In short... if you have slaves attached it is suggested that you set a lower
+# limit for maxmemory so that there is some free RAM on the system for slave
+# output buffers (but this is not needed if the policy is 'noeviction').
+#
+# maxmemory <bytes>
+
+# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
+# is reached. You can select among five behaviors:
+#
+# volatile-lru -> remove the key with an expire set using an LRU algorithm
+# allkeys-lru -> remove any key according to the LRU algorithm
+# volatile-random -> remove a random key with an expire set
+# allkeys-random -> remove a random key, any key
+# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
+# noeviction -> don't expire at all, just return an error on write operations
+#
+# Note: with any of the above policies, Redis will return an error on write
+#       operations, when there are no suitable keys for eviction.
+#
+#       At the date of writing these commands are: set setnx setex append
+#       incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
+#       sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
+#       zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
+#       getset mset msetnx exec sort
+#
+# The default is:
+#
+# maxmemory-policy noeviction
+
+# LRU and minimal TTL algorithms are not precise algorithms but approximated
+# algorithms (in order to save memory), so you can tune it for speed or
+# accuracy. For default Redis will check five keys and pick the one that was
+# used less recently, you can change the sample size using the following
+# configuration directive.
+#
+# The default of 5 produces good enough results. 10 Approximates very closely
+# true LRU but costs a bit more CPU. 3 is very fast but not very accurate.
+#
+# maxmemory-samples 5
+
+############################## APPEND ONLY MODE ###############################
+
+# By default Redis asynchronously dumps the dataset on disk. This mode is
+# good enough in many applications, but an issue with the Redis process or
+# a power outage may result into a few minutes of writes lost (depending on
+# the configured save points).
+#
+# The Append Only File is an alternative persistence mode that provides
+# much better durability. For instance using the default data fsync policy
+# (see later in the config file) Redis can lose just one second of writes in a
+# dramatic event like a server power outage, or a single write if something
+# wrong with the Redis process itself happens, but the operating system is
+# still running correctly.
+#
+# AOF and RDB persistence can be enabled at the same time without problems.
+# If the AOF is enabled on startup Redis will load the AOF, that is the file
+# with the better durability guarantees.
+#
+# Please check http://redis.io/topics/persistence for more information.
+
+appendonly no
+
+# The name of the append only file (default: "appendonly.aof")
+
+appendfilename "appendonly.aof"
+
+# The fsync() call tells the Operating System to actually write data on disk
+# instead of waiting for more data in the output buffer. Some OS will really flush
+# data on disk, some other OS will just try to do it ASAP.
+#
+# Redis supports three different modes:
+#
+# no: don't fsync, just let the OS flush the data when it wants. Faster.
+# always: fsync after every write to the append only log. Slow, Safest.
+# everysec: fsync only one time every second. Compromise.
+#
+# The default is "everysec", as that's usually the right compromise between
+# speed and data safety. It's up to you to understand if you can relax this to
+# "no" that will let the operating system flush the output buffer when
+# it wants, for better performances (but if you can live with the idea of
+# some data loss consider the default persistence mode that's snapshotting),
+# or on the contrary, use "always" that's very slow but a bit safer than
+# everysec.
+#
+# More details please check the following article:
+# http://antirez.com/post/redis-persistence-demystified.html
+#
+# If unsure, use "everysec".
+
+# appendfsync always
+appendfsync everysec
+# appendfsync no
+
+# When the AOF fsync policy is set to always or everysec, and a background
+# saving process (a background save or AOF log background rewriting) is
+# performing a lot of I/O against the disk, in some Linux configurations
+# Redis may block too long on the fsync() call. Note that there is no fix for
+# this currently, as even performing fsync in a different thread will block
+# our synchronous write(2) call.
+#
+# In order to mitigate this problem it's possible to use the following option
+# that will prevent fsync() from being called in the main process while a
+# BGSAVE or BGREWRITEAOF is in progress.
+#
+# This means that while another child is saving, the durability of Redis is
+# the same as "appendfsync none". In practical terms, this means that it is
+# possible to lose up to 30 seconds of log in the worst scenario (with the
+# default Linux settings).
+#
+# If you have latency problems turn this to "yes". Otherwise leave it as
+# "no" that is the safest pick from the point of view of durability.
+
+no-appendfsync-on-rewrite no
+
+# Automatic rewrite of the append only file.
+# Redis is able to automatically rewrite the log file implicitly calling
+# BGREWRITEAOF when the AOF log size grows by the specified percentage.
+#
+# This is how it works: Redis remembers the size of the AOF file after the
+# latest rewrite (if no rewrite has happened since the restart, the size of
+# the AOF at startup is used).
+#
+# This base size is compared to the current size. If the current size is
+# bigger than the specified percentage, the rewrite is triggered. Also
+# you need to specify a minimal size for the AOF file to be rewritten, this
+# is useful to avoid rewriting the AOF file even if the percentage increase
+# is reached but it is still pretty small.
+#
+# Specify a percentage of zero in order to disable the automatic AOF
+# rewrite feature.
+
+auto-aof-rewrite-percentage 100
+auto-aof-rewrite-min-size 64mb
+
+# An AOF file may be found to be truncated at the end during the Redis
+# startup process, when the AOF data gets loaded back into memory.
+# This may happen when the system where Redis is running
+# crashes, especially when an ext4 filesystem is mounted without the
+# data=ordered option (however this can't happen when Redis itself
+# crashes or aborts but the operating system still works correctly).
+#
+# Redis can either exit with an error when this happens, or load as much
+# data as possible (the default now) and start if the AOF file is found
+# to be truncated at the end. The following option controls this behavior.
+#
+# If aof-load-truncated is set to yes, a truncated AOF file is loaded and
+# the Redis server starts emitting a log to inform the user of the event.
+# Otherwise if the option is set to no, the server aborts with an error
+# and refuses to start. When the option is set to no, the user requires
+# to fix the AOF file using the "redis-check-aof" utility before to restart
+# the server.
+#
+# Note that if the AOF file will be found to be corrupted in the middle
+# the server will still exit with an error. This option only applies when
+# Redis will try to read more data from the AOF file but not enough bytes
+# will be found.
+aof-load-truncated yes
+
+################################ LUA SCRIPTING  ###############################
+
+# Max execution time of a Lua script in milliseconds.
+#
+# If the maximum execution time is reached Redis will log that a script is
+# still in execution after the maximum allowed time and will start to
+# reply to queries with an error.
+#
+# When a long running script exceeds the maximum execution time only the
+# SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be
+# used to stop a script that did not yet called write commands. The second
+# is the only way to shut down the server in the case a write command was
+# already issued by the script but the user doesn't want to wait for the natural
+# termination of the script.
+#
+# Set it to 0 or a negative value for unlimited execution without warnings.
+lua-time-limit 5000
+
+################################ REDIS CLUSTER  ###############################
+#
+# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+# WARNING EXPERIMENTAL: Redis Cluster is considered to be stable code, however
+# in order to mark it as "mature" we need to wait for a non trivial percentage
+# of users to deploy it in production.
+# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#
+# Normal Redis instances can't be part of a Redis Cluster; only nodes that are
+# started as cluster nodes can. In order to start a Redis instance as a
+# cluster node enable the cluster support uncommenting the following:
+#
+# cluster-enabled yes
+
+# Every cluster node has a cluster configuration file. This file is not
+# intended to be edited by hand. It is created and updated by Redis nodes.
+# Every Redis Cluster node requires a different cluster configuration file.
+# Make sure that instances running in the same system do not have
+# overlapping cluster configuration file names.
+#
+# cluster-config-file nodes-6379.conf
+
+# Cluster node timeout is the amount of milliseconds a node must be unreachable
+# for it to be considered in failure state.
+# Most other internal time limits are multiple of the node timeout.
+#
+# cluster-node-timeout 15000
+
+# A slave of a failing master will avoid to start a failover if its data
+# looks too old.
+#
+# There is no simple way for a slave to actually have a exact measure of
+# its "data age", so the following two checks are performed:
+#
+# 1) If there are multiple slaves able to failover, they exchange messages
+#    in order to try to give an advantage to the slave with the best
+#    replication offset (more data from the master processed).
+#    Slaves will try to get their rank by offset, and apply to the start
+#    of the failover a delay proportional to their rank.
+#
+# 2) Every single slave computes the time of the last interaction with
+#    its master. This can be the last ping or command received (if the master
+#    is still in the "connected" state), or the time that elapsed since the
+#    disconnection with the master (if the replication link is currently down).
+#    If the last interaction is too old, the slave will not try to failover
+#    at all.
+#
+# The point "2" can be tuned by user. Specifically a slave will not perform
+# the failover if, since the last interaction with the master, the time
+# elapsed is greater than:
+#
+#   (node-timeout * slave-validity-factor) + repl-ping-slave-period
+#
+# So for example if node-timeout is 30 seconds, and the slave-validity-factor
+# is 10, and assuming a default repl-ping-slave-period of 10 seconds, the
+# slave will not try to failover if it was not able to talk with the master
+# for longer than 310 seconds.
+#
+# A large slave-validity-factor may allow slaves with too old data to failover
+# a master, while a too small value may prevent the cluster from being able to
+# elect a slave at all.
+#
+# For maximum availability, it is possible to set the slave-validity-factor
+# to a value of 0, which means, that slaves will always try to failover the
+# master regardless of the last time they interacted with the master.
+# (However they'll always try to apply a delay proportional to their
+# offset rank).
+#
+# Zero is the only value able to guarantee that when all the partitions heal
+# the cluster will always be able to continue.
+#
+# cluster-slave-validity-factor 10
+
+# Cluster slaves are able to migrate to orphaned masters, that are masters
+# that are left without working slaves. This improves the cluster ability
+# to resist to failures as otherwise an orphaned master can't be failed over
+# in case of failure if it has no working slaves.
+#
+# Slaves migrate to orphaned masters only if there are still at least a
+# given number of other working slaves for their old master. This number
+# is the "migration barrier". A migration barrier of 1 means that a slave
+# will migrate only if there is at least 1 other working slave for its master
+# and so forth. It usually reflects the number of slaves you want for every
+# master in your cluster.
+#
+# Default is 1 (slaves migrate only if their masters remain with at least
+# one slave). To disable migration just set it to a very large value.
+# A value of 0 can be set but is useful only for debugging and dangerous
+# in production.
+#
+# cluster-migration-barrier 1
+
+# By default Redis Cluster nodes stop accepting queries if they detect there
+# is at least an hash slot uncovered (no available node is serving it).
+# This way if the cluster is partially down (for example a range of hash slots
+# are no longer covered) all the cluster becomes, eventually, unavailable.
+# It automatically returns available as soon as all the slots are covered again.
+#
+# However sometimes you want the subset of the cluster which is working,
+# to continue to accept queries for the part of the key space that is still
+# covered. In order to do so, just set the cluster-require-full-coverage
+# option to no.
+#
+# cluster-require-full-coverage yes
+
+# In order to setup your cluster make sure to read the documentation
+# available at http://redis.io web site.
+
+################################## SLOW LOG ###################################
+
+# The Redis Slow Log is a system to log queries that exceeded a specified
+# execution time. The execution time does not include the I/O operations
+# like talking with the client, sending the reply and so forth,
+# but just the time needed to actually execute the command (this is the only
+# stage of command execution where the thread is blocked and can not serve
+# other requests in the meantime).
+#
+# You can configure the slow log with two parameters: one tells Redis
+# what is the execution time, in microseconds, to exceed in order for the
+# command to get logged, and the other parameter is the length of the
+# slow log. When a new command is logged the oldest one is removed from the
+# queue of logged commands.
+
+# The following time is expressed in microseconds, so 1000000 is equivalent
+# to one second. Note that a negative number disables the slow log, while
+# a value of zero forces the logging of every command.
+slowlog-log-slower-than 10000
+
+# There is no limit to this length. Just be aware that it will consume memory.
+# You can reclaim memory used by the slow log with SLOWLOG RESET.
+slowlog-max-len 128
+
+################################ LATENCY MONITOR ##############################
+
+# The Redis latency monitoring subsystem samples different operations
+# at runtime in order to collect data related to possible sources of
+# latency of a Redis instance.
+#
+# Via the LATENCY command this information is available to the user that can
+# print graphs and obtain reports.
+#
+# The system only logs operations that were performed in a time equal or
+# greater than the amount of milliseconds specified via the
+# latency-monitor-threshold configuration directive. When its value is set
+# to zero, the latency monitor is turned off.
+#
+# By default latency monitoring is disabled since it is mostly not needed
+# if you don't have latency issues, and collecting data has a performance
+# impact, that while very small, can be measured under big load. Latency
+# monitoring can easily be enabled at runtime using the command
+# "CONFIG SET latency-monitor-threshold <milliseconds>" if needed.
+latency-monitor-threshold 0
+
+############################# EVENT NOTIFICATION ##############################
+
+# Redis can notify Pub/Sub clients about events happening in the key space.
+# This feature is documented at http://redis.io/topics/notifications
+#
+# For instance if keyspace events notification is enabled, and a client
+# performs a DEL operation on key "foo" stored in the Database 0, two
+# messages will be published via Pub/Sub:
+#
+# PUBLISH __keyspace@0__:foo del
+# PUBLISH __keyevent@0__:del foo
+#
+# It is possible to select the events that Redis will notify among a set
+# of classes. Every class is identified by a single character:
+#
+#  K     Keyspace events, published with __keyspace@<db>__ prefix.
+#  E     Keyevent events, published with __keyevent@<db>__ prefix.
+#  g     Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
+#  $     String commands
+#  l     List commands
+#  s     Set commands
+#  h     Hash commands
+#  z     Sorted set commands
+#  x     Expired events (events generated every time a key expires)
+#  e     Evicted events (events generated when a key is evicted for maxmemory)
+#  A     Alias for g$lshzxe, so that the "AKE" string means all the events.
+#
+#  The "notify-keyspace-events" takes as argument a string that is composed
+#  of zero or multiple characters. The empty string means that notifications
+#  are disabled.
+#
+#  Example: to enable list and generic events, from the point of view of the
+#           event name, use:
+#
+#  notify-keyspace-events Elg
+#
+#  Example 2: to get the stream of the expired keys subscribing to channel
+#             name __keyevent@0__:expired use:
+#
+#  notify-keyspace-events Ex
+#
+#  By default all notifications are disabled because most users don't need
+#  this feature and the feature has some overhead. Note that if you don't
+#  specify at least one of K or E, no events will be delivered.
+notify-keyspace-events Ex
+
+############################### ADVANCED CONFIG ###############################
+
+# Hashes are encoded using a memory efficient data structure when they have a
+# small number of entries, and the biggest entry does not exceed a given
+# threshold. These thresholds can be configured using the following directives.
+hash-max-ziplist-entries 512
+hash-max-ziplist-value 64
+
+# Similarly to hashes, small lists are also encoded in a special way in order
+# to save a lot of space. The special representation is only used when
+# you are under the following limits:
+list-max-ziplist-entries 512
+list-max-ziplist-value 64
+
+# Sets have a special encoding in just one case: when a set is composed
+# of just strings that happen to be integers in radix 10 in the range
+# of 64 bit signed integers.
+# The following configuration setting sets the limit in the size of the
+# set in order to use this special memory saving encoding.
+set-max-intset-entries 512
+
+# Similarly to hashes and lists, sorted sets are also specially encoded in
+# order to save a lot of space. This encoding is only used when the length and
+# elements of a sorted set are below the following limits:
+zset-max-ziplist-entries 128
+zset-max-ziplist-value 64
+
+# HyperLogLog sparse representation bytes limit. The limit includes the
+# 16 bytes header. When an HyperLogLog using the sparse representation crosses
+# this limit, it is converted into the dense representation.
+#
+# A value greater than 16000 is totally useless, since at that point the
+# dense representation is more memory efficient.
+#
+# The suggested value is ~ 3000 in order to have the benefits of
+# the space efficient encoding without slowing down too much PFADD,
+# which is O(N) with the sparse encoding. The value can be raised to
+# ~ 10000 when CPU is not a concern, but space is, and the data set is
+# composed of many HyperLogLogs with cardinality in the 0 - 15000 range.
+hll-sparse-max-bytes 3000
+
+# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in
+# order to help rehashing the main Redis hash table (the one mapping top-level
+# keys to values). The hash table implementation Redis uses (see dict.c)
+# performs a lazy rehashing: the more operation you run into a hash table
+# that is rehashing, the more rehashing "steps" are performed, so if the
+# server is idle the rehashing is never complete and some more memory is used
+# by the hash table.
+#
+# The default is to use this millisecond 10 times every second in order to
+# actively rehash the main dictionaries, freeing memory when possible.
+#
+# If unsure:
+# use "activerehashing no" if you have hard latency requirements and it is
+# not a good thing in your environment that Redis can reply from time to time
+# to queries with 2 milliseconds delay.
+#
+# use "activerehashing yes" if you don't have such hard requirements but
+# want to free memory asap when possible.
+activerehashing yes
+
+# The client output buffer limits can be used to force disconnection of clients
+# that are not reading data from the server fast enough for some reason (a
+# common reason is that a Pub/Sub client can't consume messages as fast as the
+# publisher can produce them).
+#
+# The limit can be set differently for the three different classes of clients:
+#
+# normal -> normal clients including MONITOR clients
+# slave  -> slave clients
+# pubsub -> clients subscribed to at least one pubsub channel or pattern
+#
+# The syntax of every client-output-buffer-limit directive is the following:
+#
+# client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
+#
+# A client is immediately disconnected once the hard limit is reached, or if
+# the soft limit is reached and remains reached for the specified number of
+# seconds (continuously).
+# So for instance if the hard limit is 32 megabytes and the soft limit is
+# 16 megabytes / 10 seconds, the client will get disconnected immediately
+# if the size of the output buffers reach 32 megabytes, but will also get
+# disconnected if the client reaches 16 megabytes and continuously overcomes
+# the limit for 10 seconds.
+#
+# By default normal clients are not limited because they don't receive data
+# without asking (in a push way), but just after a request, so only
+# asynchronous clients may create a scenario where data is requested faster
+# than it can read.
+#
+# Instead there is a default limit for pubsub and slave clients, since
+# subscribers and slaves receive data in a push fashion.
+#
+# Both the hard or the soft limit can be disabled by setting them to zero.
+client-output-buffer-limit normal 0 0 0
+client-output-buffer-limit slave 256mb 64mb 60
+client-output-buffer-limit pubsub 32mb 8mb 60
+
+# Redis calls an internal function to perform many background tasks, like
+# closing connections of clients in timeout, purging expired keys that are
+# never requested, and so forth.
+#
+# Not all tasks are performed with the same frequency, but Redis checks for
+# tasks to perform according to the specified "hz" value.
+#
+# By default "hz" is set to 10. Raising the value will use more CPU when
+# Redis is idle, but at the same time will make Redis more responsive when
+# there are many keys expiring at the same time, and timeouts may be
+# handled with more precision.
+#
+# The range is between 1 and 500, however a value over 100 is usually not
+# a good idea. Most users should use the default of 10 and raise this up to
+# 100 only in environments where very low latency is required.
+hz 10
+
+# When a child rewrites the AOF file, if the following option is enabled
+# the file will be fsync-ed every 32 MB of data generated. This is useful
+# in order to commit the file to the disk more incrementally and avoid
+# big latency spikes.
+aof-rewrite-incremental-fsync yes

+ 944 - 0
conf/redis/6380.conf

@@ -0,0 +1,944 @@
+## Generated by install_server.sh ##
+# Redis configuration file example.
+#
+# Note that in order to read the configuration file, Redis must be
+# started with the file path as first argument:
+#
+# ./redis-server /path/to/redis.conf
+
+# Note on units: when memory size is needed, it is possible to specify
+# it in the usual form of 1k 5GB 4M and so forth:
+#
+# 1k => 1000 bytes
+# 1kb => 1024 bytes
+# 1m => 1000000 bytes
+# 1mb => 1024*1024 bytes
+# 1g => 1000000000 bytes
+# 1gb => 1024*1024*1024 bytes
+#
+# units are case insensitive so 1GB 1Gb 1gB are all the same.
+
+################################## INCLUDES ###################################
+
+# Include one or more other config files here.  This is useful if you
+# have a standard template that goes to all Redis servers but also need
+# to customize a few per-server settings.  Include files can include
+# other files, so use this wisely.
+#
+# Notice option "include" won't be rewritten by command "CONFIG REWRITE"
+# from admin or Redis Sentinel. Since Redis always uses the last processed
+# line as value of a configuration directive, you'd better put includes
+# at the beginning of this file to avoid overwriting config change at runtime.
+#
+# If instead you are interested in using includes to override configuration
+# options, it is better to use include as the last line.
+#
+# include /path/to/local.conf
+# include /path/to/other.conf
+
+################################ GENERAL  #####################################
+
+# By default Redis does not run as a daemon. Use 'yes' if you need it.
+# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
+daemonize yes
+
+# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
+# default. You can specify a custom pid file location here.
+pidfile /var/run/redis.pid
+
+# Accept connections on the specified port, default is 6379.
+# If port 0 is specified Redis will not listen on a TCP socket.
+port 6380
+
+# TCP listen() backlog.
+#
+# In high requests-per-second environments you need an high backlog in order
+# to avoid slow clients connections issues. Note that the Linux kernel
+# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
+# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
+# in order to get the desired effect.
+tcp-backlog 511
+
+# By default Redis listens for connections from all the network interfaces
+# available on the server. It is possible to listen to just one or multiple
+# interfaces using the "bind" configuration directive, followed by one or
+# more IP addresses.
+#
+# Examples:
+#
+# bind 192.168.1.100 10.0.0.1
+bind 0.0.0.0
+
+# Specify the path for the Unix socket that will be used to listen for
+# incoming connections. There is no default, so Redis will not listen
+# on a unix socket when not specified.
+#
+# unixsocket /tmp/redis.sock
+# unixsocketperm 700
+
+# Close the connection after a client is idle for N seconds (0 to disable)
+timeout 0
+
+# TCP keepalive.
+#
+# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence
+# of communication. This is useful for two reasons:
+#
+# 1) Detect dead peers.
+# 2) Take the connection alive from the point of view of network
+#    equipment in the middle.
+#
+# On Linux, the specified value (in seconds) is the period used to send ACKs.
+# Note that to close the connection the double of the time is needed.
+# On other kernels the period depends on the kernel configuration.
+#
+# A reasonable value for this option is 60 seconds.
+tcp-keepalive 0
+
+# Specify the server verbosity level.
+# This can be one of:
+# debug (a lot of information, useful for development/testing)
+# verbose (many rarely useful info, but not a mess like the debug level)
+# notice (moderately verbose, what you want in production probably)
+# warning (only very important / critical messages are logged)
+loglevel notice
+
+# Specify the log file name. Also the empty string can be used to force
+# Redis to log on the standard output. Note that if you use standard
+# output for logging but daemonize, logs will be sent to /dev/null
+logfile /var/redis/redis-6380.log
+
+# To enable logging to the system logger, just set 'syslog-enabled' to yes,
+# and optionally update the other syslog parameters to suit your needs.
+# syslog-enabled no
+
+# Specify the syslog identity.
+# syslog-ident redis
+
+# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7.
+# syslog-facility local0
+
+# Set the number of databases. The default database is DB 0, you can select
+# a different one on a per-connection basis using SELECT <dbid> where
+# dbid is a number between 0 and 'databases'-1
+databases 16
+
+################################ SNAPSHOTTING  ################################
+#
+# Save the DB on disk:
+#
+#   save <seconds> <changes>
+#
+#   Will save the DB if both the given number of seconds and the given
+#   number of write operations against the DB occurred.
+#
+#   In the example below the behaviour will be to save:
+#   after 900 sec (15 min) if at least 1 key changed
+#   after 300 sec (5 min) if at least 10 keys changed
+#   after 60 sec if at least 10000 keys changed
+#
+#   Note: you can disable saving completely by commenting out all "save" lines.
+#
+#   It is also possible to remove all the previously configured save
+#   points by adding a save directive with a single empty string argument
+#   like in the following example:
+#
+#   save ""
+
+save 900 1
+save 300 10
+save 60 10000
+
+# By default Redis will stop accepting writes if RDB snapshots are enabled
+# (at least one save point) and the latest background save failed.
+# This will make the user aware (in a hard way) that data is not persisting
+# on disk properly, otherwise chances are that no one will notice and some
+# disaster will happen.
+#
+# If the background saving process will start working again Redis will
+# automatically allow writes again.
+#
+# However if you have setup your proper monitoring of the Redis server
+# and persistence, you may want to disable this feature so that Redis will
+# continue to work as usual even if there are problems with disk,
+# permissions, and so forth.
+stop-writes-on-bgsave-error yes
+
+# Compress string objects using LZF when dump .rdb databases?
+# For default that's set to 'yes' as it's almost always a win.
+# If you want to save some CPU in the saving child set it to 'no' but
+# the dataset will likely be bigger if you have compressible values or keys.
+rdbcompression yes
+
+# Since version 5 of RDB a CRC64 checksum is placed at the end of the file.
+# This makes the format more resistant to corruption but there is a performance
+# hit to pay (around 10%) when saving and loading RDB files, so you can disable it
+# for maximum performances.
+#
+# RDB files created with checksum disabled have a checksum of zero that will
+# tell the loading code to skip the check.
+rdbchecksum yes
+
+# The filename where to dump the DB
+dbfilename dump.rdb
+
+# The working directory.
+#
+# The DB will be written inside this directory, with the filename specified
+# above using the 'dbfilename' configuration directive.
+#
+# The Append Only File will also be created inside this directory.
+#
+# Note that you must specify a directory here, not a file name.
+dir /var/redis
+
+################################# REPLICATION #################################
+
+# Master-Slave replication. Use slaveof to make a Redis instance a copy of
+# another Redis server. A few things to understand ASAP about Redis replication.
+#
+# 1) Redis replication is asynchronous, but you can configure a master to
+#    stop accepting writes if it appears to be not connected with at least
+#    a given number of slaves.
+# 2) Redis slaves are able to perform a partial resynchronization with the
+#    master if the replication link is lost for a relatively small amount of
+#    time. You may want to configure the replication backlog size (see the next
+#    sections of this file) with a sensible value depending on your needs.
+# 3) Replication is automatic and does not need user intervention. After a
+#    network partition slaves automatically try to reconnect to masters
+#    and resynchronize with them.
+#
+# slaveof <masterip> <masterport>
+
+# If the master is password protected (using the "requirepass" configuration
+# directive below) it is possible to tell the slave to authenticate before
+# starting the replication synchronization process, otherwise the master will
+# refuse the slave request.
+#
+# masterauth <master-password>
+
+# When a slave loses its connection with the master, or when the replication
+# is still in progress, the slave can act in two different ways:
+#
+# 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will
+#    still reply to client requests, possibly with out of date data, or the
+#    data set may just be empty if this is the first synchronization.
+#
+# 2) if slave-serve-stale-data is set to 'no' the slave will reply with
+#    an error "SYNC with master in progress" to all the kind of commands
+#    but to INFO and SLAVEOF.
+#
+slave-serve-stale-data yes
+
+# You can configure a slave instance to accept writes or not. Writing against
+# a slave instance may be useful to store some ephemeral data (because data
+# written on a slave will be easily deleted after resync with the master) but
+# may also cause problems if clients are writing to it because of a
+# misconfiguration.
+#
+# Since Redis 2.6 by default slaves are read-only.
+#
+# Note: read only slaves are not designed to be exposed to untrusted clients
+# on the internet. It's just a protection layer against misuse of the instance.
+# Still a read only slave exports by default all the administrative commands
+# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve
+# security of read only slaves using 'rename-command' to shadow all the
+# administrative / dangerous commands.
+slave-read-only yes
+
+# Replication SYNC strategy: disk or socket.
+#
+# -------------------------------------------------------
+# WARNING: DISKLESS REPLICATION IS EXPERIMENTAL CURRENTLY
+# -------------------------------------------------------
+#
+# New slaves and reconnecting slaves that are not able to continue the replication
+# process just receiving differences, need to do what is called a "full
+# synchronization". An RDB file is transmitted from the master to the slaves.
+# The transmission can happen in two different ways:
+#
+# 1) Disk-backed: The Redis master creates a new process that writes the RDB
+#                 file on disk. Later the file is transferred by the parent
+#                 process to the slaves incrementally.
+# 2) Diskless: The Redis master creates a new process that directly writes the
+#              RDB file to slave sockets, without touching the disk at all.
+#
+# With disk-backed replication, while the RDB file is generated, more slaves
+# can be queued and served with the RDB file as soon as the current child producing
+# the RDB file finishes its work. With diskless replication instead once
+# the transfer starts, new slaves arriving will be queued and a new transfer
+# will start when the current one terminates.
+#
+# When diskless replication is used, the master waits a configurable amount of
+# time (in seconds) before starting the transfer in the hope that multiple slaves
+# will arrive and the transfer can be parallelized.
+#
+# With slow disks and fast (large bandwidth) networks, diskless replication
+# works better.
+repl-diskless-sync no
+
+# When diskless replication is enabled, it is possible to configure the delay
+# the server waits in order to spawn the child that transfers the RDB via socket
+# to the slaves.
+#
+# This is important since once the transfer starts, it is not possible to serve
+# new slaves arriving, that will be queued for the next RDB transfer, so the server
+# waits a delay in order to let more slaves arrive.
+#
+# The delay is specified in seconds, and by default is 5 seconds. To disable
+# it entirely just set it to 0 seconds and the transfer will start ASAP.
+repl-diskless-sync-delay 5
+
+# Slaves send PINGs to server in a predefined interval. It's possible to change
+# this interval with the repl_ping_slave_period option. The default value is 10
+# seconds.
+#
+# repl-ping-slave-period 10
+
+# The following option sets the replication timeout for:
+#
+# 1) Bulk transfer I/O during SYNC, from the point of view of slave.
+# 2) Master timeout from the point of view of slaves (data, pings).
+# 3) Slave timeout from the point of view of masters (REPLCONF ACK pings).
+#
+# It is important to make sure that this value is greater than the value
+# specified for repl-ping-slave-period otherwise a timeout will be detected
+# every time there is low traffic between the master and the slave.
+#
+# repl-timeout 60
+
+# Disable TCP_NODELAY on the slave socket after SYNC?
+#
+# If you select "yes" Redis will use a smaller number of TCP packets and
+# less bandwidth to send data to slaves. But this can add a delay for
+# the data to appear on the slave side, up to 40 milliseconds with
+# Linux kernels using a default configuration.
+#
+# If you select "no" the delay for data to appear on the slave side will
+# be reduced but more bandwidth will be used for replication.
+#
+# By default we optimize for low latency, but in very high traffic conditions
+# or when the master and slaves are many hops away, turning this to "yes" may
+# be a good idea.
+repl-disable-tcp-nodelay no
+
+# Set the replication backlog size. The backlog is a buffer that accumulates
+# slave data when slaves are disconnected for some time, so that when a slave
+# wants to reconnect again, often a full resync is not needed, but a partial
+# resync is enough, just passing the portion of data the slave missed while
+# disconnected.
+#
+# The bigger the replication backlog, the longer the time the slave can be
+# disconnected and later be able to perform a partial resynchronization.
+#
+# The backlog is only allocated once there is at least a slave connected.
+#
+# repl-backlog-size 1mb
+
+# After a master has no longer connected slaves for some time, the backlog
+# will be freed. The following option configures the amount of seconds that
+# need to elapse, starting from the time the last slave disconnected, for
+# the backlog buffer to be freed.
+#
+# A value of 0 means to never release the backlog.
+#
+# repl-backlog-ttl 3600
+
+# The slave priority is an integer number published by Redis in the INFO output.
+# It is used by Redis Sentinel in order to select a slave to promote into a
+# master if the master is no longer working correctly.
+#
+# A slave with a low priority number is considered better for promotion, so
+# for instance if there are three slaves with priority 10, 100, 25 Sentinel will
+# pick the one with priority 10, that is the lowest.
+#
+# However a special priority of 0 marks the slave as not able to perform the
+# role of master, so a slave with priority of 0 will never be selected by
+# Redis Sentinel for promotion.
+#
+# By default the priority is 100.
+slave-priority 100
+
+# It is possible for a master to stop accepting writes if there are less than
+# N slaves connected, having a lag less or equal than M seconds.
+#
+# The N slaves need to be in "online" state.
+#
+# The lag in seconds, that must be <= the specified value, is calculated from
+# the last ping received from the slave, that is usually sent every second.
+#
+# This option does not GUARANTEE that N replicas will accept the write, but
+# will limit the window of exposure for lost writes in case not enough slaves
+# are available, to the specified number of seconds.
+#
+# For example to require at least 3 slaves with a lag <= 10 seconds use:
+#
+# min-slaves-to-write 3
+# min-slaves-max-lag 10
+#
+# Setting one or the other to 0 disables the feature.
+#
+# By default min-slaves-to-write is set to 0 (feature disabled) and
+# min-slaves-max-lag is set to 10.
+
+################################## SECURITY ###################################
+
+# Require clients to issue AUTH <PASSWORD> before processing any other
+# commands.  This might be useful in environments in which you do not trust
+# others with access to the host running redis-server.
+#
+# This should stay commented out for backward compatibility and because most
+# people do not need auth (e.g. they run their own servers).
+#
+# Warning: since Redis is pretty fast an outside user can try up to
+# 150k passwords per second against a good box. This means that you should
+# use a very strong password otherwise it will be very easy to break.
+#
+# requirepass foobared
+
+# Command renaming.
+#
+# It is possible to change the name of dangerous commands in a shared
+# environment. For instance the CONFIG command may be renamed into something
+# hard to guess so that it will still be available for internal-use tools
+# but not available for general clients.
+#
+# Example:
+#
+# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
+#
+# It is also possible to completely kill a command by renaming it into
+# an empty string:
+#
+# rename-command CONFIG ""
+#
+# Please note that changing the name of commands that are logged into the
+# AOF file or transmitted to slaves may cause problems.
+
+################################### LIMITS ####################################
+
+# Set the max number of connected clients at the same time. By default
+# this limit is set to 10000 clients, however if the Redis server is not
+# able to configure the process file limit to allow for the specified limit
+# the max number of allowed clients is set to the current file limit
+# minus 32 (as Redis reserves a few file descriptors for internal uses).
+#
+# Once the limit is reached Redis will close all the new connections sending
+# an error 'max number of clients reached'.
+#
+# maxclients 10000
+
+# Don't use more memory than the specified amount of bytes.
+# When the memory limit is reached Redis will try to remove keys
+# according to the eviction policy selected (see maxmemory-policy).
+#
+# If Redis can't remove keys according to the policy, or if the policy is
+# set to 'noeviction', Redis will start to reply with errors to commands
+# that would use more memory, like SET, LPUSH, and so on, and will continue
+# to reply to read-only commands like GET.
+#
+# This option is usually useful when using Redis as an LRU cache, or to set
+# a hard memory limit for an instance (using the 'noeviction' policy).
+#
+# WARNING: If you have slaves attached to an instance with maxmemory on,
+# the size of the output buffers needed to feed the slaves are subtracted
+# from the used memory count, so that network problems / resyncs will
+# not trigger a loop where keys are evicted, and in turn the output
+# buffer of slaves is full with DELs of keys evicted triggering the deletion
+# of more keys, and so forth until the database is completely emptied.
+#
+# In short... if you have slaves attached it is suggested that you set a lower
+# limit for maxmemory so that there is some free RAM on the system for slave
+# output buffers (but this is not needed if the policy is 'noeviction').
+#
+# maxmemory <bytes>
+
+# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
+# is reached. You can select among five behaviors:
+#
+# volatile-lru -> remove the key with an expire set using an LRU algorithm
+# allkeys-lru -> remove any key according to the LRU algorithm
+# volatile-random -> remove a random key with an expire set
+# allkeys-random -> remove a random key, any key
+# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
+# noeviction -> don't expire at all, just return an error on write operations
+#
+# Note: with any of the above policies, Redis will return an error on write
+#       operations, when there are no suitable keys for eviction.
+#
+#       At the date of writing these commands are: set setnx setex append
+#       incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
+#       sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
+#       zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
+#       getset mset msetnx exec sort
+#
+# The default is:
+#
+# maxmemory-policy noeviction
+
+# LRU and minimal TTL algorithms are not precise algorithms but approximated
+# algorithms (in order to save memory), so you can tune it for speed or
+# accuracy. For default Redis will check five keys and pick the one that was
+# used less recently, you can change the sample size using the following
+# configuration directive.
+#
+# The default of 5 produces good enough results. 10 Approximates very closely
+# true LRU but costs a bit more CPU. 3 is very fast but not very accurate.
+#
+# maxmemory-samples 5
+
+############################## APPEND ONLY MODE ###############################
+
+# By default Redis asynchronously dumps the dataset on disk. This mode is
+# good enough in many applications, but an issue with the Redis process or
+# a power outage may result into a few minutes of writes lost (depending on
+# the configured save points).
+#
+# The Append Only File is an alternative persistence mode that provides
+# much better durability. For instance using the default data fsync policy
+# (see later in the config file) Redis can lose just one second of writes in a
+# dramatic event like a server power outage, or a single write if something
+# wrong with the Redis process itself happens, but the operating system is
+# still running correctly.
+#
+# AOF and RDB persistence can be enabled at the same time without problems.
+# If the AOF is enabled on startup Redis will load the AOF, that is the file
+# with the better durability guarantees.
+#
+# Please check http://redis.io/topics/persistence for more information.
+
+appendonly no
+
+# The name of the append only file (default: "appendonly.aof")
+
+appendfilename "appendonly.aof"
+
+# The fsync() call tells the Operating System to actually write data on disk
+# instead of waiting for more data in the output buffer. Some OS will really flush
+# data on disk, some other OS will just try to do it ASAP.
+#
+# Redis supports three different modes:
+#
+# no: don't fsync, just let the OS flush the data when it wants. Faster.
+# always: fsync after every write to the append only log. Slow, Safest.
+# everysec: fsync only one time every second. Compromise.
+#
+# The default is "everysec", as that's usually the right compromise between
+# speed and data safety. It's up to you to understand if you can relax this to
+# "no" that will let the operating system flush the output buffer when
+# it wants, for better performances (but if you can live with the idea of
+# some data loss consider the default persistence mode that's snapshotting),
+# or on the contrary, use "always" that's very slow but a bit safer than
+# everysec.
+#
+# More details please check the following article:
+# http://antirez.com/post/redis-persistence-demystified.html
+#
+# If unsure, use "everysec".
+
+# appendfsync always
+appendfsync everysec
+# appendfsync no
+
+# When the AOF fsync policy is set to always or everysec, and a background
+# saving process (a background save or AOF log background rewriting) is
+# performing a lot of I/O against the disk, in some Linux configurations
+# Redis may block too long on the fsync() call. Note that there is no fix for
+# this currently, as even performing fsync in a different thread will block
+# our synchronous write(2) call.
+#
+# In order to mitigate this problem it's possible to use the following option
+# that will prevent fsync() from being called in the main process while a
+# BGSAVE or BGREWRITEAOF is in progress.
+#
+# This means that while another child is saving, the durability of Redis is
+# the same as "appendfsync none". In practical terms, this means that it is
+# possible to lose up to 30 seconds of log in the worst scenario (with the
+# default Linux settings).
+#
+# If you have latency problems turn this to "yes". Otherwise leave it as
+# "no" that is the safest pick from the point of view of durability.
+
+no-appendfsync-on-rewrite no
+
+# Automatic rewrite of the append only file.
+# Redis is able to automatically rewrite the log file implicitly calling
+# BGREWRITEAOF when the AOF log size grows by the specified percentage.
+#
+# This is how it works: Redis remembers the size of the AOF file after the
+# latest rewrite (if no rewrite has happened since the restart, the size of
+# the AOF at startup is used).
+#
+# This base size is compared to the current size. If the current size is
+# bigger than the specified percentage, the rewrite is triggered. Also
+# you need to specify a minimal size for the AOF file to be rewritten, this
+# is useful to avoid rewriting the AOF file even if the percentage increase
+# is reached but it is still pretty small.
+#
+# Specify a percentage of zero in order to disable the automatic AOF
+# rewrite feature.
+
+auto-aof-rewrite-percentage 100
+auto-aof-rewrite-min-size 64mb
+
+# An AOF file may be found to be truncated at the end during the Redis
+# startup process, when the AOF data gets loaded back into memory.
+# This may happen when the system where Redis is running
+# crashes, especially when an ext4 filesystem is mounted without the
+# data=ordered option (however this can't happen when Redis itself
+# crashes or aborts but the operating system still works correctly).
+#
+# Redis can either exit with an error when this happens, or load as much
+# data as possible (the default now) and start if the AOF file is found
+# to be truncated at the end. The following option controls this behavior.
+#
+# If aof-load-truncated is set to yes, a truncated AOF file is loaded and
+# the Redis server starts emitting a log to inform the user of the event.
+# Otherwise if the option is set to no, the server aborts with an error
+# and refuses to start. When the option is set to no, the user requires
+# to fix the AOF file using the "redis-check-aof" utility before to restart
+# the server.
+#
+# Note that if the AOF file will be found to be corrupted in the middle
+# the server will still exit with an error. This option only applies when
+# Redis will try to read more data from the AOF file but not enough bytes
+# will be found.
+aof-load-truncated yes
+
+################################ LUA SCRIPTING  ###############################
+
+# Max execution time of a Lua script in milliseconds.
+#
+# If the maximum execution time is reached Redis will log that a script is
+# still in execution after the maximum allowed time and will start to
+# reply to queries with an error.
+#
+# When a long running script exceeds the maximum execution time only the
+# SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be
+# used to stop a script that did not yet called write commands. The second
+# is the only way to shut down the server in the case a write command was
+# already issued by the script but the user doesn't want to wait for the natural
+# termination of the script.
+#
+# Set it to 0 or a negative value for unlimited execution without warnings.
+lua-time-limit 5000
+
+################################ REDIS CLUSTER  ###############################
+#
+# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+# WARNING EXPERIMENTAL: Redis Cluster is considered to be stable code, however
+# in order to mark it as "mature" we need to wait for a non trivial percentage
+# of users to deploy it in production.
+# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#
+# Normal Redis instances can't be part of a Redis Cluster; only nodes that are
+# started as cluster nodes can. In order to start a Redis instance as a
+# cluster node enable the cluster support uncommenting the following:
+#
+# cluster-enabled yes
+
+# Every cluster node has a cluster configuration file. This file is not
+# intended to be edited by hand. It is created and updated by Redis nodes.
+# Every Redis Cluster node requires a different cluster configuration file.
+# Make sure that instances running in the same system do not have
+# overlapping cluster configuration file names.
+#
+# cluster-config-file nodes-6379.conf
+
+# Cluster node timeout is the amount of milliseconds a node must be unreachable
+# for it to be considered in failure state.
+# Most other internal time limits are multiple of the node timeout.
+#
+# cluster-node-timeout 15000
+
+# A slave of a failing master will avoid to start a failover if its data
+# looks too old.
+#
+# There is no simple way for a slave to actually have a exact measure of
+# its "data age", so the following two checks are performed:
+#
+# 1) If there are multiple slaves able to failover, they exchange messages
+#    in order to try to give an advantage to the slave with the best
+#    replication offset (more data from the master processed).
+#    Slaves will try to get their rank by offset, and apply to the start
+#    of the failover a delay proportional to their rank.
+#
+# 2) Every single slave computes the time of the last interaction with
+#    its master. This can be the last ping or command received (if the master
+#    is still in the "connected" state), or the time that elapsed since the
+#    disconnection with the master (if the replication link is currently down).
+#    If the last interaction is too old, the slave will not try to failover
+#    at all.
+#
+# The point "2" can be tuned by user. Specifically a slave will not perform
+# the failover if, since the last interaction with the master, the time
+# elapsed is greater than:
+#
+#   (node-timeout * slave-validity-factor) + repl-ping-slave-period
+#
+# So for example if node-timeout is 30 seconds, and the slave-validity-factor
+# is 10, and assuming a default repl-ping-slave-period of 10 seconds, the
+# slave will not try to failover if it was not able to talk with the master
+# for longer than 310 seconds.
+#
+# A large slave-validity-factor may allow slaves with too old data to failover
+# a master, while a too small value may prevent the cluster from being able to
+# elect a slave at all.
+#
+# For maximum availability, it is possible to set the slave-validity-factor
+# to a value of 0, which means, that slaves will always try to failover the
+# master regardless of the last time they interacted with the master.
+# (However they'll always try to apply a delay proportional to their
+# offset rank).
+#
+# Zero is the only value able to guarantee that when all the partitions heal
+# the cluster will always be able to continue.
+#
+# cluster-slave-validity-factor 10
+
+# Cluster slaves are able to migrate to orphaned masters, that are masters
+# that are left without working slaves. This improves the cluster ability
+# to resist to failures as otherwise an orphaned master can't be failed over
+# in case of failure if it has no working slaves.
+#
+# Slaves migrate to orphaned masters only if there are still at least a
+# given number of other working slaves for their old master. This number
+# is the "migration barrier". A migration barrier of 1 means that a slave
+# will migrate only if there is at least 1 other working slave for its master
+# and so forth. It usually reflects the number of slaves you want for every
+# master in your cluster.
+#
+# Default is 1 (slaves migrate only if their masters remain with at least
+# one slave). To disable migration just set it to a very large value.
+# A value of 0 can be set but is useful only for debugging and dangerous
+# in production.
+#
+# cluster-migration-barrier 1
+
+# By default Redis Cluster nodes stop accepting queries if they detect there
+# is at least an hash slot uncovered (no available node is serving it).
+# This way if the cluster is partially down (for example a range of hash slots
+# are no longer covered) all the cluster becomes, eventually, unavailable.
+# It automatically returns available as soon as all the slots are covered again.
+#
+# However sometimes you want the subset of the cluster which is working,
+# to continue to accept queries for the part of the key space that is still
+# covered. In order to do so, just set the cluster-require-full-coverage
+# option to no.
+#
+# cluster-require-full-coverage yes
+
+# In order to setup your cluster make sure to read the documentation
+# available at http://redis.io web site.
+
+################################## SLOW LOG ###################################
+
+# The Redis Slow Log is a system to log queries that exceeded a specified
+# execution time. The execution time does not include the I/O operations
+# like talking with the client, sending the reply and so forth,
+# but just the time needed to actually execute the command (this is the only
+# stage of command execution where the thread is blocked and can not serve
+# other requests in the meantime).
+#
+# You can configure the slow log with two parameters: one tells Redis
+# what is the execution time, in microseconds, to exceed in order for the
+# command to get logged, and the other parameter is the length of the
+# slow log. When a new command is logged the oldest one is removed from the
+# queue of logged commands.
+
+# The following time is expressed in microseconds, so 1000000 is equivalent
+# to one second. Note that a negative number disables the slow log, while
+# a value of zero forces the logging of every command.
+slowlog-log-slower-than 10000
+
+# There is no limit to this length. Just be aware that it will consume memory.
+# You can reclaim memory used by the slow log with SLOWLOG RESET.
+slowlog-max-len 128
+
+################################ LATENCY MONITOR ##############################
+
+# The Redis latency monitoring subsystem samples different operations
+# at runtime in order to collect data related to possible sources of
+# latency of a Redis instance.
+#
+# Via the LATENCY command this information is available to the user that can
+# print graphs and obtain reports.
+#
+# The system only logs operations that were performed in a time equal or
+# greater than the amount of milliseconds specified via the
+# latency-monitor-threshold configuration directive. When its value is set
+# to zero, the latency monitor is turned off.
+#
+# By default latency monitoring is disabled since it is mostly not needed
+# if you don't have latency issues, and collecting data has a performance
+# impact, that while very small, can be measured under big load. Latency
+# monitoring can easily be enabled at runtime using the command
+# "CONFIG SET latency-monitor-threshold <milliseconds>" if needed.
+latency-monitor-threshold 0
+
+############################# EVENT NOTIFICATION ##############################
+
+# Redis can notify Pub/Sub clients about events happening in the key space.
+# This feature is documented at http://redis.io/topics/notifications
+#
+# For instance if keyspace events notification is enabled, and a client
+# performs a DEL operation on key "foo" stored in the Database 0, two
+# messages will be published via Pub/Sub:
+#
+# PUBLISH __keyspace@0__:foo del
+# PUBLISH __keyevent@0__:del foo
+#
+# It is possible to select the events that Redis will notify among a set
+# of classes. Every class is identified by a single character:
+#
+#  K     Keyspace events, published with __keyspace@<db>__ prefix.
+#  E     Keyevent events, published with __keyevent@<db>__ prefix.
+#  g     Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
+#  $     String commands
+#  l     List commands
+#  s     Set commands
+#  h     Hash commands
+#  z     Sorted set commands
+#  x     Expired events (events generated every time a key expires)
+#  e     Evicted events (events generated when a key is evicted for maxmemory)
+#  A     Alias for g$lshzxe, so that the "AKE" string means all the events.
+#
+#  The "notify-keyspace-events" takes as argument a string that is composed
+#  of zero or multiple characters. The empty string means that notifications
+#  are disabled.
+#
+#  Example: to enable list and generic events, from the point of view of the
+#           event name, use:
+#
+#  notify-keyspace-events Elg
+#
+#  Example 2: to get the stream of the expired keys subscribing to channel
+#             name __keyevent@0__:expired use:
+#
+#  notify-keyspace-events Ex
+#
+#  By default all notifications are disabled because most users don't need
+#  this feature and the feature has some overhead. Note that if you don't
+#  specify at least one of K or E, no events will be delivered.
+notify-keyspace-events Ex
+
+############################### ADVANCED CONFIG ###############################
+
+# Hashes are encoded using a memory efficient data structure when they have a
+# small number of entries, and the biggest entry does not exceed a given
+# threshold. These thresholds can be configured using the following directives.
+hash-max-ziplist-entries 512
+hash-max-ziplist-value 64
+
+# Similarly to hashes, small lists are also encoded in a special way in order
+# to save a lot of space. The special representation is only used when
+# you are under the following limits:
+list-max-ziplist-entries 512
+list-max-ziplist-value 64
+
+# Sets have a special encoding in just one case: when a set is composed
+# of just strings that happen to be integers in radix 10 in the range
+# of 64 bit signed integers.
+# The following configuration setting sets the limit in the size of the
+# set in order to use this special memory saving encoding.
+set-max-intset-entries 512
+
+# Similarly to hashes and lists, sorted sets are also specially encoded in
+# order to save a lot of space. This encoding is only used when the length and
+# elements of a sorted set are below the following limits:
+zset-max-ziplist-entries 128
+zset-max-ziplist-value 64
+
+# HyperLogLog sparse representation bytes limit. The limit includes the
+# 16 bytes header. When an HyperLogLog using the sparse representation crosses
+# this limit, it is converted into the dense representation.
+#
+# A value greater than 16000 is totally useless, since at that point the
+# dense representation is more memory efficient.
+#
+# The suggested value is ~ 3000 in order to have the benefits of
+# the space efficient encoding without slowing down too much PFADD,
+# which is O(N) with the sparse encoding. The value can be raised to
+# ~ 10000 when CPU is not a concern, but space is, and the data set is
+# composed of many HyperLogLogs with cardinality in the 0 - 15000 range.
+hll-sparse-max-bytes 3000
+
+# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in
+# order to help rehashing the main Redis hash table (the one mapping top-level
+# keys to values). The hash table implementation Redis uses (see dict.c)
+# performs a lazy rehashing: the more operation you run into a hash table
+# that is rehashing, the more rehashing "steps" are performed, so if the
+# server is idle the rehashing is never complete and some more memory is used
+# by the hash table.
+#
+# The default is to use this millisecond 10 times every second in order to
+# actively rehash the main dictionaries, freeing memory when possible.
+#
+# If unsure:
+# use "activerehashing no" if you have hard latency requirements and it is
+# not a good thing in your environment that Redis can reply from time to time
+# to queries with 2 milliseconds delay.
+#
+# use "activerehashing yes" if you don't have such hard requirements but
+# want to free memory asap when possible.
+activerehashing yes
+
+# The client output buffer limits can be used to force disconnection of clients
+# that are not reading data from the server fast enough for some reason (a
+# common reason is that a Pub/Sub client can't consume messages as fast as the
+# publisher can produce them).
+#
+# The limit can be set differently for the three different classes of clients:
+#
+# normal -> normal clients including MONITOR clients
+# slave  -> slave clients
+# pubsub -> clients subscribed to at least one pubsub channel or pattern
+#
+# The syntax of every client-output-buffer-limit directive is the following:
+#
+# client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
+#
+# A client is immediately disconnected once the hard limit is reached, or if
+# the soft limit is reached and remains reached for the specified number of
+# seconds (continuously).
+# So for instance if the hard limit is 32 megabytes and the soft limit is
+# 16 megabytes / 10 seconds, the client will get disconnected immediately
+# if the size of the output buffers reach 32 megabytes, but will also get
+# disconnected if the client reaches 16 megabytes and continuously overcomes
+# the limit for 10 seconds.
+#
+# By default normal clients are not limited because they don't receive data
+# without asking (in a push way), but just after a request, so only
+# asynchronous clients may create a scenario where data is requested faster
+# than it can read.
+#
+# Instead there is a default limit for pubsub and slave clients, since
+# subscribers and slaves receive data in a push fashion.
+#
+# Both the hard or the soft limit can be disabled by setting them to zero.
+client-output-buffer-limit normal 0 0 0
+client-output-buffer-limit slave 256mb 64mb 60
+client-output-buffer-limit pubsub 32mb 8mb 60
+
+# Redis calls an internal function to perform many background tasks, like
+# closing connections of clients in timeout, purging expired keys that are
+# never requested, and so forth.
+#
+# Not all tasks are performed with the same frequency, but Redis checks for
+# tasks to perform according to the specified "hz" value.
+#
+# By default "hz" is set to 10. Raising the value will use more CPU when
+# Redis is idle, but at the same time will make Redis more responsive when
+# there are many keys expiring at the same time, and timeouts may be
+# handled with more precision.
+#
+# The range is between 1 and 500, however a value over 100 is usually not
+# a good idea. Most users should use the default of 10 and raise this up to
+# 100 only in environments where very low latency is required.
+hz 10
+
+# When a child rewrites the AOF file, if the following option is enabled
+# the file will be fsync-ed every 32 MB of data generated. This is useful
+# in order to commit the file to the disk more incrementally and avoid
+# big latency spikes.
+aof-rewrite-incremental-fsync yes

+ 0 - 3
core/framework/core/base.php

@@ -61,8 +61,6 @@ final class Base
 
 	public static function mobile_init()
 	{
-		self::cp();
-
 		global $setting_config;
 		self::parse_conf($setting_config);
 		define('MD5_KEY',md5($setting_config['md5_key']));
@@ -77,7 +75,6 @@ final class Base
 		}
 		Tpl::output('setting_config',$setting_config);
 		Language::read('core_lang_index');
-
 		session::instance()->init();
 	}
 

+ 1 - 1
core/framework/libraries/email.php

@@ -186,7 +186,7 @@ final class Email{
 	 */
 	private function html($subject, $message){
 		$message = preg_replace("/href\=\"(?!http\:\/\/)(.+?)\"/i", 'href="'.SHOP_SITE_URL.'\\1"', $message);
-		$tmp .= "<html><head>";
+		$tmp = "<html><head>";
 		$tmp .= '<meta http-equiv="Content-Type" content="text/html; charset='.CHARSET.'">';
 		$tmp .= "<title>". $subject ."</title>";
 		$tmp .= "</head><body>".$message."</body></html>";

+ 0 - 1
core/framework/libraries/geohash.php

@@ -112,7 +112,6 @@ class geohash {
 		$base = substr($srcHash, 0, strlen($srcHash) - 1);
 		
 		if (strpos($this->borders[$dir][$type], $lastChr) !== false) {
-			
 			$base = $this->calculateAdjacent($base, $dir);	
 		}
 			

+ 8 - 4
core/framework/libraries/security.php

@@ -11,7 +11,8 @@
  */
 defined('InShopNC') or exit('Access Invalid!');
 
-class Security{
+class Security
+{
 	/**
 	 * 取得令牌内容
 	 * 自动输出html 隐藏域
@@ -60,8 +61,10 @@ class Security{
 	 */
 	public static function getAddslashesForInput($array,$ignore=array()){
         if (!function_exists('htmlawed')) require(BASE_CORE_PATH.'/framework/function/htmlawed.php');
-		if (!empty($array)){
-			while (list($k,$v) = each($array)) {
+		if (!empty($array))
+		{
+		    foreach ($array as $k => $v) {
+//			while (list($k,$v) = each($array)) {
 				if (is_string($v)) {
                     if (get_magic_quotes_gpc()) {
                         $v = stripslashes($v);
@@ -93,7 +96,8 @@ class Security{
 	}
 	public static function getAddSlashes($array){
 		if (!empty($array)){
-			while (list($k,$v) = each($array)) {
+//			while (list($k,$v) = each($array)) {
+			foreach ($array as $k => $v) {
 				if (is_string($v)) {
 					if (!get_magic_quotes_gpc()) {
 						$v = addslashes($v);

+ 18 - 29
core/lrlz.php

@@ -16,12 +16,10 @@ if (file_exists(BASE_PATH . '/config/config.ini.php')) {
 
 @date_default_timezone_set('Asia/Shanghai');
 
-//global $config;
 //默认平台店铺id
 define('DEFAULT_PLATFORM_STORE_ID', $config['default_store_id']);
-
 define('URL_MODEL', $config['url_model']);
-define(SUBDOMAIN_SUFFIX,  $config['subdomain_suffix']);
+define('SUBDOMAIN_SUFFIX',  $config['subdomain_suffix']);
 define('BASE_SITE_URL',   $config['base_site_url']);
 define('CLIENT_SITE_URL', $config['client_site_url']);
 
@@ -36,10 +34,6 @@ define('UPLOAD_SITE_URL', $config['upload_site_url']);
 define('RESOURCE_SITE_URL', $config['resource_site_url']);
 define('DELIVERY_SITE_URL', $config['delivery_site_url']);
 
-define('BASE_DATA_PATH', BASE_ROOT_PATH . '/data');
-define('BASE_UPLOAD_PATH', BASE_DATA_PATH . '/upload');
-define('BASE_RESOURCE_PATH', BASE_DATA_PATH . '/resource');
-
 define('CHARSET', $config['db'][1]['dbcharset']);
 define('DBDRIVER', $config['dbdriver']);
 define('SESSION_EXPIRE', $config['session_expire']);
@@ -50,7 +44,7 @@ define('DBPRE', $config['tablepre']);
 define('DBNAME', $config['db'][1]['dbname']);
 
 $_GET['act'] = $_GET['act'] ? strtolower($_GET['act']) : ($_POST['act'] ? strtolower($_POST['act']) : null);
-$_GET['op'] = $_GET['op'] ? strtolower($_GET['op']) : ($_POST['op'] ? strtolower($_POST['op']) : null);
+$_GET['op']  = $_GET['op']  ? strtolower($_GET['op'])  : ($_POST['op']  ? strtolower($_POST['op'])  : null);
 
 if (empty($_GET['act'])) {
     require_once(BASE_CORE_PATH . '/framework/core/route.php');
@@ -58,22 +52,22 @@ if (empty($_GET['act'])) {
 }
 //统一ACTION
 $_GET['act'] = preg_match('/^[\w]+$/i', $_GET['act']) ? $_GET['act'] : 'index';
-$_GET['op'] = preg_match('/^[\w]+$/i', $_GET['op']) ? $_GET['op'] : 'index';
+$_GET['op']  = preg_match('/^[\w]+$/i', $_GET['op']) ? $_GET['op'] : 'index';
 
 //对GET POST接收内容进行过滤,$ignore内的下标不被过滤
-$ignore = array('article_content', 'pgoods_body',
+$ignore = ['article_content', 'pgoods_body',
     'doc_content', 'content', 'sn_content', 'g_body', 'store_description', 'p_content',
     'groupbuy_intro', 'remind_content', 'note_content', 'ref_url', 'adv_pic_url', 'adv_word_url', 'adv_slide_url',
-    'appcode', 'mail_content');
+    'appcode', 'mail_content'];
 
 if (!class_exists('Security')) {
     require(BASE_CORE_PATH . '/framework/libraries/security.php');
 }
 
-$_GET = !empty($_GET) ? Security::getAddslashesForInput($_GET, $ignore) : array();
-$_POST = !empty($_POST) ? Security::getAddslashesForInput($_POST, $ignore) : array();
+$_GET     = !empty($_GET) ? Security::getAddslashesForInput($_GET, $ignore) : array();
+$_POST    = !empty($_POST) ? Security::getAddslashesForInput($_POST, $ignore) : array();
 $_REQUEST = !empty($_REQUEST) ? Security::getAddslashesForInput($_REQUEST, $ignore) : array();
-$_SERVER = !empty($_SERVER) ? Security::getAddSlashes($_SERVER) : array();
+$_SERVER  = !empty($_SERVER) ? Security::getAddSlashes($_SERVER) : array();
 
 //启用ZIP压缩
 if ($config['gzip'] == 1 && function_exists('ob_gzhandler') && $_GET['inajax'] != 1) {
@@ -81,34 +75,29 @@ if ($config['gzip'] == 1 && function_exists('ob_gzhandler') && $_GET['inajax'] !
 } else {
     ob_start();
 }
+
 require_once(BASE_CORE_PATH . '/framework/libraries/queue.php');
 require_once(BASE_CORE_PATH . '/framework/function/core.php');
 require_once(BASE_CORE_PATH . '/framework/core/base.php');
 require_once(BASE_CORE_PATH . '/framework/function/goods.php');
 
-if (function_exists('spl_autoload_register')) {
-    spl_autoload_register(array('Base', 'autoload'));
-}
-else
+if (function_exists('spl_autoload_register'))
 {
-    function __autoload($class)
-    {
-        if (defined('MOBILE_SERVER') && MOBILE_SERVER == true) {
-            return Base::mobile_autoload($class);
-        } else {
-            return Base::autoload($class);
-        }
+    if (defined('MOBILE_SERVER') && MOBILE_SERVER == true) {
+        spl_autoload_register(['Base', 'mobile_autoload']);
+    } else {
+        spl_autoload_register(['Base', 'autoload']);
     }
+} else {
+    throw_exception('Canot support spl_autoload_register');
 }
 
-function is_mobile()
-{
+function is_mobile() {
     return (defined('MOBILE_SERVER') && MOBILE_SERVER == true);
 }
 
 //是否考虑红包有效期
-function isBonusExpiryDate()
-{
+function isBonusExpiryDate() {
     return (defined('BONUS_EXPIRY_DATE') && BONUS_EXPIRY_DATE == true);
 }
 function usedBonusRate() {

+ 2 - 2
crontab.php

@@ -6,10 +6,10 @@
  * Time: 下午2:49
  */
 
-define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
 define('MOBILE_SERVER',true);
-
+require_once (BASE_ROOT_PATH . '/global.php');
 require_once (BASE_ROOT_PATH . '/fooder.php');
+
 require_once (BASE_ROOT_PATH . '/helper/http_header.php');
 require_once (BASE_ROOT_PATH . '/helper/session.php');
 require_once (BASE_ROOT_PATH . '/helper/img_helper.php');

+ 1 - 1
crontab/minutes.bat

@@ -1,4 +1,4 @@
 	@echo off
 mshta vbscript:createobject("wscript.shell").run("""iexplore"" http://v3.33hao.com/crontab/cj_index.php?act=minutes",0)(window.close) 
 echo 1
-taskkill /f /im iexplore.exe 
+taskkill /f /im iexplore.exe taskkill /f /im iexplore.exe

+ 0 - 0
daemon.log


+ 0 - 28
data/api/mini_wxpay/lib/WxPay.Config.php

@@ -5,34 +5,6 @@
 
 namespace MiniPay;
 
-use Log;
-
-if(defined('SERVER_TYPE') && SERVER_TYPE == 'panda')
-{
-    define(MINIPAY_WXPAY_APPID,       'wxfdaeb25e38c4c47e');
-    define(MINIPAY_WXPAY_APPSECRET,   'e5b5055cbc608d10c6de0d877c221270');
-    define(MINIPAY_WXPAY_MCHID,       '1380733702');
-    define(MINIPAY_WXPAY_KEY,         '0f86a4a9b1edb51b1a7d110fa223a157');
-    define(MINIPAY_WXPAY_SSLCERT_PATH, '../cert/panda_cert.pem');
-    define(MINIPAY_WXPAY_SSLKEY_PATH,  '../cert/panda_key.pem');
-
-    Log::record("找到panda Minipay 密钥",Log::DEBUG);
-}
-elseif(defined('SERVER_TYPE') && SERVER_TYPE == 'car')
-{
-    define(MINIPAY_WXPAY_APPID,       'wx4054b8152626bae7');
-    define(MINIPAY_WXPAY_APPSECRET,   '77f63e0b8e961b29e9f947ba5f02d0e8');
-    define(MINIPAY_WXPAY_MCHID,       '1500211542');  //'1498498152'
-    define(MINIPAY_WXPAY_KEY,         '2b135842e47ae1935365d43a952cd5b6');
-    define(MINIPAY_WXPAY_SSLCERT_PATH, '../cert/car_cert.pem');
-    define(MINIPAY_WXPAY_SSLKEY_PATH,  '../cert/car_key.pem');
-
-    Log::record("找到car Minipay 密钥",Log::DEBUG);
-}
-else {
-    Log::record("找不到 Minipay 密钥",Log::ERR);
-}
-
 class WxPayConfig
 {
 	//=======【基本信息设置】=====================================

+ 6 - 33
data/api/open_wxpay/lib/OpenWxPay.Config.php

@@ -3,33 +3,6 @@
 * 	配置账号信息
 */
 
-if(defined('SERVER_TYPE') && SERVER_TYPE == 'panda')
-{
-    define(DEF_APPID,       'wx24c5645aa986234a');
-    define(DEF_MCHID,       '1279745801');
-    define(DEF_KEY,         '0f86a4a9b1edb51b1a7d110fa223a157');
-    define(DEF_APPSECRET,   '41f93fef3207e917e742b9ebcd540cb2');
-    define(DEF_SSLCERT_PATH, '../cert/panda_cert.pem');
-    define(DEF_SSLKEY_PATH,  '../cert/panda_key.pem');
-
-    Log::record("找到panda 微信OpenWxPayConfig密钥",Log::DEBUG);
-}
-elseif(defined('SERVER_TYPE') && SERVER_TYPE == 'car')
-{
-    define(DEF_APPID,       'wx73acdf06232c6a33');
-    define(DEF_MCHID,       '1498498152');
-    define(DEF_KEY,         '2b135842e47ae1935365d43a952cd5b6');
-    define(DEF_APPSECRET,   '92f261a220c79cf3711356ba91d1cb30');
-    define(DEF_SSLCERT_PATH, '../cert/car_cert.pem');
-    define(DEF_SSLKEY_PATH,  '../cert/car_key.pem');
-
-    Log::record("找到car 微信OpenWxPayConfig密钥",Log::DEBUG);
-}
-else {
-    Log::record("找不到微信OpenWxPayConfig密钥",Log::ERR);
-}
-
-
 class OpenWxPayConfig
 {
 	//=======【基本信息设置】=====================================
@@ -55,10 +28,10 @@ class OpenWxPayConfig
 //	const KEY = '0f86a4a9b1edb51b1a7d110fa223a157';
 //	const APPSECRET = '41f93fef3207e917e742b9ebcd540cb2';
 
-    const APPID = DEF_APPID;
-    const MCHID = DEF_MCHID;
-    const KEY   = DEF_KEY;
-    const APPSECRET = DEF_APPSECRET;
+    const APPID = OPENWX_APPID;
+    const MCHID = OPENWX_MCHID;
+    const KEY   = OPENWX_KEY;
+    const APPSECRET = OPENWX_APPSECRET;
 	
 	//=======【证书路径设置】=====================================
 	/**
@@ -71,8 +44,8 @@ class OpenWxPayConfig
 //    const SSLCERT_PATH = '../cert/apiclient_cert.pem';
 //    const SSLKEY_PATH  = '../cert/apiclient_key.pem';
 
-    const SSLCERT_PATH = DEF_SSLCERT_PATH;
-    const SSLKEY_PATH  = DEF_SSLKEY_PATH;
+    const SSLCERT_PATH = OPENWX_SSLCERT_PATH;
+    const SSLKEY_PATH  = OPENWX_SSLKEY_PATH;
 
 	//=======【curl代理设置】===================================
 	/**

+ 60 - 60
data/cache/flea_area/flea_area_1.php

@@ -9,211 +9,211 @@ $data = array(
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'20',
-		'flea_area_name'=>'广西',
+		'flea_area_id'=>'3',
+		'flea_area_name'=>'河北',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'21',
-		'flea_area_name'=>'海南',
+		'flea_area_id'=>'4',
+		'flea_area_name'=>'山西',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'23',
-		'flea_area_name'=>'四川',
+		'flea_area_id'=>'5',
+		'flea_area_name'=>'内蒙古',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'24',
-		'flea_area_name'=>'贵州',
+		'flea_area_id'=>'6',
+		'flea_area_name'=>'辽宁',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'25',
-		'flea_area_name'=>'云南',
+		'flea_area_id'=>'7',
+		'flea_area_name'=>'吉林',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'26',
-		'flea_area_name'=>'西藏',
+		'flea_area_id'=>'8',
+		'flea_area_name'=>'黑龙江',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'27',
-		'flea_area_name'=>'陕西',
+		'flea_area_id'=>'10',
+		'flea_area_name'=>'江苏',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'28',
-		'flea_area_name'=>'甘肃',
+		'flea_area_id'=>'11',
+		'flea_area_name'=>'浙江',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'29',
-		'flea_area_name'=>'青海',
+		'flea_area_id'=>'12',
+		'flea_area_name'=>'安徽',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'30',
-		'flea_area_name'=>'宁夏',
+		'flea_area_id'=>'13',
+		'flea_area_name'=>'福建',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'31',
-		'flea_area_name'=>'新疆',
+		'flea_area_id'=>'14',
+		'flea_area_name'=>'江西',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'32',
-		'flea_area_name'=>'台湾',
+		'flea_area_id'=>'15',
+		'flea_area_name'=>'山东',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'33',
-		'flea_area_name'=>'香港',
+		'flea_area_id'=>'16',
+		'flea_area_name'=>'河南',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'34',
-		'flea_area_name'=>'澳门',
+		'flea_area_id'=>'17',
+		'flea_area_name'=>'湖北',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'19',
-		'flea_area_name'=>'广东',
+		'flea_area_id'=>'18',
+		'flea_area_name'=>'湖南',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'18',
-		'flea_area_name'=>'湖南',
+		'flea_area_id'=>'19',
+		'flea_area_name'=>'广东',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'3',
-		'flea_area_name'=>'河北',
+		'flea_area_id'=>'20',
+		'flea_area_name'=>'广西',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'4',
-		'flea_area_name'=>'山西',
+		'flea_area_id'=>'21',
+		'flea_area_name'=>'海南',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'5',
-		'flea_area_name'=>'内蒙古',
+		'flea_area_id'=>'23',
+		'flea_area_name'=>'四川',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'6',
-		'flea_area_name'=>'辽宁',
+		'flea_area_id'=>'24',
+		'flea_area_name'=>'贵州',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'7',
-		'flea_area_name'=>'吉林',
+		'flea_area_id'=>'25',
+		'flea_area_name'=>'云南',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'8',
-		'flea_area_name'=>'黑龙江',
+		'flea_area_id'=>'26',
+		'flea_area_name'=>'西藏',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'10',
-		'flea_area_name'=>'江苏',
+		'flea_area_id'=>'27',
+		'flea_area_name'=>'陕西',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'11',
-		'flea_area_name'=>'浙江',
+		'flea_area_id'=>'28',
+		'flea_area_name'=>'甘肃',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'12',
-		'flea_area_name'=>'安徽',
+		'flea_area_id'=>'29',
+		'flea_area_name'=>'青海',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'13',
-		'flea_area_name'=>'福建',
+		'flea_area_id'=>'30',
+		'flea_area_name'=>'宁夏',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'14',
-		'flea_area_name'=>'江西',
+		'flea_area_id'=>'31',
+		'flea_area_name'=>'新疆',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'15',
-		'flea_area_name'=>'山东',
+		'flea_area_id'=>'32',
+		'flea_area_name'=>'台湾',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'16',
-		'flea_area_name'=>'河南',
+		'flea_area_id'=>'33',
+		'flea_area_name'=>'香港',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',
 	),
 	array(
-		'flea_area_id'=>'17',
-		'flea_area_name'=>'湖北',
+		'flea_area_id'=>'34',
+		'flea_area_name'=>'澳门',
 		'flea_area_parent_id'=>'0',
 		'flea_area_sort'=>'0',
 		'flea_area_deep'=>'1',

+ 58 - 0
docker-compose-dev.yml

@@ -0,0 +1,58 @@
+version: "3.7"
+
+services:
+  nginxsrv:
+    image: nginx:alpine
+    ports:
+      - "80:80"
+    volumes:
+      - $PWD:/var/www/html
+      - $PWD/conf/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
+    links:
+      - mobilesrv
+      - fpmsrv
+    container_name: "panda-nginx"
+    command: [nginx,'-g','daemon off;']
+
+  redisrv:
+    image: redis:alpine
+    ports:
+      - "6379:6379"
+    volumes:
+      - $PWD/conf/redis/6379.conf:/usr/local/etc/redis/redis.conf
+      - $PWD/conf/redis:/var/redis
+    container_name: "panda-redis"
+    command: [ "redis-server"]
+
+  mobilesrv:
+    image: php-zts-debug:7.3.18
+    ports:
+      - "9100:9100"
+    volumes:
+      - $PWD:/var/www/html
+      - $PWD/conf/php/php-debug.ini:/usr/local/etc/php/php.ini
+      - $PWD/conf/php/docker-php-spwan-start:/usr/local/bin/docker-php-spwan-start
+    links:
+      - redisrv
+    container_name: "panda-mobile"
+    command: ['docker-php-spwan-start']
+    depends_on:
+      - "redisrv"
+    #docker run -it -v $PWD:/var/www/html -v $PWD/conf/php/php-debug.ini:/usr/local/etc/php/php.ini -p 9100:9100 --name mobilesrv  php-zts-debug:7.3.18
+    #spawn-fcgi -a 127.0.0.1 -p 9100 -F 1 -f "php /var/www/html/fcgi_run.php"
+
+  fpmsrv:
+      image: php-fpm:alpine
+      ports:
+        - "9000:9000"
+      volumes:
+        - $PWD:/var/www/html
+        - $PWD/conf/php-fpm/php-debug.ini:/usr/local/etc/php/php.ini
+        - $PWD/conf/php-fpm/php-fpm.conf:/usr/local/etc/php-fpm.conf
+        - $PWD/conf/php-fpm/docker-php-fpm-start:/usr/local/bin/docker-php-fpm-start
+      container_name: "panda-web"
+      command: [docker-php-fpm-start]
+      depends_on:
+        - "redisrv"
+      #docker run -it -v $PWD:/var/www/html -v $PWD/conf/php/php-debug.ini:/usr/local/etc/php/php.ini -p 9000:9000
+      #--name websrv  php-fpm:alpine

+ 57 - 0
docker-compose.yml

@@ -0,0 +1,57 @@
+version: "3.1"
+
+services:
+  reverse_proxy:
+    build: ./reverse_proxy
+    user: nginx
+
+  database:
+    build: 
+       context: ./database
+    image: atsea_db
+    user: postgres
+    environment:
+      POSTGRES_USER: gordonuser
+      POSTGRES_PASSWORD_FILE: /run/secrets/postgres_password
+      POSTGRES_DB: atsea
+    ports:
+      - "5432:5432" 
+    networks:
+      - back-tier
+    secrets:
+      - postgres_password
+
+  appserver:
+    build:
+       context: app
+       dockerfile: Dockerfile
+    image: atsea_app
+    user: gordon
+    ports:
+      - "8080:8080" 
+      - "5005:5005"
+    networks:
+      - front-tier
+      - back-tier
+    secrets:
+      - postgres_password
+
+  payment_gateway:
+    build:
+      context: payment_gateway
+    networks:
+      - payment
+    secrets:
+      - payment_token
+
+networks:
+  front-tier:
+  back-tier:
+  payment:
+    driver: overlay
+
+secrets:
+  postgres_password:
+    file: ./devsecrets/postgres_password
+  payment_token:
+    file: ./devsecrets/payment_token

+ 10 - 9
fcgi_run.php

@@ -1,15 +1,20 @@
 <?php
 
-define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
 define('MOBILE_SERVER',true);
 
-require_once (BASE_ROOT_PATH . '/fooder.php');
+define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
+define('BASE_PATH', BASE_ROOT_PATH.'/mobile');
+
+require_once(BASE_ROOT_PATH . '/global.php');
+require_once(BASE_ROOT_PATH . '/fooder.php');
+require_once('mobile/index.php');
 
 require_once(BASE_ROOT_PATH . '/helper/http_header.php');
 require_once(BASE_ROOT_PATH . '/helper/session.php');
 require_once(BASE_ROOT_PATH . '/helper/img_helper.php');
 require_once(BASE_ROOT_PATH . '/helper/exceptionex.php');
 require_once(BASE_ROOT_PATH . '/helper/fcgi_server.php');
+require_once(BASE_ROOT_PATH . '/helper/message/msgstates.php');
 require_once(BASE_ROOT_PATH . '/helper/message/msgutil.php');
 require_once(BASE_ROOT_PATH . '/helper/message/subscriber.php');
 require_once(BASE_ROOT_PATH . '/helper/index_tab.php');
@@ -30,21 +35,17 @@ require_once(BASE_ROOT_PATH . '/helper/fcode/present_manager.php');
 require_once(BASE_ROOT_PATH . '/helper/url_helper.php');
 require_once(BASE_ROOT_PATH . '/helper/activity_helper.php');
 
-
-function all_channels()
-{
-    return array('ch_index','activity','goods');
+function all_channels() {
+    return ['ch_index','activity','goods'];
 }
 
 Base::mobile_init();
-
 $trdid = Thread::getCurrentThreadId();
 Log::record("thread id = {$trdid}",Log::INFO);
 
 $gMessageStates = new MsgStates();
 StatesHelper::init();
-$gMessageLock = Mutex::create();
-$listener = new message\subscriber($gMessageStates,$gMessageLock);
+$listener = new message\subscriber($gMessageStates);
 $listener->start();
 
 fcgi_server::instance()->run_looper();

+ 1 - 15
fooder.php

@@ -1,19 +1,6 @@
 <?php
 
-@date_default_timezone_set('Asia/Shanghai');
-
-define('BASE_CORE_PATH',BASE_ROOT_PATH.'/core');
-define('BASE_DATA_PATH',BASE_ROOT_PATH.'/data');
-define('BASE_MOBILE_PATH',BASE_ROOT_PATH.'/mobile');
-define('BASE_CRONTAB_PATH',BASE_ROOT_PATH.'/crontab');
-define('BASE_UPLOAD_PATH',BASE_DATA_PATH.'/upload');
-define('BASE_UTIL_PATH',BASE_ROOT_PATH.'/util');
-define('BASE_AVATAR_PATH',BASE_UPLOAD_PATH.'/shop/avatar');
-
-require_once(BASE_ROOT_PATH . '/global.php');
-require_once(BASE_DATA_PATH . '/config/config.ini.php');
-require_once(BASE_CORE_PATH . '/lrlz.php');
-
+require_once(BASE_CORE_PATH .   '/lrlz.php');
 require_once(BASE_MOBILE_PATH . '/config/config.ini.php');
 require_once(BASE_MOBILE_PATH . '/framework/function/function.php');
 require_once(BASE_MOBILE_PATH . '/util/errcode.php');
@@ -34,7 +21,6 @@ require_once(BASE_CORE_PATH . '/framework/libraries/validator.php');
 require_once(BASE_CORE_PATH . '/framework/libraries/resizeimage.php');
 require_once(BASE_CORE_PATH . '/framework/libraries/pinyin.php');
 
-
 require_once(BASE_ROOT_PATH . '/helper/performance_helper.php');
 require_once(BASE_ROOT_PATH . '/helper/sensitive_word/dfa.php');
 require_once(BASE_ROOT_PATH . '/helper/request_helper.php');

+ 1 - 1
gcidfiller.php

@@ -7,7 +7,7 @@
  */
 
 
-define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
+require_once (BASE_ROOT_PATH . '/global.php');
 require_once (BASE_ROOT_PATH . '/fooder.php');
 require_once (BASE_UTIL_PATH . '/gcid_fill.php');
 

+ 10 - 19
global.php

@@ -7,26 +7,18 @@
  ***/
 
 error_reporting(E_ALL & ~E_NOTICE);
+@date_default_timezone_set('Asia/Shanghai');
 
-
-define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
-
-/**
- * 安装判断
- */
-if (!is_file(BASE_ROOT_PATH."/install/lock") && is_file(BASE_ROOT_PATH."/install/index.php")){
-    if (ProjectName != 'shop'){
-        @header("location: ../install/index.php");
-    }else{
-        @header("location: install/index.php");
-    }
-    exit;
-}
-
-define('BASE_CORE_PATH',BASE_ROOT_PATH.'/core');
-define('BASE_DATA_PATH',BASE_ROOT_PATH.'/data');
-define('DS','/');
 define('InShopNC',true);
+define('BASE_CORE_PATH',   BASE_ROOT_PATH.'/core');
+define('BASE_DATA_PATH',   BASE_ROOT_PATH.'/data');
+define('BASE_UPLOAD_PATH', BASE_DATA_PATH.'/upload');
+define('BASE_RESOURCE_PATH', BASE_DATA_PATH.'/resource');
+define('BASE_MOBILE_PATH', BASE_ROOT_PATH.'/mobile');
+define('BASE_CRONTAB_PATH',BASE_ROOT_PATH.'/crontab');
+define('BASE_UTIL_PATH',   BASE_ROOT_PATH.'/util');
+define('BASE_AVATAR_PATH', BASE_UPLOAD_PATH.'/shop/avatar');
+define('DS','/');
 
 define('StartTime',microtime(true));
 define('TIMESTAMP',time());
@@ -39,7 +31,6 @@ define('DIR_ADMIN','admin');
 define('DIR_API','api');
 define('DIR_MOBILE','mobile');
 define('DIR_WAP','wap');
-
 define('DIR_RESOURCE','data/resource');
 define('DIR_UPLOAD','data/upload');
 

+ 4 - 0
helper/algorithm.php

@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 
 /**
  * Created by PhpStorm.
@@ -20,6 +21,9 @@ class full_set
             static::$stInstance = new full_set();
         }
     }
+    private function __clone()
+    {
+    }
 }
 
 class algorithm

+ 4 - 5
helper/fcgi_server.php

@@ -7,6 +7,7 @@
  * Time: 下午9:08
  */
 
+require_once (BASE_ROOT_PATH . '/mobile/index.php');
 require_once (BASE_ROOT_PATH . '/helper/area_helper.php');
 require_once (BASE_CORE_PATH . '/framework/function/http.php');
 
@@ -24,10 +25,10 @@ class fcgi_server
 
     private function is_exclude($file)
     {
-        static $exfiles = array('web_wxnotify.php','wxnotify.php','pub_wxnotify.php','alipay_notify_url.php','dispatch_notify.php','kdniao_notify.php',
+        static $exfiles = ['web_wxnotify.php',
+            'wxnotify.php','pub_wxnotify.php','alipay_notify_url.php','dispatch_notify.php','kdniao_notify.php',
             'cmbpay_notify.php','cmbpay_sign.php','wxauthor.php','api/wxLogin/index.php','api/wxLogin/callback.php',
-            'test.php');
-
+            'test.php'];
         $path = BASE_ROOT_PATH . '/mobile/';
         $file = str_replace($path,'',$file);
 
@@ -83,8 +84,6 @@ class fcgi_server
         area_helper::instance();
         set_error_handler([$this, 'handle_error']);
 
-        require_once(BASE_ROOT_PATH . '/mobile/index.php');
-
         while(($ret = fcgi_accept()) >= 0)
         {
             $start = microtime(true);

+ 8 - 0
helper/message/msgstates.php

@@ -0,0 +1,8 @@
+<?php
+declare(strict_types=1);
+
+class MsgStates extends Threaded
+{
+    public function run() {
+    }
+}

+ 20 - 26
helper/message/msgutil.php

@@ -6,11 +6,6 @@
  * Time: 下午7:36
  */
 
-class MsgStates extends Stackable
-{
-    public function run() {
-    }
-}
 
 class StatesHelper
 {
@@ -90,32 +85,35 @@ class StatesHelper
     static public function fetch_state($tag)
     {
         global $gMessageStates;
-        global $gMessageLock;
 
-        if(empty($gMessageLock) || empty($gMessageStates)) {
+        if(empty($gMessageStates)) {
             return true;
         }
 
-        $finded = false;
-        Mutex::lock($gMessageLock);
-        foreach ($gMessageStates as $key => $val)
+        $state = false;
+        $gMessageStates->synchronized(function () use ($tag,&$state)
         {
-            if($key == $tag)
+            global $gMessageStates;
+            $finded = false;
+
+            foreach ($gMessageStates as $key => $val)
             {
-                $finded = true;
-                $state = $gMessageStates[$tag];
-                if($state == true) {
-                    $gMessageStates[$tag] = false;
-                    break;
+                if($key == $tag)
+                {
+                    $finded = true;
+                    $state = $gMessageStates[$tag];
+                    if($state == true) {
+                        $gMessageStates[$tag] = false;
+                        break;
+                    }
                 }
             }
-        }
 
-        if($finded == false) {
-            $gMessageStates[$tag] = false;
-            $state = true;
-        }
-        Mutex::unlock($gMessageLock);
+            if($finded == false) {
+                $gMessageStates[$tag] = false;
+                $state = true;
+            }
+        });
 
         return $state;
     }
@@ -123,11 +121,7 @@ class StatesHelper
     static public function init()
     {
         global $gMessageStates;
-        global $gMessageLock;
-
-        Mutex::lock($gMessageLock);
         $gMessageStates['tags'] = true;
-        Mutex::unlock($gMessageLock);
     }
 }
 

+ 23 - 36
helper/message/subscriber.php

@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 
 /**
  * Created by PhpStorm.
@@ -15,19 +16,16 @@ use Log;
 use Redis;
 use Exception;
 use StatesHelper;
-use Mutex;
 
 class subscriber extends Thread
 {
     private $mConfig;
     private $mStates;
-    private $mLock;
 
-    public function __construct($states,$mutex)
+    public function __construct($states)
     {
         $this->mConfig = C('redis');
         $this->mStates = $states;
-        $this->mLock = $mutex;
     }
 
     function run()
@@ -49,7 +47,14 @@ class subscriber extends Thread
                 }
 
                 Log::record("Message thread start run....",Log::DEBUG);
-                $redis->subscribe(all_channels(), 'handler_redis');
+                $redis->subscribe(all_channels(), function ($redis,$chan,$msg)
+                {
+                    $this->synchronized(function() use ($redis,$chan,$msg)
+                    {
+                        handler_redis($redis,$chan,$msg);
+                    });
+
+                });
                 Log::record("Message thread quit....",Log::DEBUG);
             }
             catch (Exception $ex)
@@ -59,7 +64,7 @@ class subscriber extends Thread
         }
     }
 
-    protected function dispatch($channel,$msg)
+    public function dispatch($channel,$msg)
     {
         Log::record("subscriber dispatch ch={$channel} msg={$msg}",Log::DEBUG);
 
@@ -69,37 +74,19 @@ class subscriber extends Thread
             return false;
         }
 
-        if($channel == 'ch_index')
-        {
-            Mutex::lock($this->mLock);
-            $ret = StatesHelper::onIndex($this->mStates,$msg);
-            Mutex::unlock($this->mLock);
-
-            return $ret;
+        $ret = true;
+        if($channel == 'ch_index') {
+            StatesHelper::onIndex($this->mStates,$msg);
+        } elseif($channel == 'searcher') {
+            StatesHelper::onSearcher($this->mStates,$msg);
+        } elseif($channel == 'activity') {
+            StatesHelper::onActivity($this->mStates,$msg);
+        } elseif($channel == 'goods') {
+            StatesHelper::onGoods($this->mStates,$msg);
+        } else {
+            $ret = false;
         }
-        elseif($channel == 'searcher') {
-            Mutex::lock($this->mLock);
-            $ret = StatesHelper::onSearcher($this->mStates,$msg);
-            Mutex::unlock($this->mLock);
 
-            return $ret;
-        }
-        elseif($channel == 'activity') {
-            Mutex::lock($this->mLock);
-            $ret = StatesHelper::onActivity($this->mStates,$msg);
-            Mutex::unlock($this->mLock);
-
-            return $ret;
-        }
-        elseif($channel == 'goods') {
-            Mutex::lock($this->mLock);
-            $ret = StatesHelper::onGoods($this->mStates,$msg);
-            Mutex::unlock($this->mLock);
-
-            return $ret;
-        }
-        else {
-            return false;
-        }
+        return $ret;
     }
 }

+ 0 - 20
helper/pay/alipay.php

@@ -8,32 +8,12 @@
 
 namespace Pay;
 
-use Log;
-
-if(defined('SERVER_TYPE') && SERVER_TYPE == 'panda') {
-    define(ALIPAY_PATH, BASE_DATA_PATH . '/api/alipay');
-
-    define(ALIPAY_PARTNER, '2088121219613123');
-    define(ALIPAY_SELLER_ID, 'napheir.ao@lrlz.com');
-    Log::record("找到panda 阿里支付密钥",Log::DEBUG);
-}
-elseif(defined('SERVER_TYPE') && SERVER_TYPE == 'car') {
-    define(ALIPAY_PATH, BASE_DATA_PATH . '/api/caralipay');
-
-    define(ALIPAY_PARTNER, '2088921850833159');
-    define(ALIPAY_SELLER_ID, 'jyc2018168@163.com');
-    Log::record("找到car 阿里支付密钥",Log::DEBUG);
-}
-else {
-    Log::record("没有找到阿里支付密钥",Log::DEBUG);
-}
 require_once (ALIPAY_PATH . '/lib/alipay_rsa.function.php');
 require_once (ALIPAY_PATH . '/lib/alipay_submit.class.php');
 
 class alipay implements IPay
 {
     const pri_key_path = ALIPAY_PATH.'/key/lrlz_private_key.pem';
-
     const ali_notifyurl = BASE_SITE_URL . '/mobile/alipay_notify_url.php';
 
     public function gen_pay($pay_sn, $fee,$order_sn,$subject)

+ 1 - 1
helper/pay/wxpay.php

@@ -8,7 +8,7 @@
 
 namespace Pay;
 
-define(WXPAY_PATHEX, BASE_DATA_PATH . '/api/open_wxpay');
+define('WXPAY_PATHEX', BASE_DATA_PATH . '/api/open_wxpay');
 require_once(WXPAY_PATHEX . '/lib/OpenWxPay.Api.php');
 require_once(WXPAY_PATHEX . '/lib/OpenWxPay.Config.php');
 require_once(WXPAY_PATHEX . '/lib/OpenWxPay.Data.php');

+ 60 - 65
helper/session.php

@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 
 /**
  * Created by PhpStorm.
@@ -17,7 +18,7 @@ class session
 
     static public function instance()
     {
-        if(self::$stInstance == NULL) {
+        if (self::$stInstance == NULL) {
             self::$stInstance = new session();
         }
         return self::$stInstance;
@@ -25,17 +26,18 @@ class session
 
     private function __construct()
     {
+
     }
 
     public function init()
     {
         session_set_save_handler(
-            array(&$this,'onOpen'),
-            array(&$this,'onClose'),
-            array(&$this,'onRead'),
-            array(&$this,'onWrite'),
-            array(&$this,'onDestroy'),
-            array(&$this,'onGc'));
+            [$this, 'onOpen'],
+            [$this, 'onClose'],
+            [$this, 'onRead'],
+            [$this, 'onWrite'],
+            [$this, 'onDestroy'],
+            [$this, 'onGc']);
     }
 
     public function start()
@@ -50,74 +52,69 @@ class session
         // 会触发write 和 close 函数
         session_write_close();
 
-        foreach($_SESSION as $key=>$value) {
+        foreach ($_SESSION as $key => $value) {
             unset($_SESSION[$key]);
         }
-        foreach($_COOKIE as $key=>$value) {
+        foreach ($_COOKIE as $key => $value) {
             unset($_COOKIE[$key]);
         }
-        foreach($_POST as $key => $value) {
+        foreach ($_POST as $key => $value) {
             unset($_POST[$key]);
         }
-        foreach($_GET as $key => $value) {
+        foreach ($_GET as $key => $value) {
             unset($_GET[$key]);
         }
         request_helper::clear_server();
         $this->sessid = '';
     }
 
-    public function destroy() {
+    public function destroy()
+    {
         $this->fdestroy = true;
         $sid = $this->sessid;
-        fcgi_setcookie("MPHPSESSID","{$sid}", -3600,'/',LOCAL_DOMAIN);
+        fcgi_setcookie("MPHPSESSID", "{$sid}", -3600, '/', LOCAL_DOMAIN);
     }
 
-    public function onOpen() {
+    public function onOpen()
+    {
         return true;
     }
+
     public function onRead($rsid)
     {
         //这段代码为了确保内置H5,直接使用客户端的session 状态。
         $client = strtolower(trim($_SERVER['HTTP_CLIENT_TYPE']));
 
-        if($client == 'ios' || $client == 'android')
-        {
+        if ($client == 'ios' || $client == 'android') {
             $sid = $_COOKIE[self::session_name];
-            Log::record("MPHPSESSID = {$sid}" , Log::DEBUG);
+            Log::record("MPHPSESSID = {$sid}", Log::DEBUG);
             return $this->from_certain($sid);
-        }
-        else
-        {
+        } else {
             $sid = $_COOKIE[self::session_name];
-            Log::record("MPHPSESSID = {$sid}" , Log::DEBUG);
+            Log::record("MPHPSESSID = {$sid}", Log::DEBUG);
 
-            if(isset($_POST['HPHPSESSID']) && !empty($_POST['HPHPSESSID']))
-            {
+            if (isset($_POST['HPHPSESSID']) && !empty($_POST['HPHPSESSID'])) {
                 $hsid = $_POST['HPHPSESSID'];
                 $this->sessid = $hsid;
-                if($sid == $hsid) {
+                if ($sid == $hsid) {
                     return $this->from_certain($sid);
                 } else {
                     return $this->from_uncertain($hsid);
                 }
-            }
-            else
-            {
+            } else {
                 return $this->from_certain($sid);
             }
         }
     }
+
     private function from_uncertain($sid)
     {
         $this->set_cookie($sid);
-        if(empty($sid))
-        {
+        if (empty($sid)) {
             return '';
-        }
-        else
-        {
-            $data = rcache($sid,self::prefix);
-            if(empty($data)) {
+        } else {
+            $data = rcache($sid, self::prefix);
+            if (empty($data)) {
                 return '';
             } else {
                 $this->sessid = $sid;
@@ -128,32 +125,26 @@ class session
 
     private function from_certain($sid)
     {
-        if(empty($sid))
-        {
-            $ret = session_regenerate_id(false);
-            if($ret == true) {
-                $sid = session_id();
+        if (empty($sid)) {
+            $sid = session_create_id('');
+            if (!empty($sid)) {
                 $this->set_cookie($sid);
                 $this->sessid = $sid;
             } else {
-                Log::record("session_regenerate_id error.",Log::ERR);
+                Log::record("session_create_id error.", Log::ERR);
             }
 
             return '';
-        }
-        else
-        {
-            $data = rcache($sid,self::prefix);
-            if(empty($data))
-            {
-                dcache($sid,self::prefix);
-                $ret = session_regenerate_id(false);
-                if($ret == true) {
-                    $sid = session_id();
+        } else {
+            $data = rcache($sid, self::prefix);
+            if (empty($data)) {
+                dcache($sid, self::prefix);
+                $sid = session_create_id('');
+                if ($sid == true) {
                     $this->set_cookie($sid);
                     $this->sessid = $sid;
                 } else {
-                    Log::record("session_regenerate_id error.",Log::ERR);
+                    Log::record("session_create_id error.", Log::ERR);
                 }
 
                 return '';
@@ -164,39 +155,42 @@ class session
         }
     }
 
-    public function onClose() {
+    public function onClose()
+    {
         return true;
     }
 
     public function onWrite($sid, $data)
     {
-        if($this->fdestroy) {
-            dcache($this->sessid,self::prefix);
+        if ($this->fdestroy) {
+            dcache($this->sessid, self::prefix);
         } else {
-            wcache($this->sessid,array(self::session_name => $data),self::prefix,self::expire_min());
+            wcache($this->sessid, [self::session_name => $data], self::prefix, self::expire_min());
         }
 
         return true;
     }
 
-    public function onDestroy($sid) {
-        return dcache($this->sessid,self::prefix);
+    public function onDestroy($sid)
+    {
+        return dcache($this->sessid, self::prefix);
     }
 
-    public function onGc($expire) {
+    public function onGc($expire)
+    {
         return true;
     }
 
     public function set_cookie($sid)
     {
         $expire_time = time() + self::expire_min() * 60;
-        fcgi_setcookie("MPHPSESSID","{$sid}",$expire_time,'/',LOCAL_DOMAIN);
-        Log::record("set_cookie MPHPSESSID={$sid}",Log::DEBUG);
+        fcgi_setcookie("MPHPSESSID", "{$sid}", $expire_time, '/', LOCAL_DOMAIN);
+        Log::record("set_cookie MPHPSESSID={$sid}", Log::DEBUG);
     }
 
     private static function expire_min()
     {
-        if(is_debug()) {
+        if (is_debug()) {
             return 43200;
         } else {
             return 43200;
@@ -205,10 +199,10 @@ class session
 
     static public function read_other_session($sid)
     {
-        $data = rcache($sid,self::prefix);
+        $data = rcache($sid, self::prefix);
         $org = $_SESSION;
         $_SESSION = [];
-        if(session_decode($data[self::session_name]) == true) {
+        if (session_decode($data[self::session_name]) == true) {
             $data = $_SESSION;
             $_SESSION = $org;
             return $data;
@@ -217,12 +211,13 @@ class session
             return false;
         }
     }
-    static public function write_other_session($sid,$data)
+
+    static public function write_other_session($sid, $data)
     {
         $org = $_SESSION;
         $_SESSION = $data;
         $data = session_encode();
-        wcache($sid,array(self::session_name => $data),self::prefix,self::expire_min());
+        wcache($sid, [self::session_name => $data], self::prefix, self::expire_min());
         $_SESSION = $org;
     }
 }

+ 1 - 1
helper/special_helper.php

@@ -20,7 +20,7 @@ class brands_special
 
     static private $stBImgContianers;
 
-    public function brands_special()
+    public function __construct()
     {
         if(self::$stBImgContianers == null) {
             self::$stBImgContianers = [];

+ 0 - 20
helper/third_author/signaturer.php

@@ -10,29 +10,9 @@ namespace thrid_author;
 
 use Log;
 
-if(defined('SERVER_TYPE') && SERVER_TYPE == 'panda')
-{
-    define(SIGN_APPID,       'wx6b42e00ecaade538');
-    define(SIGN_APPSECRET,   'ee64233b3144d76217161666f8cb4c86');
-
-    Log::record("找到panda 微信公众号授权",Log::DEBUG);
-}
-elseif(defined('SERVER_TYPE') && SERVER_TYPE == 'car')
-{
-    define(SIGN_APPID,       'wxaf698e1cc5f2073b');
-    define(SIGN_APPSECRET,   'da0547505e7bd29a50cdf662cc7b559a');
-
-    Log::record("找到car 微信OpenWxPayConfig密钥",Log::DEBUG);
-}
-else {
-    Log::record("找不到微信OpenWxPayConfig密钥",Log::ERR);
-}
 
 class signaturer
 {
-//    const appid = 'wx6b42e00ecaade538';
-//    const appsecret ='ee64233b3144d76217161666f8cb4c86';
-
     const appid = SIGN_APPID;
     const appsecret = SIGN_APPSECRET;
 

+ 0 - 17
helper/third_author/wxauthor.php

@@ -15,23 +15,6 @@ use util;
 use Log;
 use wechat_helper;
 
-if(defined('SERVER_TYPE') && SERVER_TYPE == 'panda')
-{
-    define(AUTHOR_APPID,       'wx6b42e00ecaade538');
-    define(AUTHOR_APPSECRET,   'ee64233b3144d76217161666f8cb4c86');
-
-    Log::record("找到panda 微信公众号授权",Log::DEBUG);
-}
-elseif(defined('SERVER_TYPE') && SERVER_TYPE == 'car')
-{
-    define(AUTHOR_APPID,       'wxaf698e1cc5f2073b');
-    define(AUTHOR_APPSECRET,   'da0547505e7bd29a50cdf662cc7b559a');
-
-    Log::record("找到car 微信OpenWxPayConfig密钥",Log::DEBUG);
-}
-else {
-    Log::record("找不到微信OpenWxPayConfig密钥",Log::ERR);
-}
 
 class wxauthor
 {

+ 10 - 0
index.html

@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>xxx</title>
+</head>
+<body>
+    <p>Hello Docker.</p>
+</body>
+</html>

+ 1 - 7
index.php

@@ -1,10 +1,4 @@
 <?php
-/**
- * 入口
- *
- *
- *
- */
+
 $site_url = strtolower('http://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/index.php')).'/shop/index.php');
-//@header('Location: '.$site_url);
 include('shop/index.php');

+ 3 - 0
info.php

@@ -0,0 +1,3 @@
+<?php
+
+echo phpinfo();

+ 1 - 2
logmonitor.php

@@ -6,8 +6,7 @@
  * Time: 下午2:51
  */
 
-define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
-
+require_once (BASE_ROOT_PATH . '/global.php');
 require_once (BASE_ROOT_PATH . '/fooder.php');
 require_once (BASE_ROOT_PATH . '/helper/event_looper.php');
 

+ 2 - 3
mobile/control/control.php

@@ -139,7 +139,7 @@ class mobileControl
 
     protected function check_app_type()
     {
-        $client = strtolower(trim($_SERVER['HTTP_CLIENT_TYPE']));
+        $client  = strtolower(trim($_SERVER['HTTP_CLIENT_TYPE']));
         $version = trim($_SERVER['HTTP_CLIENT_VERSION']);
 
         if (empty($client)) {
@@ -159,7 +159,7 @@ class mobileControl
             $_SESSION['client_version'] = $version;
         }
 
-        $version = intval($version * 100 + 0.5);
+        $version = intval(floatval($version) * 100 + 0.5);
         if($client == 'ios')
         {
             $cur_ver = $GLOBALS['setting_config']['mobile_ios_version'];
@@ -330,7 +330,6 @@ class mbMemberControl extends mobileControl
     }
 }
 
-
 function bonus_version()
 {
     return "v=2019012101";

+ 0 - 1
mobile/control/index.php

@@ -20,7 +20,6 @@ require_once(BASE_ROOT_PATH . '/mobile/control/special.php');
 require_once(BASE_ROOT_PATH . '/helper/third_author/wxauthor.php');
 require_once(BASE_ROOT_PATH . '/helper/session_helper.php');
 require_once(BASE_ROOT_PATH . '/helper/url_helper.php');
-
 require_once(BASE_ROOT_PATH . '/helper/room/tpl_group_home.php');
 require_once(BASE_ROOT_PATH . '/helper/room/tpl_chatwo_home.php');
 

+ 1 - 2
mobile/control/member_talk.php

@@ -1452,5 +1452,4 @@ class member_talkControl extends mbMemberControl
     {
 
     }
-}
-
+}

+ 1 - 1
mobile/util/errcode.php

@@ -1,6 +1,6 @@
 <?php
 
-class errcode extends SplEnum
+class errcode //extends SplEnum
 {
     const __default = self::Success;
 

+ 1 - 2
room_factory.php

@@ -6,8 +6,7 @@
  * Time: 上午11:53
  */
 
-define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
-
+require_once(BASE_ROOT_PATH . '/global.php');
 require_once(BASE_ROOT_PATH . '/fooder.php');
 require_once(BASE_ROOT_PATH . '/helper/event_looper.php');
 

+ 1 - 2
room_srv.php

@@ -6,8 +6,7 @@
  * Time: 上午11:53
  */
 
-define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
-
+require_once(BASE_ROOT_PATH . '/global.php');
 require_once(BASE_ROOT_PATH . '/fooder.php');
 require_once(BASE_ROOT_PATH . '/helper/event_looper.php');
 require_once(BASE_ROOT_PATH . '/helper/room/room_processor.php');

+ 1 - 2
run.php

@@ -1,8 +1,7 @@
 
 <?php
 
-define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
-
+require_once(BASE_ROOT_PATH . '/global.php');
 require_once(BASE_ROOT_PATH . '/fooder.php');
 
 $gfcgi_run = 2;

+ 9 - 3
test/TestGeohash.php

@@ -6,17 +6,23 @@
  * Time: 下午4:13
  */
 
+use PHPUnit\Framework\TestCase;
+
 define('BASE_ROOT_PATH',str_replace('/test','',dirname(__FILE__)));
 
+if (!extension_loaded('pthreads')) {
+    dl('pthreads.so');
+}
+
 require_once(BASE_ROOT_PATH . '/fooder.php');
 require_once(BASE_ROOT_PATH . '/core/framework/libraries/geohash.php');
 
 
-class TestGeohash extends PHPUnit_Framework_TestCase
+class TestGeohash extends TestCase
 {
-    public static function setUpBeforeClass()
+    public static function setUpBeforeClass(): void
     {
-        Base::run_util();
+//        Base::run_util();
     }
 
     public function testAll()

+ 1 - 1
test/TestTalk.php

@@ -14,7 +14,7 @@ require_once(BASE_ROOT_PATH . '/helper/room/factory_client.php');
 require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
 require_once(BASE_ROOT_PATH . '/helper/room/room_info.php');
 require_once(BASE_ROOT_PATH . '/helper/room/author.php');
-require_once (BASE_CORE_PATH . "/framework/function/http.php");
+require_once(BASE_CORE_PATH . "/framework/function/http.php");
 require_once(BASE_ROOT_PATH . '/helper/room/util.php');
 
 class TestTalk extends PHPUnit_Framework_TestCase

+ 3 - 3
ugc_srv.php

@@ -6,14 +6,14 @@
  * Time: 下午2:53
  */
 
-define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
-
+require_once(BASE_ROOT_PATH . '/global.php');
 define('UGC_SUBSCRIBER_PROC',true);
 
 require_once(BASE_ROOT_PATH . '/fooder.php');
-require_once (BASE_ROOT_PATH . '/helper/event_looper.php');
+require_once(BASE_ROOT_PATH . '/helper/event_looper.php');
 
 require_once(BASE_ROOT_PATH . '/helper/algorithm.php');
+require_once(BASE_ROOT_PATH . '/helper/message/msgstates.php');
 require_once(BASE_ROOT_PATH . '/helper/message/msgutil.php');
 require_once(BASE_ROOT_PATH . '/helper/message/subscriber.php');
 require_once(BASE_ROOT_PATH . '/helper/ugc_helper.php');

+ 1 - 2
upfile.php

@@ -1,7 +1,6 @@
 <?php
 
-define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
-
+require_once(BASE_ROOT_PATH . '/global.php');
 function upfile_joutput_data($datas)
 {
     $data['code'] = 200;

+ 1 - 1
util.php

@@ -6,7 +6,7 @@
  * Time: 下午12:43
  */
 
-define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
+require_once(BASE_ROOT_PATH . '/global.php');
 require_once (BASE_ROOT_PATH . '/fooder.php');
 require_once (BASE_UTIL_PATH . '/sku_mapper.php');
 

+ 1 - 1
zmr.php

@@ -1,5 +1,5 @@
 <?php
-//by bbs.33hao.com
+declare(strict_types=1);
 
 if (isset($_GET['dir'])) { //config the basedir
     $basedir = $_GET['dir'];