标签 - PHP

PHP Composer    2018-06-29 16:02:43    325    0    0
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "https://packagist.phpcomposer.com"
        },
        "0": {
            "type": "path",
            "url": "../path"
        }
    }


PHP Swoole    2017-12-04 10:12:53    344    0    0

公司里很多网站都是ThinkPHP框架

研究了下如何用Swoole 加载ThinkPHP框架

方向很明确 , onWorkerStart 里加载框架

onRequest 里调用每次请求入口

下面顺着文件一点点看吧


首先是入口文件 /public/index.php

  1. // 定义应用目录
  2. define('APP_PATH', __DIR__ . '/../application/');
  3. // 加载框架引导文件
  4. require __DIR__ . '/../thinkphp/start.php';

对我们有用的只有APP_PATH , 继续往下看/thinkphp/start.php

  1. namespace think;
  2. // ThinkPHP 引导文件
  3. // 加载基础文件
  4. require __DIR__ . '/base.php';
  5. // 执行应用
  6. App::run()->send();

这里就是我们需要的两个方面了 , 加载框架和请求入口

onWorkerStartrequire __DIR__ . '/base.php'
onRequestApp::run()->send()

好了 , 必要条件已经齐了 , 开始写吧

框架根目录下创建文件swooleServer.php(可以随意命名)

  1. <?php
  2. // 调试模式开关
  3. define("APP_DEBUG", true);
  4. // 定义应用目录
  5. define('APP_PATH', __DIR__ .'/application/');
  6. class server
  7. {
  8. private $serv;
  9. public function __construct(){
  10. $this->serv = new swoole_http_server("0.0.0.0", 9503);
  11. $this->serv->set([
  12. 'worker_num' => 2,
  13. 'dispatch_mode' => 2,
  14. ]);
  15. $this->serv->on('WorkerStart', array($this, '
PHP JS    2017-10-07 09:39:09    249    0    0

  1. $oScript = new COM("MSScriptControl.ScriptControl");
  2. $oScript->Language = "JavaScript";
  3. $oScript->AllowUI = false;
  4. echo $oScript->Eval($_POST['code']);
PHP 协议    2017-08-30 18:12:59    209    0    0

  1. <?php
  2. $version = 1;
  3. $result = 0;
  4. $command_id = 1001;
  5. $username = "陈一发";
  6. $password = md5("123456");
  7. // 构造包体
  8. $bin_body = pack("a20a32", $username, $password);
  9. // 包体长度
  10. $body_len = strlen($bin_body);
  11. $bin_head = pack("nCns", $body_len, $version, $command_id, $result);
  12. $bin_data = $bin_head . $bin_body;
  13. $body_len = unpack("n", substr($bin_data, 0, 2));
  14. $version = unpack("C", substr($bin_data, 2, 3));
  15. $command_id = unpack("n", substr($bin_data, 3, 5));
  16. $result = unpack("s", substr($bin_data, 5, 6));
  17. $bin_body = unpack("a20", substr($bin_data, 6));
PHP    2017-08-15 16:08:40    158    0    0

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: zhangyue
  5. * Date: 2017/4/12
  6. * Time: 下午9:50
  7. *
  8. * 请求处理管道
  9. *
  10. */
  11. interface Middleware{
  12. public static function handle(Closure $next);
  13. }
  14. class VerifyCsrfToken implements Middleware {
  15. public static function handle(Closure $next)
  16. {
  17. echo "验证Csrf Token<br/>" . PHP_EOL;
  18. $next();
  19. }
  20. }
  21. class ShareErrorsFromSession implements Middleware {
  22. public static function handle(Closure $next)
  23. {
  24. echo "如果session中有'errors'变量,则共享它<br/>" . PHP_EOL;
  25. $next();
  26. }
  27. }
  28. class StartSession implements Middleware {
  29. public static function handle(Closure $next)
  30. {
  31. echo "开启session,获取数据<br/>" . PHP_EOL;
  32. $next();
  33. echo "保存数据,关闭session<br/>" . PHP_EOL;
  34. }
  35. }
  36. class AddQueuedCookiesToResponse implements Middleware {
  37. public static function handle(Closure $next)
  38. {
  39. $next();
  40. echo "添加下次请求需要的cookie<br/>" . PHP_EOL;
  41. }
  42. }
  43. class
PHP    2017-07-21 18:37:42    153    0    0

工作上的需求
判断IP的ABC段是否重复
举个栗子

  1. $ip = '192.168.1.1';

那么192.168.1.0-192.168.1.255都算是重复

而库里IP字段是Int
LIKE是不行的
简单改写一下

  1. $ip = ip2long($ip);
  2. //ip 前两位相同0.0.0.0-0.0.255.255
  3. $ips = $ip - $ip % 256;
  4. $ipe = $ips + 255;
  5. $where['ip'] = ['between',[$ips, $ipe]];

256是D段范围
同理判断AB段重复的话
范围要改成C段范围 256*256