php命令

作者: 分类: php 时间: 2016-04-13 评论: 暂无评论

php -S 在某个url地址允许php文件 // php -S localhost:8080 demo/ 浏览器打开 localhost:8080 就可以看到index.php
php -r 运行一般跑phpinfo(); // php -r 'phpinfo();'
php -m 可以查看 module
php -v php的版本和 Zend信息
php -rf 显示函数信息
php --ini 显示配置文件的路径
php index.php /Test/deal 在服务器执行某个项目下控制Test 的deal方法,记得切换到项目目录下

nginx 允许访问目录

作者: 分类: lnmp 时间: 2016-04-13 评论: 暂无评论

nginx 允许访问目录,即列出目录

server {
        ....
        location / {
                index  index.php index.html index.htm;
        }
        location / {
               autoindex on;
        }
}

禁止访问目录

location /dirdeny {
      deny all;
      return 403;
}

php反射机制

作者: 分类: php 时间: 2016-04-11 评论: 暂无评论

一、反射是什么
反射是操纵面向对象范型中元模型的API(php5)
通过ReflectionClass,我们可以得到Person类的以下信息:
1)常量 Contants
2)属性 Property Names
3)方法 Method Names静态
4)属性 Static Properties
5)命名空间 Namespace
6)Person类是否为final或者abstract

<?php
class Person{
    public $id;
    public $username;
    private $pwd;
    private $sex;
    public  function run(){
        echo  '<br/>running';
    }
}

$class=new ReflectionClass('Person'); //建立反射类
$instance=$class->newInstance(); //实例化
print_r($instance); //Person Object ( [id] => [username] => [pwd:Person:private] => [sex:Person:private] => )

$properties = $class->getProperties();
foreach($properties as $property) {
    echo "<br/>".$property->getName();
}
//默认情况下,ReflectionClass会获取到所有的属性,private 和 protected的也可以。如果只想获取到private属性,就要额外传个参数:
//$private_properties = $class->getProperties(ReflectionProperty::IS_PRIVATE);
//可用参数列表:
//               ReflectionProperty::IS_STATIC
//               ReflectionProperty::IS_PUBLIC
//               ReflectionProperty::IS_PROTECTED
//               ReflectionProperty::IS_PRIVATE
//     如果要同时获取public 和private 属性,就这样写:ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED。
//   通过$property->getName()可以得到属性名。

$class->getMethods();
//获取方法(methods):通过getMethods() 来获取到类的所有methods。

$instance->run(); //执行Person 里的方法getBiography
//或者:
$ec=$class->getmethod('run');  //获取Person 类中的getName方法
$ec->invoke($instance);

sql索引详解及应用

作者: 分类: mysql 时间: 2016-04-11 评论: 暂无评论
一、索引是什么

    索引是指把你设置为索引的字段A的内容储存在一个独立区间S里,里面只有这个字段的内容。在找查这个与这个字段A的内容时会直接从这个独立区间里查找,而不是去到数据表里查找。找到的这些符合条件的字段后再读取字段A所指向真实的数据记录的物理地址,再把对应的数据内容输出。 如果你查找的不是索引的字段那么他会从数据表里面查找。因为数据表有很多不相关的字段,数据库程序是不会省略不查找。要判断那些不相关的字段以及多次在记录中跳转是花费一定的资源的。 当然不是设置越多索引就越好。因为索引都放到这个独立区间S,独立区间S越大搜索所占的资源就越大。如果你只有一个字段为索引,那么你搜索这个字段是非常快。

    对于任何DBMS,索引都是进行优化的最主要的因素。对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降。

    如果对多列进行索引(组合索引),列的顺序非常重要,MySQL仅能对索引最左边的前缀进行有效的查找。例如:
假设存在组合索引it1c1c2(c1,c2),查询语句select * from t1 where c1=1 and c2=2能够使用该索引。查询语句select * from t1 where c1=1也能够使用该索引。但是,查询语句select * from t1 where c2=2不能够使用该索引,因为没有组合索引的引导列,即,要想使用c2列进行查找,必需出现c1等于某值。


二、索引的适用范围

    一般来说,在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引

三、索引如何使用

1.选择索引的数据类型

MySQL支持很多数据类型,选择合适的数据类型存储数据对性能有很大的影响。通常来说,可以遵循以下一些指导原则:

(1)越小的数据类型通常更好:越小的数据类型通常在磁盘、内存和CPU缓存中都需要更少的空间,处理起来更快。
(2)简单的数据类型更好:整型数据比起字符,处理开销更小,因为字符串的比较更复杂。在MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储时间;以及用整型数据类型存储IP地址。
(3)尽量避免NULL:应该指定列为NOT NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。

2.1、索引的类型
索引是在存储引擎中实现的,而不是在服务器层中实现的。所以,每种存储引擎的索引都不一定完全相同,并不是所有的存储引擎都支持所有的索引类型。mysql支持B-Tree索引和hash索引.



2.建立索引
普通索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

主键索引   添加PRIMARY KEY
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

唯一索引    添加UNIQUE
ALTER TABLE `table_name` ADD UNIQUE ( `column` )

全文索引    添加FULLTEXT
ALTER TABLE `table_name` ADD FULLTEXT ( `column`)

多列索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
删除索引
DROP INDEX [indexName] ON mytable;
    
四、使用索引的注意事项
使用索引时,有以下一些技巧和注意事项:
1.索引不会包含有NULL值的列
只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
2.使用短索引
对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
3.索引列排序
MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
4.like语句操作
一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。
5.不要在列上进行运算
如下:
select * from users where YEAR(adddate)<2007;
将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成:
select * from users where adddate<‘2007-01-01';
6.不使用NOT IN和<>操作

整理js遇到的一些关键词的用法

作者: 分类: js 时间: 2016-04-05 评论: 暂无评论

1.typeof:检查一个变量是否存在,是否有值.不存在返回undefined
typeof array 返回 array
注意:

typeof null=object 

2.A instanceof B //A是否是类B的实力

3.continue 与break 的区别,break跳出整个循环,continue则是跳出当前的一个循环,执行下一个.

4.定义一个封闭的域, 它不仅避免了干扰,也使得内存在执行完后立即释放.代码加载立即执行.
use strict 指定使用javascript严格模式,禁止使用javascript一些糟糕的写法

(function(){}(
  'use strict';
));

5.prototype javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。
A.prototype = new B();
理解prototype不应把它和继承混淆。A的prototype为B的一个实例,可以理解A将B中的方法和属性全部克隆了一遍。A能使用B的方法和属性。这里强调的是克隆而不是继承。可以出现这种情况:A的prototype是B的实例,同时B的prototype也是A的实例。

  1. import,requirt 引入对象,函数 ;export导出对象,函数

exprot.name='ManTou'; //user.js
var user=require('user.js') //index.js 或者 import user from('app.js')
console.log(user.name) // ManTou

import { Router, Route, Link } from 'react-router' 相当于

// 不使用 ES6 的转译器
var ReactRouter = require('react-router')
var Router = ReactRouter.Router
var Route = ReactRouter.Route
var Link = ReactRouter.Link

export default 用import App from 'app.js'接收
module.exporsts=app;用require('app.js')接收

JS中文文档地址:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference