php入门学习笔记
学习笔记[6.5-6.13]
1.常用命令
打开数据库格式: mysql -h主机地址 -u用户名 -p
重启nginx:sudo /etc/init.d/nginx restart或者service nginx restart
修改权限:chmod *** filename
2.mysql5.7修改配置文件
注意版本,好像从5.6根5.5就不一样,配置文件更深了一层。
1.用vim或nano编辑 /etc/MySQL/mysql.conf.d/mysqld.cnf
2.[mysqld]后面添加 character_set_server=utf8 保存退出
3.#service mysql restart
3.终端链接进入数据库的一个错误
mysql> use dbname
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的方式进入数据库。
4.Phpstorm license server
选择license server。然后复制http://idea.imsxm.com/
5.用终端apt-get安装软件:
1.加入源ppa例如:sudo add-apt-repository ppa:git-core/ppa
2.更新源sudo apt-get update
3.安装sudo apt-get install git
4.检验:git --version
6.echo,print,print_r的区别:
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
7.php中单引号和双引号的区别:
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' ";
可以这么理解,双引号内部的全都要被服务器解析,单引号只是当成普通字符而已.
8.PHP取路径:
getcwd() :显示是 在哪个文件里调用此文件 的目录
__DIR__ :当前内容写在哪个文件就显示这个文件目录
__FILE__ : 当前内容写在哪个文件就显示这个文件目录+文件名
9.相对路径和绝对路径问题
1.首先要知道:
./ 代表当前目录
../代表父级目录
/代表根目录.
‘/var/ww’为绝对路径
‘./var/www’为想对路径
‘a.app’就是未确定路径
2.路径分三种:相对路径,绝对路径以及未确定路径
3要注意的时相对路径需要一个参考目录才能确定文件的最终路径,在包含嵌套多少层,这个参考目录时程序执行入口文件所在目录
10.php短标记的用法
为了精简视图文件,在使用控制语句和echo语句时使用php的替代语法,
例如:
<?php echo $table;?>可以精简为<?=$table?>
再例如控制语句中:
<ul><?php foreach($todo as $item):?>
<li><?=$item?></li>
<?php endforeach;?></ul>
这里没有任何括号.所有的结束括号被替换成了endforeach.上面说的那些控制语句结构一抖有这类似的结束标志:endid,endfor,endforeach和endwhile.要注意的一点时,每个分支结构后面都要跟一个冒号,而不是分号(除了最后一个)
11.mysqli_real_escape_string($dbc,para)
该函数接收字符串作为参数,用于检验用户提交的并将组合到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()函数存在路径泄漏问题,远程攻击者可以利用漏洞获得服务器端脚本的实际路径。即如果传递的参数值为数组而不是字符串的情况下会发出警告,警告消息中会包含有当前服务端运行脚本的完整路径信息。
12.redis缓存机制
-
缓存机制:html页面读取数据时先确定redis中是否存有数据,如果有就直接调取,如果没有则先从MySQL中调取数据存入缓存,再从缓存中提取显示.
-
与MySQL同步增删改的方法:在MySQL数据库有修改时直接刷新redistribute缓存即可;
13.PHP八个魔术常量
-
__LINE__:显示文件中的当前行号.
-
__FILE__:文件的完整路径和文件名,如果用在被包含的文件中,则返回被包含的文件经,自PHP4.0.2起,__FILE__总是包含一个绝对路径,如果时符号链接,只是解析后的绝对路径,而在此之前的版本有时会包含一个相对路径.
-
__DIR__:文件所在的目录,如果用在被包括的文件中,则返回白包含的文件所在的目录,它等价于dirname(__FILE__),除非是根目录,否则目录名中不包括末尾的斜杠.
-
__FUNCTION__:函数名称,自php5开始起本常量返回该函数被定义时的名字,区分大小写在php4中该值总时小写字母的.
-
__CLASS__:类的名称.自php5本常量返回该函数被定义时的名字,区分大小写,在php4中该值总是小写字母,类名包括被定义声明的作用域,注意自5.4起对trait也起作用,当用在trait方法中时,时调用trait方法的类的名字.
-
__TRAIT__;类的方法名,返回该方法被定义时的名字,区分大小写.
-
__NAMESPACE__:当前命名空间的名称,区分大小写,此常量实在编译时定义的.
14.class中self,this,parent的区别
-
this就是指向当前对象实例的指针,不指向任何其他对象或类。要用this,你必有是一个对像的形势,不然它会报错的,Fatal error: Using $this when not in object context。this可以调用本类中的方法和属性,也可以调用父类中的可以调的方法和属性
-
self是指向类本身,也就是self是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量,self可以访问本类中的静态属性和静态方法,可以访问父类中的静态属性和静态方法。用self时,可以不用实例化的.
-
parent可以访问父类中的静态属性和静态方法。用parent时,可以不用实例化的,我们知道parent是指向父类的指针,一般我们使用parent来调用父类的构造函数。
15.for循环和while循环
通常不知道需要重复的次数时用while循环,如果要求一个固定次数的重复用for循环.
16.常见编程技术英文缩写
-
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 地图、开心网等等
17.session和cookie
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。
18.输出数组中时间的格式:
<?php
$d=
mktime
(9, 12, 31, 6, 10, 2015);
echo
"
创建日期是
"
. date(
"Y-m-d h:i:sa"
, $d);
输出:创建日期是 2015-06-10 09:12:31am
(时,分,秒,月,日,年)
19.异常处理
-
如果返回值是数值,一般返回-1或者null来表示异常并打印日志,如果返回是数组,一般出现异常就返回空数组,如果返回只字符串,出现异常就返回null,有必要就记录日志.上层调用的时候要对这些异常进行判断,
-
对于用户输入的内容,要做严格的检查,包括从url中得到的
如果时代码中敲入的可以直接这样:
13.zrank和zrange
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)