学习笔记[6.5-6.13]php
打开数据库格式: mysql -h主机地址 -u用户名 -phtml
重启nginx:sudo /etc/init.d/nginx restart或者service nginx restart mysql
修改权限:chmod *** filenamenginx
注意版本,好像从5.6根5.5就不同,配置文件更深了一层。git
1.用vim或nano编辑 /etc/MySQL/mysql.conf.d/mysqld.cnfredis
2.[mysqld]后面添加 character_set_server=utf8 保存退出sql
3.#service mysql restart数据库
mysql> use dbname express
Reading table information for completion of table and column names 编程
You can turn off this feature to get a quicker startup with -A
而后就卡在这里。
上面卡住的缘由::
是因为数据库太大,即数据库中表很是多,因此若是预读数据库信息,将很是慢,因此就卡住了,若是数据库中表很是少,将不会出现问题。
问题的缘由是:
咱们进入mysql 时,没有使用-A参数;
即咱们使用
mysql -hhostname -uusername -ppassword -Pport 的方式进入数据,
而没有使用
mysql -hhostname -uusername -ppassword -Pport -A的方式进入数据库。
选择license server。而后复制http://idea.imsxm.com/
1.加入源ppa例如:sudo add-apt-repository ppa:git-core/ppa
2.更新源sudo apt-get update
3.安装sudo apt-get install git
4.检验:git --version
echo是PHP语句, print和print_r是函数,语句没有返回值,函数能够有返回值(即使没有用)
print只能打印出简单类型变量的值(如int,string)
print_r能够打印出复杂类型变量的值(如数组,对象)
echo -- 输出一个或者多个字符串
Description
void echo ( string arg1 [, string ...] ) //返回值为空
echo "你好"," 朋友";
print --输出一个字符串
Description
int print ( string arg )//返回值为整形
print "你好朋友";
能够进行下面操做
$name=print "nihao \n";
$str = 'test print value is $name .';
eval("$print=\"$str\";");
echo $print;
print_r -- 打印关于变量的易于理解的信息。
bool print_r ( mixed expression [, bool return] ) //返回值是布尔型的,参数是mix类型的,能够是字符串,整形,数组,对象类print_r() 显示关于一个变量的易于理解的信息。若是给出的是 string、integer 或 float,将打印变量值自己。若是给出的是 array,将会按照必定格式显示键和元素。object 与数组相似。
print_r() 将把数组的指针移到最后边。
你能够
print_r(str);
print_r(int);
print_r(array);
print_r(obj);
也能够用var_dump var_export
php里的单引号把内容当成纯文本,不会通过服务器翻译。而双引号则与此相反。里面的内容会通过服务器处理(process). 举个简单的例子:
$foo="data";
echo '$foo'; //单引号输出$foo
echo "$foo"; //双引号输出data
单引号不能处理变量和转义字符(除了\\和\'这两个),要输出下面的字符串。
一旦涉及到Mysql中的sql语句,就更得当心了。从简单提及,sql语句,其中的条件是常量
SELECE * FROM email_table WHERE username="abc";
php中能够写成
$query="SELECE * FROM email_table WHERE username='abc'";//query语句必定要用双引号括起来
查询的条件是变量,如$abc=$_POST['username'];
能够写成:$query="SELECT * FROM email_table WHERE username=' ".$abc." ' ";
能够分红几步理解:
1."SELECT * FROM email_table WHERE username=' " 纯字符串
2. .链接符,用来连接后面的字符
3.$abc 显示变量的值
4." ' "连字符连接后面的单引号(为了与条件中的第一个单引号配对)
其实没必要这么复杂,能够这么写
$query="SELECT * FROM email_table WHERE username='$abc' ";
能够这么理解,双引号内部的全都要被服务器解析,单引号只是当成普通字符而已.
getcwd() :显示是 在哪一个文件里调用此文件 的目录
__DIR__ :当前内容写在哪一个文件就显示这个文件目录
__FILE__ : 当前内容写在哪一个文件就显示这个文件目录+文件名
1.首先要知道:
./ 表明当前目录
../表明父级目录
/表明根目录.
‘/var/ww’为绝对路径
‘./var/www’为想对路径
‘a.app’就是未肯定路径
2.路径分三种:相对路径,绝对路径以及未肯定路径
3要注意的时相对路径须要一个参考目录才能肯定文件的最终路径,在包含嵌套多少层,这个参考目录时程序执行入口文件所在目录
为了精简视图文件,在使用控制语句和echo语句时使用php的替代语法,
例如:
<?php echo $table;?>能够精简为<?=$table?>
再例如控制语句中:
<ul><?php foreach($todo as $item):?>
<li><?=$item?></li>
<?php endforeach;?></ul>
这里没有任何括号.全部的结束括号被替换成了endforeach.上面说的那些控制语句结构一抖有这相似的结束标志:endid,endfor,endforeach和endwhile.要注意的一点时,每一个分支结构后面都要跟一个冒号,而不是分号(除了最后一个)
该函数接收字符串做为参数,用于检验用户提交的并将组合到sql查询语句的变量值,它将转义那些有可能无心或带恶意的字符。如单引号,在外国人的姓名有可能会包含该符号(如O'Toole),这时就须要用它。案例:
$name = $_POST['name'];
$name = mysqli_real_escape_string($dbc,$name);
$query = "Select ... From tb where name='$name'";
这样能够确保带入sql 时参数的安全。注意:若是在使用php6以前的版本,若启用MAGIC QUOTES魔法引用时,那么在使用mysqli_real_escape_string前,须要用stripslashes(para)删除魔法引用添加的任何斜杠,以下:$fn = mysqli_real_escape_string($dbc,trim(stripslashes($_POST['firstName']))); 备注:在PHP5.3版本以前, mysqli_real_escape_string()函数存在路径泄漏问题,远程攻击者能够利用漏洞得到服务器端脚本的实际路径。即若是传递的参数值为数组而不是字符串的状况下会发出警告,警告消息中会包含有当前服务端运行脚本的完整路径信息。
缓存机制:html页面读取数据时先肯定redis中是否存有数据,若是有就直接调取,若是没有则先从MySQL中调取数据存入缓存,再从缓存中提取显示.
与MySQL同步增删改的方法:在MySQL数据库有修改时直接刷新redistribute缓存便可;
__LINE__:显示文件中的当前行号.
__FILE__:文件的完整路径和文件名,若是用在被包含的文件中,则返回被包含的文件经,自PHP4.0.2起,__FILE__老是包含一个绝对路径,若是时符号连接,只是解析后的绝对路径,而在此以前的版本有时会包含一个相对路径.
__DIR__:文件所在的目录,若是用在被包括的文件中,则返回白包含的文件所在的目录,它等价于dirname(__FILE__),除非是根目录,不然目录名中不包括末尾的斜杠.
__FUNCTION__:函数名称,自php5开始起本常量返回该函数被定义时的名字,区分大小写在php4中该值总时小写字母的.
__CLASS__:类的名称.自php5本常量返回该函数被定义时的名字,区分大小写,在php4中该值老是小写字母,类名包括被定义声明的做用域,注意自5.4起对trait也起做用,当用在trait方法中时,时调用trait方法的类的名字.
__TRAIT__;类的方法名,返回该方法被定义时的名字,区分大小写.
__NAMESPACE__:当前命名空间的名称,区分大小写,此常量实在编译时定义的.
this就是指向当前对象实例的指针,不指向任何其余对象或类。要用this,你必有是一个对像的形势,否则它会报错的,Fatal error: Using $this when not in object context。this能够调用本类中的方法和属性,也能够调用父类中的能够调的方法和属性
self是指向类自己,也就是self是不指向任何已经实例化的对象,通常self使用来指向类中的静态变量,self能够访问本类中的静态属性和静态方法,能够访问父类中的静态属性和静态方法。用self时,能够不用实例化的.
parent能够访问父类中的静态属性和静态方法。用parent时,能够不用实例化的,咱们知道parent是指向父类的指针,通常咱们使用parent来调用父类的构造函数。
一般不知道须要重复的次数时用while循环,若是要求一个固定次数的重复用for循环.
HTTP:超文本传输协议的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议.
HTML:HTML 指的是超文本标记语言 (Hyper Text Markup Language)
HTML 不是一种编程语言,而是一种标记语言(markup language)
标记语言是一套标记标签(markup tag)
HTML 使用标记标签来描述网页
JavaScript:客户端脚本编程语言,也就是Ajax中的"J"
XHTML:可扩展的超文本标记语言,是基于可可扩展标记语言的标记语言(XML);
XML:可扩展标记语言,被设计用来传输和存储数据.
DHTML:动态HTML,是一个描述将静态HTML,级联样式单(CSS)以及javas结合,而且在载入一个静态web页面全部元素后,经过文档对象模型修改页面外观的术语.
服务器端编程语言:php,jsp,asp,peri等等.
Ajax:异步JavaScript和XML,AJAX 是一种用于建立快速动态网页的技术。
经过在后台与服务器进行少许数据交换,AJAX 可使网页实现异步更新。这意味着能够在不从新加载整个网页的状况下,对网页的某部分进行更新。传统的网页(不使用 AJAX)若是须要更新内容,必需重载整个网页面。有不少使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等
cookie的内容主要包括:名字,值,过时时间,路径和域。路径与域一块儿构成cookie的做用范围。若不设置过时时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie通常不存储在硬盘上而是保存在内存里,固然这种行为并非规范规定的。若设置了过时时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过时时间。存储在硬盘上的cookie能够在不一样的浏览器进程间共享,好比两个IE窗口。而对于保存在内存里的cookie,不一样的浏览器有不一样的处理方式session机制。session机制是一种服务器端的机制,服务器使用一种相似于散列表的结构(也可能就是使用散列表)来保存信息。当程序须要为某个客户端的请求建立一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),若是已包含则说明之前已经为此客户端建立过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),若是客户端请求不包含session id,则为此客户端建立一个session而且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式能够采用cookie,这样在交互过程当中浏览器能够自动的按照规则把这个标识发送给服务器。通常这个cookie的名字都是相似于SEEESIONID。但cookie能够被人为的禁止,则必须有其余机制以便在cookie被禁止时仍然可以把session id传递回服务器。
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人能够分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
3、session会在必定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,不少浏览器都限制一个站点最多保存20个cookie。
<?php
$d=
mktime
(9, 12, 31, 6, 10, 2015);
echo
"
建立日期是
"
. date(
"Y-m-d h:i:sa"
, $d);
输出:建立日期是 2015-06-10 09:12:31am
(时,分,秒,月,日,年)
若是返回值是数值,通常返回-1或者null来表示异常并打印日志,若是返回是数组,通常出现异常就返回空数组,若是返回只字符串,出现异常就返回null,有必要就记录日志.上层调用的时候要对这些异常进行判断,
对于用户输入的内容,要作严格的检查,包括从url中获得的
若是时代码中敲入的能够直接这样:
Zrank :
返回有序集key中成员member的排名。其中有序集成员按score值递增(从小到大)顺序排列。
排名以0为底,也就是说,score值最小的成员排名为0若是member是有序集key的成员,返回member的排名。若是member不是有序集key的成员,返回nil。
redis> ZRANGE salary 0 -1 WITHSCORES # 显示全部成员及其 score 值 1) "peter" 2) "3500" 3) "tom" 4) "4000" 5) "jack" 6) "5000" redis> ZRANK salary tom # 显示 tom 的薪水排名,第二 (integer) 1
Zrange:
返回有序集key中,指定区间内的成员。其中成员的位置按score值递增(从小到大)来排序。
返回值:
指定区间内,带有score值(可选)的有序集成员的列表。
redis > ZRANGE salary 0 -1 WITHSCORES # 显示整个有序集成员
1) "jack" 2) "3500" 3) "tom" 4) "5000" 5) "boss" 6) "10086" redis > ZRANGE salary 1 2 WITHSCORES # 显示有序集下标区间 1 至 2 的成员 1) "tom" 2) "5000" 3) "boss" 4) "10086" redis > ZRANGE salary 0 200000 WITHSCORES # 测试 end 下标超出最大下标时的状况 1) "jack" 2) "3500" 3) "tom" 4) "5000" 5) "boss" 6) "10086" redis > ZRANGE salary 200000 3000000 WITHSCORES # 测试当给定区间不存在于有序集时的状况 (empty list or set)