ubuntu14.04安装php5
debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password password root' && debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password_again password root' && apt-get install mysql-server mysql-client apache2 php5 php5-cli php5-common php-pear php5-curl php5-dbg php5-dev php5-gd php5-ldap php-auth php5-mysql php5-sqlite php5-xmlrpc php5-xsl php5-tidy php5-imagick php5-imap php5-memcache php5-mcrypt php5-radius php5-xcache php5-xdebug phpunit php5-geoip php5-intl libapache2-mod-php5
debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password password root' && debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password_again password root' && apt-get install mysql-server mysql-client nginx php5 php5-cli php5-common php-pear php5-curl php5-dbg php5-dev php5-gd php5-ldap php-auth php5-mysql php5-sqlite php5-xmlrpc php5-xsl php5-tidy php5-fpm php5-imagick php5-imap php5-memcache php5-mcrypt php5-radius php5-xcache php5-xdebug phpunit php5-geoip php5-intl
debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password password root' && debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password_again password root' && apt-get install mysql-server mysql-client nginx apache2 php5 php5-cli php5-common php-pear php5-curl php5-dbg php5-dev php5-gd php5-ldap php-auth php5-mysql php5-sqlite php5-xmlrpc php5-xsl php5-tidy php5-imagick php5-imap php5-memcache php5-mcrypt php5-radius php5-xcache php5-xdebug phpunit php5-geoip php5-intl libapache2-mod-php5 php5-fpm
魔术方法:
PHP把所有以__(两个下划线)开头的类方法当成魔术方法。所以你定义自己的类方法时,不要以 __为前缀。
1、__construct()
当实例化一个对象的时候,这个对象的构造方法将首先被调用;
我们知道php5对象模型和类名相同的函数是类的构造函数,那么如果同时定义构造函数和__construc()方法的话,php5会默认调用__contruct()而不会调用同类名函数,所以__contruct()作为类的默认构造函数;
2、__destruct()
析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
3、__get(string $name)
当试图读取一个并不存在的属性时被调用;如果试图读取一个对象并不存在的属性的时候,php就会给出错误的信息。如果在类里添加__get方法,并且我们可以用这个函数实现类似java中的反射的各种操作。
4、__set(string $name, mixed $value)
给未定义的变量赋值时将被调用
5、__call(string $name, array $arguments)
当调用一个不可访问方法(如未定义,或者不可见)时,__call() 会被调用。
__callStatic(string $name, array $arguments)
当在静态方法中调用一个不可访问方法(如未定义,或者不可见)时,__callStatic() 会被调用。
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄、收藏。可是为什么要这么写却不知其然。本文用一个最短的例子说明脚本的原理。
脚本代码如下:
#!/usr/bin/expect set timeout 30 spawn ssh -l username 192.168.1.1 expect "password:" send "ispass\r" interact
1. [#!/usr/bin/expect]
这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。
注意:这一行需要在脚本的第一行。
2. [set timeout 30]
基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒
3. [spawn ssh -l username 192.168.1.1]
spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。
它主要的功能是给ssh运行进程加个壳,用来传递交互指令。
CSS Hack的原理是什么
由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系。我们就可以根据这个来针对不同的浏览器来写不同的CSS。
CSS Hack表现形式
CSS Hack大致有3种表现形式,CSS类内部Hack、选择器Hack以及HTML头部引用(if IE)Hack,CSS Hack主要针对IE浏览器。
类内部Hack:比如 IE6能识别下划线"_"和星号" * ",IE7能识别星号" * ",但不能识别下划线"_",而firefox两个都不能认识。等等
选择器Hack:比如 IE6能识别*html .class{},IE7能识别*+html .class{}或者*:first-child+html .class{}。等等
HTM[1]L头部引用(if IE)Hack:针对所有IE:,针对IE6及以下版本:,这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效。
书写顺序,一般是将识别能力强的浏览器的CSS写在前面。
各种浏览器专属hack
#hack{background-color:red;*background-color:green;}
#hack{background-color:red;_background-color:green;}
#hack{background-color:red;*background-color:green !important;}
注:!important 对IE6不起作用,但是IE7,IE8,IE9,FF,Chrome都支持,* 加 !important 可以唯一确定是IE7
慢查询日志简介
mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出代码实现中耗费资源的sql语句,对我们程序的优化有很高的参考。
查看慢查询日志是否开启
使用下面命令查看:
show variables like '%slow%';
slow_query_log OFF说明并未开启慢查询。
sqlow_query_log_file 是慢查询日志的存放位置。
开启慢查询
方法一:
使用下面命令开启:
set global slow_query_log='ON';
查看慢查询的超时时间,即sql语句执行时间查过设置的这个时间将视为慢查询。
show variables like '%long_query_time%';