月度存档: 12 月 2018

解决XAMPP启动Apache启动失败问题

解决XAMPP启动Apache启动失败问题

如果80端口被占用了

把配置文件/opt/lampp/etc/httpd.conf的端口改为其它(比如:Listen 8080),对应的把文件/opt/lampp/lampp端口改为一致(”testport 80″改为”testport 8080″)

如果443端口被占用了

把配置文件/opt/lampp/etc/extra/httpd-ssl.conf的端口改为其它(比如:Listen 8443),对应的把文件/opt/lampp/lampp端口改为一致(”testport 80″改为”testport 8443″)

转:chrome jsonView插件安装

原文链接:https://www.cnblogs.com/cssfirefly/p/4368020.html
chrome 应用商店打不开,想装插件愁死人了。

今天想到一个好方法,以 jsonView插件为例分享一下。

1、打开 https://github.com ;

2、搜索 jsonView 链接:https://github.com/search?utf8=%E2%9C%93&q=jsonview;

3、选择需要的插件(我是选这个gildas-lormeau/JSONView-for-Chrome);

4、点击【Download Zip】,插件下载完成,解压缩到相应目录(D:\Download\JSONView-for-Chrome-master);

5、安装,打开chrome – 扩展程序 (地址栏输入chrome://extensions/);

6、右上角,选中“开发模式”;

7、点击”加载正在开发的扩展程序…” -> 选择插件目录(D:\Download\JSONView-for-Chrome-master\WebContent);

8、安装完成,重新加载 (Ctrl+R)。

赶紧试试吧!测试地址:http://jsonview.com/example.json

转:yii2-过滤器检查安全请求和跨域访问设置

原文链接:
https://blog.csdn.net/xmlife/article/details/51816622

过滤器

过滤器是 控制器 动作 执行之前或之后执行的对象。 例如访问控制过滤器可在动作执行之前来控制特殊终端用户是否有权限执行动作, 内容压缩过滤器可在动作执行之后发给终端用户之前压缩响应内容。

过滤器可包含 预过滤(过滤逻辑在动作之前) 或 后过滤(过滤逻辑在动作之后),也可同时包含两者。

使用过滤器

过滤器本质上是一类特殊的 行为,所以使用过滤器和 使用 行为一样。 可以在控制器类中覆盖它的 yii\base\Controller::behaviors() 方法来申明过滤器,如下所示:

public function behaviors()
{
    return [
        [
            'class' => 'yii\filters\HttpCache',
            'only' => ['index', 'view'],
            'lastModified' => function ($action, $params) {
                $q = new \yii\db\Query();
                return $q->from('user')->max('updated_at');
            },
        ],
    ];
}

控制器类的过滤器默认应用到该类的 所有 动作,你可以配置yii\base\ActionFilter::only属性明确指定控制器应用到哪些动作。 在上述例子中,HttpCache 过滤器只应用到index和view动作。 也可以配置yii\base\ActionFilter::except属性使一些动作不执行过滤器。

除了控制器外,可在 模块或应用主体 中申明过滤器。 申明之后,过滤器会应用到所属该模块或应用主体的 所有 控制器动作, 除非像上述一样配置过滤器的 yii\base\ActionFilter::only 和 yii\base\ActionFilter::except 属性。

补充: 在模块或应用主体中申明过滤器,在yii\base\ActionFilter::only 和 yii\base\ActionFilter::except 属性中使用路由 代替动作ID, 因为在模块或应用主体中只用动作ID并不能唯一指定到具体动作。.

当一个动作有多个过滤器时,根据以下规则先后执行:

预过滤
按顺序执行应用主体中behaviors()列出的过滤器。
按顺序执行模块中behaviors()列出的过滤器。
按顺序执行控制器中behaviors()列出的过滤器。
如果任意过滤器终止动作执行,后面的过滤器(包括预过滤和后过滤)不再执行。
成功通过预过滤后执行动作。
后过滤
倒序执行控制器中behaviors()列出的过滤器。
倒序执行模块中behaviors()列出的过滤器。
倒序执行应用主体中behaviors()列出的过滤器。
创建过滤器
继承 yii\base\ActionFilter 类并覆盖 yii\base\ActionFilter::beforeAction() 和/或 yii\base\ActionFilter::afterAction() 方法来创建动作的过滤器,前者在动作执行之前执行,后者在动作执行之后执行。 yii\base\ActionFilter::beforeAction() 返回值决定动作是否应该执行, 如果为false,之后的过滤器和动作不会继续执行。

下面的例子申明一个记录动作执行时间日志的过滤器。

namespace app\components;

use Yii;
use yii\base\ActionFilter;

class ActionTimeFilter extends ActionFilter
{
    private $_startTime;

    public function beforeAction($action)
    {
        $this->_startTime = microtime(true);
        return parent::beforeAction($action);
    }

    public function afterAction($action, $result)
    {
        $time = microtime(true) - $this->_startTime;
        Yii::trace("Action '{$action->uniqueId}' spent $time second.");
        return parent::afterAction($action, $result);
    }
}

核心过滤器

Yii提供了一组常用过滤器,在yii\filters命名空间下,接下来我们简要介绍这些过滤器。

yii\filters\AccessControl

AccessControl提供基于yii\filters\AccessControl::rules规则的访问控制。 特别是在动作执行之前,访问控制会检测所有规则并找到第一个符合上下文的变量(比如用户IP地址、登录状态等等)的规则, 来决定允许还是拒绝请求动作的执行,如果没有规则符合,访问就会被拒绝。

如下示例表示表示允许已认证用户访问create 和 update 动作,拒绝其他用户访问这两个动作。

use yii\filters\AccessControl;

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'only' => ['create', 'update'],
            'rules' => [
                // 允许认证用户
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
                // 默认禁止其他用户
            ],
        ],
    ];
}

更多关于访问控制的详情请参阅 授权 一节。

认证方法过滤器

认证方法过滤器通过HTTP Basic Auth或OAuth 2 来认证一个用户,认证方法过滤器类在 yii\filters\auth 命名空间下。

如下示例表示可使用yii\filters\auth\HttpBasicAuth来认证一个用户,它使用基于HTTP基础认证方法的令牌。 注意为了可运行,yii\web\User::identityClass 类必须 实现 yii\web\IdentityInterface::findIdentityByAccessToken()方法。

use yii\filters\auth\HttpBasicAuth;

public function behaviors()
{
    return [
        'basicAuth' => [
            'class' => HttpBasicAuth::className(),
        ],
    ];
}

认证方法过滤器通常在实现RESTful API中使用,更多关于访问控制的详情请参阅 RESTful 认证 一节。

yii\filters\ContentNegotiator

ContentNegotiator支持响应内容格式处理和语言处理。 通过检查 GET 参数和 Accept HTTP头部来决定响应内容格式和语言。

如下示例,配置ContentNegotiator支持JSON和XML响应格式和英语(美国)和德语。

use yii\filters\ContentNegotiator;
use yii\web\Response;

public function behaviors()
{
    return [
        [
            'class' => ContentNegotiator::className(),
            'formats' => [
                'application/json' => Response::FORMAT_JSON,
                'application/xml' => Response::FORMAT_XML,
            ],
            'languages' => [
                'en-US',
                'de',
            ],
        ],
    ];
}

在应用主体生命周期过程中检测响应格式和语言简单很多, 因此ContentNegotiator设计可被引导启动组件调用的过滤器。 如下例所示可以将它配置在应用主体配置。

use yii\filters\ContentNegotiator;
use yii\web\Response;

[
    'bootstrap' => [
        [
            'class' => ContentNegotiator::className(),
            'formats' => [
                'application/json' => Response::FORMAT_JSON,
                'application/xml' => Response::FORMAT_XML,
            ],
            'languages' => [
                'en-US',
                'de',
            ],
        ],
    ],
];

补充: 如果请求中没有检测到内容格式和语言,使用formats和languages第一个配置项。

# yii\filters\HttpCache
HttpCache利用Last-Modified 和 Etag HTTP头实现客户端缓存。例如:

use yii\filters\HttpCache;

public function behaviors()
{
    return [
        [
            'class' => HttpCache::className(),
            'only' => ['index'],
            'lastModified' => function ($action, $params) {
                $q = new \yii\db\Query();
                return $q->from('user')->max('updated_at');
            },
        ],
    ];
}

更多关于使用HttpCache详情请参阅 HTTP 缓存 一节。

#yii\filters\PageCache
PageCache实现服务器端整个页面的缓存。如下示例所示,PageCache应用在index动作, 缓存整个页面60秒或post表的记录数发生变化。它也会根据不同应用语言保存不同的页面版本。

use yii\filters\PageCache;
use yii\caching\DbDependency;

public function behaviors()
{
    return [
        'pageCache' => [
            'class' => PageCache::className(),
            'only' => ['index'],
            'duration' => 60,
            'dependency' => [
                'class' => DbDependency::className(),
                'sql' => 'SELECT COUNT(*) FROM post',
            ],
            'variations' => [
                \Yii::$app->language,
            ]
        ],
    ];
}

更多关于使用PageCache详情请参阅 页面缓存 一节。

yii\filters\RateLimiter

RateLimiter 根据 漏桶算法 来实现速率限制。 主要用在实现RESTful APIs,更多关于该过滤器详情请参阅 Rate Limiting 一节。

yii\filters\VerbFilter

VerbFilter检查请求动作的HTTP请求方式是否允许执行,如果不允许,会抛出HTTP 405异常。 如下示例,VerbFilter指定CRUD动作所允许的请求方式。

use yii\filters\VerbFilter;

public function behaviors()
{
    return [
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'index'  => ['get'],
                'view'   => ['get'],
                'create' => ['get', 'post'],
                'update' => ['get', 'put', 'post'],
                'delete' => ['post', 'delete'],
            ],
        ],
    ];
}

yii\filters\Cors

跨域资源共享 CORS 机制允许一个网页的许多资源(例如字体、JavaScript等) 这些资源可以通过其他域名访问获取。 特别是JavaScript’s AJAX 调用可使用 XMLHttpRequest 机制,由于同源安全策略该跨域请求会被网页浏览器禁止. CORS定义浏览器和服务器交互时哪些跨域请求允许和禁止。

yii\filters\Cors 应在 授权 / 认证 过滤器之前定义,以保证CORS头部被发送。

use yii\filters\Cors;
use yii\helpers\ArrayHelper;

public function behaviors()
{
    return ArrayHelper::merge([
        [
            'class' => Cors::className(),
        ],
    ], parent::behaviors());
}

Cors 可转为使用 cors 属性。

cors[‘Origin’]: 定义允许来源的数组,可为[‘‘] (任何用户) 或 [‘http://www.myserver.net’, ‘http://www.myotherserver.com’]. 默认为 [‘‘].
cors[‘Access-Control-Request-Method’]: 允许动作数组如 [‘GET’, ‘OPTIONS’, ‘HEAD’]. 默认为 [‘GET’, ‘POST’, ‘PUT’, ‘PATCH’, ‘DELETE’, ‘HEAD’, ‘OPTIONS’].
cors[‘Access-Control-Request-Headers’]: 允许请求头部数组,可为 [‘‘] 所有类型头部 或 [‘X-Request-With’] 指定类型头部. 默认为 [‘‘].
cors[‘Access-Control-Allow-Credentials’]: 定义当前请求是否使用证书,可为 true, false 或 null (不设置). 默认为 null.
cors[‘Access-Control-Max-Age’]: 定义请求的有效时间,默认为 86400.
例如,允许来源为 http://www.myserver.net 和方式为 GET, HEAD 和 OPTIONS 的CORS如下:

use yii\filters\Cors;
use yii\helpers\ArrayHelper;

public function behaviors()
{
    return ArrayHelper::merge([
        [
            'class' => Cors::className(),
            'cors' => [
                'Origin' => ['http://www.myserver.net'],
                'Access-Control-Request-Method' => ['GET', 'HEAD', 'OPTIONS'],
            ],
        ],
    ], parent::behaviors());
}

可以覆盖默认参数为每个动作调整CORS 头部。例如,为login动作增加Access-Control-Allow-Credentials参数如下所示:

use yii\filters\Cors;
use yii\helpers\ArrayHelper;

public function behaviors()
{
    return ArrayHelper::merge([
        [
            'class' => Cors::className(),
            'cors' => [
                'Origin' => ['http://www.myserver.net'],
                'Access-Control-Request-Method' => ['GET', 'HEAD', 'OPTIONS'],
            ],
            'actions' => [
                'login' => [
                    'Access-Control-Allow-Credentials' => true,
                ]
            ]
        ],
    ], parent::behaviors());
}

php截取字符串

php截取字符串的过程中,如果碰到中文字符,substr会返回空值或者乱码,幸好还有一个函数处理中文比较有效

<?php
echo substr("qbcd",1);//bcd 
echo mb_substr("php是世界上最好的web编程语言",1,3,"UTF-8");//对中文有效
?>

js源码转换成php工具

https://github.com/endel/js2php

Installation

Install nodejs
Install js2php globally: npm install -g js2php

Usage

Convert a single JavaScript file into PHP:

js2php examples/simple.js > simple.php

todolist

todolist is based on mytinytodolist project
todolist support php7+

How to install:

1. create 4 tables in your database:

CREATE TABLE `mtt_lists` (
  `id` int(10) UNSIGNED NOT NULL,
  `uuid` char(36) NOT NULL DEFAULT '',
  `ow` int(11) NOT NULL DEFAULT '0',
  `name` varchar(50) NOT NULL DEFAULT '',
  `d_created` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `d_edited` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `sorting` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  `published` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  `taskview` int(10) UNSIGNED NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


ALTER TABLE `mtt_lists`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uuid` (`uuid`);


ALTER TABLE `mtt_lists`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
COMMIT;

CREATE TABLE `mtt_todolist` (
  `id` int(10) UNSIGNED NOT NULL,
  `uuid` char(36) NOT NULL DEFAULT '',
  `list_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `d_created` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `d_completed` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `d_edited` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `compl` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  `title` varchar(250) NOT NULL,
  `note` text,
  `prio` tinyint(4) NOT NULL DEFAULT '0',
  `ow` int(11) NOT NULL DEFAULT '0',
  `tags` varchar(600) NOT NULL DEFAULT '',
  `tags_ids` varchar(250) NOT NULL DEFAULT '',
  `duedate` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

ALTER TABLE `mtt_todolist`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uuid` (`uuid`),
  ADD KEY `list_id` (`list_id`);

ALTER TABLE `mtt_todolist`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
COMMIT;

CREATE TABLE `mtt_tags` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(50) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

ALTER TABLE `mtt_tags`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `name` (`name`);

ALTER TABLE `mtt_tags`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
COMMIT;

CREATE TABLE `mtt_tag2task` (
  `tag_id` int(10) UNSIGNED NOT NULL,
  `task_id` int(10) UNSIGNED NOT NULL,
  `list_id` int(10) UNSIGNED NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

ALTER TABLE `mtt_tag2task`
  ADD KEY `tag_id` (`tag_id`),
  ADD KEY `task_id` (`task_id`),
  ADD KEY `list_id` (`list_id`);
COMMIT;

2. visit your host/index.php

ps:makesure tmp could be written
chmod 777 tmp

转:大雪

你对“大雪”了解吗
人云:“大者,盛也,至此而雪盛也。”“大雪”已至,大部分地区逐渐呈现出“忽如一夜春风来,千树万树梨花开”的美丽景象。本期专题就带大家来看看这场“雪”。
snow
2
3
4
5
6
7
8

layaair引擎文档最新地址

http://ldc2.layabox.com/doc/?nav=zh-as-2-1-9
注意!!导出类型一定要设置为分离模式,只有这个模式可以生成UI类脚本,默认不会生成

php线程安全和非安全

PHP有2中运行方式:ISAPI和FastCGI。

   ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后

不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行

PHP,建议选择Thread Safe版本;

而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全

检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版

本。

   对于apache服务器来说一般选择isapi方式,而对于nginx服务器则选择FastCGI方式。

mac上虚拟机路径

虚拟机:
win7.pvm 路径: /Users/Shared/Parallels/