php学习笔记
整理自兄弟连学习视频
<!--
类型:
无类型 NULL 大小写敏感
布尔型 bool Boolean
数值型
整型 integer
十进制 八进制 十六进制
浮点型 float
1.234 1.2e3 7E-10
当整型过大时,会自动转换成浮点型
字符串
单引号
双引号
定界符
如$string = <<<EDD……EDD
资源类型
特殊变量,保存了对外部资源的一个引用
变量
PHP中,变量的类型可以任意转换,变量定义时不需要明确的类型定义,变量类型的使用是根据上下文来决定的。
注意:$foo = 5 + "10 little piggies";输出为15
允许的强制转换有
布尔:(bool) (boolean)
整型: (int) (integer)
浮点型:(float) (double) (real)
可变变量:
指一个变量的变量名可以动态的设置和使用,一个可变变量获取了一个普通变量的值作为其变量名,这个变量就叫可变变量。
如:$a="hello";
$$a="world";
var_dump($$a);
echo"$$a";
输出结果:string(15) "world" string(5) "$hello"
注意:超全局变量不可做可变变量
预定义变量
$_SERVER 服务器变量,包含了头信息,路径,脚本位置等组成的数组
$_ENV 环境变量,包含操作系统类型,软件版本等信息组成的数组
$_COOKIE HTTPCookies变量 通过HTTP Cookies传递的变量组成的数组
$_GET HTTP GET变量,通过HTTP GET方法传递的变量组成的数组
$_POST HTTP POST变量,通过 HTTP POST 方法传递给当前脚本的变量的数组。
$_FILES HTTP文件上传变量,通过HTTP POST方法传递的已上传文件项目组成的数组
$_REQUEST request变量,此关联数组包含了$_GET,$_POST,$COOKIE中的全部内容
$_SESSION session变量,包含当前脚本中session数组
$GLOBALS 全局变量,由所有已定义全部变量组成的数组
外部变量
表单中的变量 HTTP Cookies也是外部变量
变量引用
用$开头
变量销毁
unset($a) //销毁变量
常量
定义
使用define函数定义
如:define("CONSTANT","hello world");
注意:
常量前面没有$符号
变量只能用define定义
常量可以在任何地方定义和访问
一旦定义就不能再被更改
魔术变量
__LINE__ 文件的当前行号
__FILE__ 文件的完整路径和文件名,如果包含在文件中,
__FUNCTION__ 函数名称,返回该类型被定义时的名字
__CLASS__ 类的名称,返回该类被定义时的名字
__METHOD__ 类的方法,返回该方法被定义时的名字
运算符,表达式,语句
算术运算符
+ - * /(返回的总是浮点数)
求模
%
取反
数值取反(-)
赋值运算符
自运算符
+= -= %= *= /=
递增递减运算
++ -- --
字符串运算符
. .=
比较运算符
逻辑运算符
!(NOT) &&(AND) ||(OR) Xor
位运算符
& | ^ << >> ~
执行运算符
`
PHP尝试将执行运算符(反引号)中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单的丢到标准输出),通常用来执行操作系统命令
错误控制运算符
@
当@放在PHP表达式前面时,表达式可能产生的任何错误信息都被忽略掉
注意:@只对表达式有效,例如,可以放在变量,函数,和include()调用,常量等之前,但不能放在函数或类的定义前,也不能用于条件结构前
表达式
语句 分号
注释
// 单行注释
# 单行注释
/* 多行注释 */
顺序流程
条件分支
if if…else ?:
if…elseif…else
switch…case(变量只能是数值和字符串类型)
循环
while do…while for(;;)
foreach(仅用于数组)
关键字 break continue return
异常处理
try{
}catch(Exception e){
}
declare语句
通常用来进行调试,目前只接受一个指令
函数
内置函数
自定义函数
用function定义
在PHP中,函数具有全局性,可以在程序的任何地方引用,定义函数的位置可以在程序的任何地方,设置可以放在另一个函数的内部
如
<?php
function foo(){
echo "这是foo函数<br>";
function bar(){
echo "这是bar函数<br>";
}
}
etc();
function etc(){
echo "这是etc函数<br>";
}
foo();
bar();
?>
注意:
在上述例子里,如果先调用bar()函数,能运行吗?不能!因为此时由于fun()没有执行,故bar()也就尚未定义,不能调用
如果,按照foo(),fun(),bar()的顺序执行呢?依然会有错误,因为,当每次调用fun()都会对bar进行定义,故调用两次fun(),会对bar()定义两次,故也会出现定义
综上所述,很少会在函数里定义函数,除非你确定外层函数只调用一次!!!
函数参数
值传递
引用传递: &$var
如果希望函数修改函数外部的变量,则使用引用传递
默认值: 函数的参数可以设置一个默认值,默认值必须是常量表达式
注意:在函数参数使用默认值时,如果有多个参数,那么需要将默认值参数放在任何非默认值参数后面
返回值
只需要在函数前面加上符号“&”
动态调用函数
PHP允许变量和函数同名,如此,当变量后面有参数,PHP会尝试调用与变量值相同的函数
如:$functionName="strlower"
String = "ABGG"
$functionName($string);
变量的作用域
局部作用域
变量的作用是自己所在的花括号里{},但是在嵌套的花括号里不起作用
要想在嵌套花括号使用外面的变量,使用global $var
如
<?php
$abc=123;
function fun(){
global $abc;
echo $abc;
}
?>
只有加上global才能在fun里使用abc
全局作用域
只要定义的变量具有全局属性,那么该变量都可以用"$GLOBAL[‘变量名字‘]"来访问,不论在何时何地,具有全局属性的变量通常指没有在任何条件或一些结构下定义的变量。
字符串
函数
int strlen();
计算的是UTF-8编码的字符串,其中的单个中文字的长度会被计算成3
int mb_strlen();
mb_str(string str[,string encoding]);
使用前必须确保在php.ini中加载了php_mbstring.dll
string substr(string str,int start[, int length])
int strpos(string haystack,mixed needle[,int offset]);
返回在haystack中第一次出现的位置,如果找不到则返回一个FALSE
array explode(string separator ,string str[,int limit]);
string implode(string glue,array pieces);
glue为合并数组元素成字符串时使用的连接符,pieces为需要合并的数组
string iconv (string in_charset,string out_charset,string str);
设置字符编码
时间和日期
string date(string $format[,int $timestamp])
年
Y 1999
y 99
月
F January,February,March,April,May,June,July,August,September,October,November,December
m 01-12
M Jan-Dec
日
d 00-31
D 星期:Mon-Sun
N 星期:1-7
时间
H 小时:00-23
h 小时:01-12
g,G 小时:没有前导零
i 分钟:00-59
s 秒:00-59
函数:
time() 返回时间戳
mktime() 生成指定日期时间的时间戳
指定的时间必须在2038年之前
time()-mktime() 可以用来计算年龄
checkdate() 检测日期的合法性,参数为,月,日,年
如:checkdate(4,31,2010)//检测2010年4月31日
修改php的默认时区
date_default_timezone_set()
date_default_timezone_set("Asia/Shanghai");
date_default_timezone_set("PRC");//PRC 中华人民共和国的缩写
使用微妙计算PHP脚本执行的时间
microtime();//返回时间戳和微妙数
带参数才直接返回一个时间值浮点数
图像
(1)创建画布 --资源类型-- 高度,宽度
(2)绘制图像
制定各种颜色
矩形,圆,点,线段,扇形,字(字符,字符串,freetype),
每一个图像对应一个函数
(3)输出图像或者保存已处理图片,
(4)释放资源
一,画图
验证码,统计图,
安装GD库
1,创建画布
resource imagecreatetruecolor(width ,height)
注意,使用imagefttext()函数绘制字体时要将字体指定为utf-8格式,否则写出来的是乱码
imagefttext($resource,$fontsize,$degree,$x,$y,$color,$freetypefont,$string);
二,处理图像
图片缩放,加水印,电子相册,
处理格式,GIF PNG JPG XPN,具体要看自己的服务器是否安装了对应图片的处理
支持字体:FreeType
裁剪,锐化,缩放,翻转,旋转,透明
一,创建资源
gif,jpg,png,
imagecreatefromgif($filename);
imagecreatefromjpeg($filename);
绘制各种图形(圆形,矩形,线段,文字)
二,获取图片资源
$width = imagesx($image);
$height = imagesy($image);
$array = getimagesize($filename);
返回一个数组,数组的组成是,width,height,type,
索引 0 包含图像宽度的像素值,索引 1 包含图像高度的像素值。索引 2 是图像类型的标记:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF (intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。这些标记与 PHP 4.3.0 新加的 IMAGETYPE 常量对应。索引 3 是文本字符串,内容为"height="yyy" width="xxx"",可直接用于 IMG 标记。
三,透明处理
phg,jpeg透明色显示正常,gif不正常
imagecolortransparent(); //将某个颜色定义为透明色
imagecolorstotal(); //取得调色板中的颜色数目
imagecolorsforindex();
四,图片的裁剪
imagecopyresized()
imagecopyresampled()
五,加水印
文字水印
imagettftext();
图片水印
bool imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h );
将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。
六,图片的旋转
imagerotate(); //用给定角度旋转
resource imagerotate ( resource $image , float $angle , int $bgd_color [, int $ignore_transparent = 0 ] )
七,图片翻转
沿y轴
沿x轴
思想:依然使用imagecopy()函数,颠倒着复制图片
八,锐化
imagecolorsforindex();
imagecolorst();
输出图片
imagegif(,图像位置)//可以保存文件
imagepng()
imagejpeg()
销毁资源
imagedestroy($image);
三,开发验证码
imagecreatetruecolor($width,$height); //生成图像资源
imagecolorallocate($image,reb); //生成颜色
imagefill($image,$color); //填充背景
imagerectangle($image,$xletftop,$yletftop,$xrightButtom,$yrightButtom,$color);//绘制外围的矩形框
imagesetpixel($image,$x,$y,$color); //绘制干扰像素
imagechar($image,$size,$x,$y,$char,$color); //绘制字符
imagettftext($image,$fontsize,$x,$y,$color,$fontface,$text);//绘制特定字体的text
imageshow(){header("Content-Type:image/gif");imagegif($image)};//输出图像,可以使是gif,jpeg,png等
MD5加密与解密
MD5
md5($string) 简单进行md5加密
Mcrypt
完成了对常用加密算法的封装
需要在php.ini中打开extension=php_mcrypt.dll
crypt 地窖,教堂地下室
数组
PHP数组实际上是一个有序图,图是一种将values映射到keys的类型
三类: 数值数组 关联数组 多维数组
创建
数值数组
1,$name=array("张三","李四","王五");数值数组存储的没有个元素都带有一个数字标识键
2,$name[0]="zhangsan",$name[1]="li",$name[2]="wang"
关联数组
1,$ages=array("zhagn"=>32,"li"=>43,"wang"=>34);
2,$ages["zhang"]="32";$ages["li"]="43";$ages["wang"]="34";
多维数组
$familly=array(
"brother"=>array("daming","xoiao","dsf"),
"sister"=>array("dsfas","sd"),
"uncle"=>array("sad","dss","dsgs","dsfs")
);
读取
打印要用print_r($arrayName)
add
通过赋值就能增加元素
如:$fruit=array("apple","banana");
一种方式,$fruit[]="orange";
另一种方式,$fruit["new"]="orange";
delete
使用unset(),
例,unset($fruit[0]),如此就将apple元素删除
使用array_push()压入数组元素
使用array_pop()弹出数组元素
该函数弹出并返回array数组的最后一个元素,如果array为空或者不是数组,将返回NULL
in_array($str,$array);
遍历数组
print_r();
可以使用<pre></pre>实现原格式输出
print_r将把数组的指针移到最右边,使用reset()可以让指针回到开始处
foreach();
可以使用$key=>输出键,值
执行时,数组内部的指针会自动指向第一个单元,不需要在foreach之前调用reset();
for();
count函数可以计算出数组长度,便于循环遍历
数组排序
sort
就地排序,即不返回任何数组,直接修改原始数组
自动重新设置键
rsort
逆序排序,也是就地排序
重置键
shuffle
随机排序
用于打乱数组
会删除原函数的键名,并自动生成
array_reverse()
将数组反向
只对第一维元素进行反向,如果第一维中还有数组,则将保持不变
键名不变
array_merge()
将一个或多个数组单元合并起来,一个数组中的值附加到前一个数组的后面
如果参加合并的数组有相同的键,则将按出现的先后顺序进行覆盖,后出现的数组覆盖前面的数组
array_slice()
拆分数组
array array_slice(array arrayName,int offset[,int length[,bool preserve_keys]])
文件
FileSystem
basename(); 返回路径中的文件名
chgrp(); 改变文件组
chmod(); 改变文件模式
chown(); 改变文件拥有者
copy(); 复制文件
delete(); 删除文件
dirname(); 返回路径中的目录名称部分
fflush(); 向打开的文件输出缓冲内容
fgetss(); 从打开文件中读取一行并过滤HTML和PHP标记
file(); 把文件读入一个数组
file_exists() 文件是否存在
fileatime() 返回文件的上次访问文件
filectime() 返回文件的上次改变时间
filemtime() 返回文件的上次修改时间
fileowner() 返回文件的所有者
fileperms() 返回文件的权限
filetype() 返回文件类型
is_dir()
is_executable()
is_file()
is_link()
is_readable()
is_uploaded_file()
is_writeable()
realpath() 返回绝对路径
rename()
rmdir 删除空的记录
stat() 返回关于文件的信息
umask() 改变文件的文件权限
文件
函数
fopen();
打开一个文件,
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fread($myfile,filesize("webdictionary.txt"));
fclose($myfile);
?>
fopen() 函数也用于创建文件。也许有点混乱,但是在 PHP 中,创建文件所用的函数与打开文件的相同。
fwrite();
写文件;第一个参数是文件名,第二个是待写的字符串
readfile();
读一个文件,返回字节数;
fread();
fread() 的第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数。
filesize();
返回文件大小
fgers();
读取一行
fgetc();
读取单个字符
feof();
检查是否是文件结尾;
fclose();
关闭文件
目录
遍历目录
mkdir()
opendir()
打开一个目录资源
readdir()
利用opendir打开的资源
closedir()
关闭资源
rewinddir()
返回目录的开始处,即第一个文件
GD Graphics Draw
创建一个图像的4个步骤
·创建一个背景,以后的操作都基于这个背景
·在图像上绘图轮廓或者输入文本
·输出最终图形
·清除内存中所有的资源
浏览器和输入输出
检测来访者的浏览器版本和语言
$_SERVER
特殊的PHP保留变量,它包含了WEB服务器提供的所有信息,被称为自动全局变量(或超全局变量)
数组键:
HTTP_USER_AGENT 浏览器版本信息
HTTP_ACCEPT_LANGUAGE 客户端系统语言
处理表单提交的数组
$_POST
$_GET
$_REQUEST
上传文件
1 单文件上传
2 多文件上传
一,上传表单的注意事项
二,PHP配置文件中和上传文件有关的选项
file_uploads=on
upload_max_filesize = 2M ;最大不超过系统内存
upload_tmp_dir = "" 上传文件的临时路径 upload_max_size = 250M 必须要大于upload_max_filesize = 2M
三,PHP处理上传数据
method="POST";get最大为8192K
表单上传需要使用file的type
建议添加一个隐藏表单 MAX_FILE_SIZE,值的单位是字节
要确保文件上传表单的属性是enctype="multipart/form-data"
$_FILES["userfile"]["name"] 客户端机器文件的原名称
$_FILES["userfile"]["type"] 文件的MIME类型
$_FILES["userfile"]["size"] 文件的大小
$_FILES["userfile"]["tmp_name"] 文件被上传后在服务器端存储的临时文件名
$_FILES["userfile"]["error"] 和该文件上传相关的错误代码。
文件被上传后,默认的会被存储在服务器的默认临时目录中,除非php.ini中的upload_tmp_dir设置为其他的路径。服务器端的默认临时目录可以通过更改PHP运行环境的环境变量TMPDIR来重新设置,但是自PHP脚本内部通过运行putenv函数来设置时不起作用的。
bool move_uploaded_file(string filename,string destination)
检查并确保由filename指定的文件时一个合法的文件(即是由POST机制上传的文件),合法,则移动到destination,若存在了该文件,则覆盖;若不合法。则返回false
//step1
// 使用$_FILES["filename"]["error"] 检查错误
// if($_FILES[‘filename‘][‘error‘] > 0){
// switch($_FILES[‘filename‘][‘error‘]){
// case 1:
// 超过php.ini中规定的最大文件值
// break;
// case 2:
// 超过了HTML隐藏表单规定的文件大小
// case 3:
// 只有部分上传
// case 4:
// 没有文件被上传
// default:
//
// }
//
// }
//step2
// 使用$_FILES[‘filename‘][‘size‘] 限制大小单位字节
//step3
// 使用$_FILES[‘filename‘][‘type‘] 限制类型 MIME类型 ,形如image/jpg
// list($dl,$xl) = explode("/",$_FILES[‘filename‘][‘type‘]);
// 对于图片而言,gd库只能处理一些类型图片,如,png,jpd,gif,故要用到图片过滤
// 也可以使用
//step4
// 将上传后的文件名改名
// is_uploaded_file();判断是否通过HTTP POST上传的
// if(is_uploaded_file($_FILES[‘userfile‘][‘tmp_name‘])){
// if(move_uploaded_file($_FILES[‘userfile‘][‘tmp_name‘],"destination")){
// echo "上传成功";
// }
// }
// rand(start,end);//可以用来随机化文件名
会话处理函数session
Session指的就是用户在浏览某个网站时,从进入网站到关闭这个网站所经过的这段时间,也就是用户浏览这个网站所花费的时间。
一个Session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间。A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session。
session的工作原理
(1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。
(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。
(3)当执行PHP脚本时,通过使用session_register()函数注册session变量。
(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
开始会话
session_start()必须位于<html>标签之前,也就是说该函数必须在任何输出之前调用。常常写程序时不注意会多输入一个空格或回车,这时都会出错。
无论如何,调用session_start()函数都会返回一个TRUE,因此使用任何异常处理都不起作用
存储和读取会话
正确的使用功能方法是使用PHP的$_SESSION变量。$_SESSION是PHP提供的一个全局参数,要你过来存储和读取会话
$_SESSION关联数组中的键名具有和PHP中普通变量名相同的规则,即不能以数字开头,必须以字母或下划线开头。
header("Location:**.php");//跳转到某个页面
销毁会话
unset()
Cookies处理函数
创建cookie
函数setcookie()可以再PHP程序中生成cookie,由于cookie是HTTP投标部分的内容,一次不许再输出任何数据之前调用setcoookie(),这个限制和函数hearder()类似。
bool setcookie(string name,[,.string value[,int expire[,string path[,string domain[,bool secure[,bool htttponly]]]]]])
六个参数:
name:表示cookie的名称。
value: 表示该cookie的值,保存在客户端,因此不要曹村敏感机密的数据。这个参数为空字符串时目标是撤销客户端中该cookie的资料。
expire : 表示该cookie有效的截止时间,及过期时间
path: 表示该cookie的有效的路径
domain:表示该cookie的有效的域名
secure:表示在https 的安全传输时才有效
例<?php setcookie("testcookie","llovephp")?>
获取cookie:
$_COOKIE来获取cookie,不过,只能在其他页面使用这个变量来获取设置过的cookie,因为PHP中,被设置的cookie并不会在本页生效,除非该页面被刷新。
删除cookie:
setcookie("cookiename","");
只要value的值为空,则意味着删除这个cookie
Headers
标头是服务器以HTTP协议传HTML资料到浏览器前所送出的字符串,在标头与HTML文件之间上需要空一行分隔。
在PHP传送回HTML资料前,需要先传完所有的标头
·Content-Type: xxxx/yyyy
·Location:xxxx:yyyy/zzzz
·Status:nnn xxxxx
PHP提供header()函数用来将HTML文档的标头以HTTP协议发送至浏览器,告诉浏览器该如何处理这个页面。
header(string $str_header);
在调用header函数之前不能有任何的输出,否则程序将会出错
用法:
1,重定向
header(‘Location:http://www.example.com/‘);//重定向网站
2,限制某一页不能被访问
header(‘status: 404 Not Found‘);
3,欲让用户得到最新的资料
-->
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。