PHP学习笔记

-----PHP学习笔记-----


1. 只有在 .php 文件中才可以解析<?php?>语句


2. var_dump(); //不仅输出值,还有类型,还有长度(长度与字符编码有关)
   print_r(); //多用于看数组,输出数组的键名和值
   echo(); //输出一个变量值


3. php变量类型:(8)
1)整型 $a=10;
2)浮点型 $a=10.3;
3)字符型 $a="123";  &&  $a='www';
4)布尔型 $a=true;  //用echo输出一个布尔值,=true会变成1,false会变成空,所以查看布尔值应用var_dump($a);
5)数组 $a=array("1","2");
6)对象 class Preson{function say(){}}  new Person();
7)资源 $conn = mysql_connect("localhost","root","q12w34e56");
8)null类型


4. 注意"=="与"==="的区别
后者不仅比较值,还比较类型


5. "字符串"连接符:
   在php中用的是 .
   在js中用的是  +
   <?php
    $a=10;
    echo "hello".$a; //此时有强制类型转换,把整型 10 转换成字符串"10";
   ?>


6. 数组:
$arr=arry("a","b","c"); //索引数组
$arr2=array("name"=>"user","age"=>"30"); //关联数组
echo"<pre>"; //可以竖排看源码
print_r($arr);
echo"</pre>";
echo $arr[1];
$arr[]="d"; //自动追加,相当于$arr[3]="d";


7. 在php中设置字符编码
<?php
header("content-type:text/html;charset=utf-8"); //在session,cookie,heaser头前不能输出任何东西。
?>


8.  资源:(标识符)
//连接数据库资源
//文件打开资源
//目录打开资源


9. isset和empty两个语言结构的区别:
① isset 变量是否被设置,有值即存在 ($a=false; var_dump(isset($a)); //true)
1)没有定义    2)null
② empty 变量是否为空
1)空数组 // array()
2)字符串0 // "0"
3)""
4)false
5)0
6)null
7)没有被定义


10. 变量测试 (返回布尔值)
整型: is_int();
浮点型:is_float();
字符串:is_string();
布尔型:is_bool(); //以上四种为标量类型。测试是否为标量:is_scalar();
数组: is_array();
对象: is_object(); //以上两种为复合类型。
资源: is_resouce();
null型:is_null(); //以上两种为特殊类型。


测试是否为数字:is_numeric();
测试是否为函数:is_callable(); //注意:echo(),print(),list()...不是函数,是语言结构!


11. 类型自动转换--标量
1)整型->字符串 // $a=1; echo($a."abc");
2)整型->布尔型 // $num=1; if($num){}
3)字符串->整型 // $str="123" echo($str+1);
4)字符串->布尔型 // ...
强制类型转换--标量
1) (int)$num
2) (float)$num
3) (string)$num
4) (bool)$num


12. 删除变量:
$str="user";
var_dump(isset($str));
unset($str); //删除变量
var_dump(isset($str));
删除文件:
unlink();


13. 字符串的单双引号:(尽量使用单引号)
1) 单引号比双引号快,因为双引号中的变量(在大括号中的)会被解析。如:$str="小明"; echo "你是{$str}吗"
2) 单引号链接变量用.运算符链接
3) 双引号中用大括号包裹变量
所以,若字符串中没有变量需要解析,就用单引号,否则要么双引号加大括号,要么用单引号加点运算符
$str="小明";
echo "我是{$str}";
echo '我是'.$str;
****************************
发现新大陆:
$str="小明";
echo "我叫$str" //正常解析       -> 我叫小明
echo "我叫$strxxxx" //不能解析且中断 -> 我叫
echo "我叫$str1111" //不能解析且中断 -> 我叫
echo "我叫$str*xxx" //正常解析 -> 我叫小明*xxx
总结:在双引号中不加大括号解析变量的前提是变量名后不能跟字母或数字或中文,可以跟特殊符号。
****************************


14. 常量的定义:(不能被修改,删除)
define("HOST","localhost");
define("USER","root");
define("PASS","q12w34e56");
(常用在数据库配置文件等。其他页面需要用时用 include("xxx.php"); 来包含)


常量的输出:用.运算符链接
注意:常量不能放到双引号中!
(F) echo "my host is HOST";
(F) echo "my host is {HOST}"; 双引号中能被解析的只有大括号中加$附的变量
(T) echo "my host is ".HOST ;


15. 预定义常量:
PHP_OS //当前系统名称
PHP_VERSION //当前php版本
__FILE__ //系统绝对路径 *
__LINK__ //当前代码在第几行
__FUNCTION__ //函数名


16. 运算符:
数组运算符:=>
对象运算符:->
注意:&& || 运算符优先级高于 =


17. break 与 continue 的区别
break:    结束全部循环
continue:结束本次循环


18. 终止脚本:
exit;
die;
die("脚本终止"); //可以输出信息


19. function_exists("tab"); //查看一个函数是否存在


20. 语言结构:
if() for() while()     switch()
array() echo() print() list()
isset() unset() foreach() exit()
die() include() require() empty()


21. 可变参数函数:
重要函数——1) func_num_args() //传了几个参数
 2) func_get_args() //以数组形式返回参数


function func(){
echo func_num_args();
array_sum(func_get_args()); //把获取到的参数数组元素相加
}
func(1,2,3,4); //调用func函数,传递四个参数,得到结果4


22. 用global关键字修饰后变成全局变量
$num=10;
function func($num){
global $num=20;
}


引用参数:
$num=10;
function fun(&$i){
$i++;
}
fun($num);
echo $num; //按址传递,改变变量


23. 回调函数:一个函数的参数是另一个函数的名字


24. 静态变量: static (一直跟踪同一个函数,被后面的函数多次使用)
function show(){
static $num;
$num++
echo $num;
}
show(); //0
show(); //1
...


25. 文件包含:
1) include(); //把文件拷贝一份放到文件相应位置,若包含未找到文件,报错,但依然执行下文代码
2) require(); //拷贝,但若包含了一个未找到文件,报错,立刻终止程序,不执行下文
3) require_once(); //同require(),唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。 


26. 数组:
1)数组定义: //索引数组 $arr=array(1,2,3);
//关联数组 $arr=array(""=>"",""=>"");
2)数组取值时一定要加下标


3) foreach($arr as $key=>$val){
echo "{$key}=>{$val}";
}
4) list($key,$val)=$arr; //把数组中的元素一一对应成list参数。不能识别关联数组,所以配合用each()
  echo $key;
  echo $val;
5) each($arr); //返回一条数据,带有四个值,索引加关联数组混搭
6) while(list($key,$val)=each($arr)){
echo "{$key}.{$val}"
}


//推荐使用foreach(){}


27. 多维数组的遍历:
$arr=array("a","b",array(1,2,3),"c",array("balabala"));
foreach($arr as $key => $val){
if(is_array($val)){
foreach($val as $key => $val){
...
}
}else{
...
}
}


28. 超全局数组:(无论函数内外都可以使用)
1) $_SERVER //查看服务器信息
2) $_GET //获取get过来的数据
3) $_POST //获取post过来的数据
4) $_REQUEST //获取get或者post过来的数据 
5) $_FILES //注意:<form> 中必须为 post提交方式,且设置 enctype="multipart/form-data"
6) $_COOKIE
7) $_SESSION
8) $GLOBALS //函数以外的变量都是全局变量,都可以用$GLOBALS来访问到。例如: $str="111";  $GLOBALS["str"]


29. 数组函数:
//键值操作函数:
1) array_values();
2) array_keys();
3) in_array($val,$arr); //某个值是否在数组中
4) array_key_exists($key,$arr); //某个键是否存在
5) array_flip($arr); //把键和值颠倒
6) array_reverse($arr); //把数组顺序倒序


//统计唯一性
1) count($arr); //统计数组元素个数
2) array_count_values($arr); //统计各数组元素出现次数,不支持关联数组,只对索引数组有效
3) array_unique($arr); //删除重复值,返回新数组


//使用回调函数处理数组
1) array_filter($arr,"callback"); //筛选部分值,需要传回调函数。若没有回调函数,就把数组中所有值转成bool值,留下true
2) array_map("callback",$arr ); //加工数组元素


//数组排序函数
1) sort(); //升序排列数组元素,但舍弃键名
2) rsort(); //降序排列数组元素,舍弃键名
3) asort(); //升序排列数组元素,保留$key
4) arsort(); //降序排序数组元素,保留$key
5) natsort(); //升序排序(多用于字符串)
6) natcasesort(); //升序忽略大小写排序
7) array_multisort(); //按照一个数组排序另一个数组


例:要求1.按照标题长度排序
要求2.标题长度变成key


$arr=array("aaa","bbbbb","c","dddd");
foreach($arr as $val){
$lens[]=strlen($val);
}
array_multisort($lens,SORT_ASC,$arr); //按照$lens数组升序排列$arr
sort($lens);
$arr2=array_combine($lens,$arr); //按照键为$lens,值为$arr来合并为新数组
print_r($arr2); //输出:[1]=>"c",[3]=>"aaa",


//拆分,合并,分解与结合函数
1) explode("-",$str); //按指定符拆分字符串为数组
2) implode("-",$arr) / join("-",$arr) //按指定符链接数组元素为字符串
* 3) array_slice($arr,start,offset); //从strat偏移offset截取数组,开始位置可以为负数,表示从后数,向后截取offset个元素
* 4) array_splice(); //从strat偏移offset裁剪数组,返回裁剪的元素,原数组被裁剪,且可以用参数填充裁剪走的元素
5) array_combin($arr1,$arr2); //一个数组作为键,一个数组作为值合并
6) array_merge($a,$b); //合并两数组,若关联数组下标相同则后者覆盖前者
7) array_diff($a,$b); //以$a为参照物,把与$b不同的值返回新数组中
8) array_intersect($a,$b); //$a与$b的交集


//数组与数据结构
1) array_pop($arr); //从最后弹出一个值,并返回
2) array_push($arr,"xxx"); //从最后压入一个值,返回数组总个数
3) array_shift($arr); //从前面删掉一个值,并返回
4) array_unshift($arr,"xx"); //从前面压入一个值


//其他有用的数组函数
5) array_rand($arr); //从数组中随机抽取一个键
6) shuffle($arr); //伪随机打乱数组元素(返回原数组)
7) range(0,9); ... //生成一个指定范围的数组
8) array_sum();     //把值合计


例如:验证码的生成
$a=array_merge(range(0,9),range(a,z),range(A,Z));
shuffle($a);
$arr=arrray_slice($a,0,4);
$arr1=implode("",$arr);
echo $arr1;


30. 字符串相关函数:
//空格处理与填充
1) trim(); //去除字符串前后空格
2) ltrim()与rtrim() //去除左边/右边空格
4) str_pad(); //使用另一个字符串填充字符串为指定长度
5) str_repeat(); //重复一个字符串 str_repeat("-",5); 重复输出5个-


//字符串大小写转换
1) strtoupper(); //所有字母转成大写
2) strtolower(); //所有字母转成小写
3) ucfirst(); //第一个单词首字母大写
4) ucwords(); //所有单词首字母大写


//其他字符串格式化函数
1) strlen(); //字符串长度
2) strrev(); //字符串所有字母翻转
3) md5(); //加密
4) number_format //货币数字化  1,234,5678
5) str_shuffle(); //随机打乱字符串


//与html相关连的字符串函数
1) nl2br //将字符串中的 /n 转换成 <br /> 实现换行
2) htmlspecialchars(); //把html特殊字符(",&,<,>)转成实体
3) addslashes(); //加反斜线
4) stripslashes(); //去掉加上的反斜线
5) strip_tags($str,'<span><a>'); //去掉html标签,也可以保留一部分(本例保留span和a标签)
注意:进入数据库前必须转实体,再加反斜线转义。php默认开启加反斜线转义,所以只需转实体。(但是我的php开启了转义怎么还是不转==)


//字符串比较函数
1) strcmp($str1,$str2); //字符串比较,相等返回0,第一个大返回1,第二个大返回-1
2) strcasecmp($str1,$str2); //字符串忽略大小写比较
3) strnatcmp($str1,$str2); //按自然排序法(按位)比较
-- ord($str); -- //返回一个字符的ASCLL码


//字符串的截取:
1) substr($str,start,offset); //把$str从strat开始截取offset个字符,若没有offset参数,默认截取到末尾。
注意:utf-8中,一个中文字相当于三个字符
2) mb_substr($str,start,offset,"utf-8"); * //根据字符数执行一个多字节安全的 substr() 操作,最后参数设定shift什么编码方式


//字符串查找
1) strpos($str,'xx'); //获取'xx'第一次出现的位置
2) strrpos($str,'xx'); //获取'xx'最后一次出现的位置
3) strstr(); //返回从第一次匹配字符串(包括该字符串)之后的所有字符
4) strrchr(); //返回最后一次匹配字符串...(同上)
5) str_replace("xx1","xx2",$str,[$cont]); //把$str中的 xx1(也可以为数组,里面包含多个需要被替换的值) 替换成 xx2(亦可以为数组,对应上数组替换) ,$cont是替换的次数,用于后期输出;
6) str_ireplace(参数同上); //同上,忽略大小写


例如:
$str="http://localhost/www/abc.com";
$src=array("http","localhost");
$rep=array("ftp","baidu");
echo str_replace($src,$rep,$str); //一一对应的替换


//字符串拆分常用函数
1) pathinfo(); //返回一个包含文件名,文件后缀名,文件全名,目录名的数组
2) parse_url(); //专门针对url地址的拆分,返回包含主机名,目录名,参数...等信息的数组
3) parse_str($str[,&$arr2]); //将字符串解析成多个变量,返回的数组存在第二个参数中,返回voild
4) preg_split('/xxx/',$str); //用正则拆分


31. 正则表达式 —— 组成元素:原子,元字符,模式修正符


原子:
1) .  匹配任意字符
2) \w 任意 1 个字母,数字,下划线
3) \W 除了字母数字下划线以外的字符
4) a-z,A-Z,0-9 表示任意 1 个字母,数字 ,必须配合单元或者原子表使用
5) \d 匹配 1 个数字
6) \D 匹配 1 个非数字
7) \s 匹配 1 个空白字符(空格,tab)
8) \S 匹配一个非空白字符
9)转义字符: \*   \.   \[\] 即匹配与以上特殊字符同名的普通字符需要加"\"来转义


() 大括号表示一个单元,会在数组中作为一个元素显示
[] 表示原子表,写在其中表示"或",及任意一个字符
[^ab] 除了ab的任意一个字符
{2} 2个原子
{2,} 2个及其以上原子
{2,5} 2-5个原子

元字符:(起到修饰作用,修饰原子)
1) * 0个,1个,或多个(任意多)(原子)
2) + 1个,多个
3) ? 0个,一个
4) ^ 以什么开头
5) $ y以什么结尾
6) | 或
7) \b 词边缘(要么没东西,要么是空格)
8) \B 非词边缘


模式修正符:(写在整个表达式最后)
1) i //忽略大小写
2) m //视为多行 (/^linux/m)
3) s //视为一行 ( .不能匹配换行符 \n)
4) U //贪婪模式,细化匹配 <b>xxx</b>aaaaa<b>xxx</b> /<b>.*<\/b>/此时匹配的是全部,加上U: /<b>.*<\/b>/U 匹配的是<b>xxx</b> <b>xxx</b>
5) e //可以对匹配到的结果进行函数再加工,再使用向后引用得满足eval()函数要求


向后引用: $1 或者 //1  来表示第一个单元匹配值


正则表达式函数:
1) preg_match($pre,$str,$arr); //用正则表达式匹配第一个满足条件,返回匹配的字符串存在第三个参数$arr中
2) preg_match_all(); //同上,但匹配全部满足条件的字符串
3) preg_grep(); //在数组中搜索匹配值
4) preg_replace($pre,$rep,$str); //返回替换后的全部字符串,参数可以用数组,对应替换每个元素
5) preg_split($pre,$str); //用正则表达式匹配来切割字符串


32. eval()函数:
把一串字符串作为php代码执行,相关字符需要转义。如:
eval("$str=\"123\";");


33. 数学函数
1) max(); //返回最大值,参数可以为两种,数字或数组
2) min(); //返回最小值,参数同上
3) ceil(); //向上取整
4) floor(); //向下取整
5) round(); //四舍五入
6) pi(); // π
7) mt_rand(min,max); //更好更快的取随机数


34. 日期函数:
1) time(); //返回1970年到现在unix时间戳
2) date(); //把时间戳转成日期
· date_default_timezone_set(); //设置默认时区 "PRC" 为中华人民共和国时区  (若想永远修改php时区,修改php.ini配置文件,在[date]中设置  )
· data_default_timezone_get(); //获得默认时区
    3) date参数:以 2014-03-02 为例
·Y 2014
·y 简写年 14
·m 带前导0的月 04
·n 不带前导0的月 4
·d 带前导0的天 02
·j  不带前导0的天 2
·w 周几 0-6 0
·t 一个月多少天 31
·L 是否为闰年
·H 24小时制
·h 12小时制
·i 分钟
·s
4) strtotime(); //把某一个字符串日期(格式:xx/xx/xx,或者"next Monday"等英文字符串)转换成unix时间戳
5) microtime(); //微秒函数 1s=10^3毫秒=10^6微妙
6) sleep(1); //睡眠一秒


35. 错误处理
1) 关闭和开启报错
display_errors=On // php.ini
error_reporting= 错误级别 (E_ALL表示所有   ~xx 表示xx级别的不报错) //表示什么错误级别的报错
2) 报错级别
E_ALL
E_ERROR
E_WARNING
E_PARSE
E_NOTICE


//提示错误 E_NOTICE
echo $str; (未定义)
//警告错误 E_WARNING
echo strlen(); (未传参数)
//严重错误 E_ERROR
echo str_len(); (函数写错)
//语法错误 E_PARSE
echo strlen (忘写分号)


3) 报错地方:
display_errors = off //首先关闭错误输出
log_errors = On //开启错误日志输出
error_log= php.log //php错误日志文件




注意:修改完配置文件后重启apache


36. 图片处理函数
1) 准备画布资源 // imagecreatetruecolor(500,300);
2) 准备涂料 // imagecolorallocate($im,0,0,0);
3) 在画布上画图像和文字 // imageellipse($im,x,y,wid,hei,color); 画一个椭圆
4) 设置head头,表示为图像类型 // header("content-type:image/png");
5) 输出最终图像或保存最终图像 // imagepng($im);
6) 释放画布资源 // imagedestroy($im);


· imagefill($im,x,y,$color); //把画布用xx颜色填充,如果不写会默认被填充为黑色
· imagefilledellipse($im,x,y,w,h,$color); //画一个用xx颜色填充的椭圆
· imageellipse($im,x,y,w,h,$color); //画一个椭圆,仅有边线
· imagesetpixel($im,x,y,$color); //画一个像素点
· imageline($im,x1,y1,x2,y2,$color); //画线
· imagerectangle($im,x1,y1,x2,y2,$color); //画矩形
· imagefillderectangle(); //被填充的矩形
· imagepolygon($im,array,$color); //画多边形,有几个边数组就有多少对x,y
· imagearc(); //扇形圆弧
· imagestring($im,$font,x,y,$str,$color); //水平画一条字符串
· imagettftext($im,size,角度,x,y,$color,font-family,$str); //角度是逆时针,x,y坐标是相对字符串的左下角,输出字符串更实用!


******************************************************************************
******************************************************************************
验证码函数,以后备用。
function yanzhengma($width=100,$height=50){
$im=imagecreatetruecolor($width,$height);
$danfen=imagecolorallocate($im,250,230,251);
$green=imagecolorallocate($im,45,167,10);
$huise=imagecolorallocate($im,147,147,147);
imagefill($im,0,0,$danfen);
for($i=0;$i<500;$i++){
imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$green);
}
for($i=0;$i<6;$i++){
imageline($im,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$huise);
}
for($i=0;$i<4;$i++){
$arr=array_merge(range(1,9),range(a,z),range(A,Z));
shuffle($arr);
$arr1=array_slice($arr,0,1);
$str=implode("",$arr1);
$fontsize=$width/4;
$ttfcolor=imagecolorallocate($im,mt_rand(0,200),mt_rand(0,200),mt_rand(0,200));
$fontfile="font/STXINWEI.TTF";
imagettftext($im,20,mt_rand(-40,40),($i*$fontsize)+5,40,$ttfcolor,$fontfile,$str);
}
header("content-type:image/png");
imagepng($im);
imagedestroy($im);
}


******************************************************************************


37. 把已经存在的图片形成画布资源
$im=imagecreatefromjpeg("xx.jpeg");
header("content-type:image/jpej");
imagejpeg($im);


38. 获取图片宽高
1) getimagesize($filename); //传递文件名参数,返回一个数组
2) imagesx($im);
3) imagesy($im);


39. 图片缩放函数:imagecopyresampled($small_img,$big_img,0,0,0,0,$smallimg_w,$smallimg_h,$bigimg_w,$bigimg_h);
图片裁剪函数:imagecopyresampled();
图片水印函数:imagecopy();


*********************************************************************************
*********************************************************************************
图片缩放函数: 参数说明:5个参数—— ①大图图片路径名;②缩略图宽;③缩略图高;④是否等比例缩放(默认等比例);⑤保存到的文件夹的路径名


function thumb($file,$sw,$sh,$bool_bili=1,$url="suoluetu"){
//大图信息
$img_file=$file;
$big_img=imagecreatefromjpeg($img_file);
$img_arr=getimagesize($img_file);
$bigimg_w=$img_arr[0];
$bigimg_h=$img_arr[1];
$bigimg_mime=$img_arr['mime'];
$bigimg_type=$img_arr[2];


//生成小图
$smallimg_w=$sw;
$smallimg_h=$sh;


//是否等比例缩放
if($bool_bili){
if($smallimg_h/$bigimg_h>$smallimg_w/$bigimg_w){
$bili=$smallimg_w/$bigimg_w;
}else {
$bili=$smallimg_h/$bigimg_h;
}
$smallimg_w=floor($bigimg_w*$bili);
$smallimg_h=floor($bigimg_h*$bili);
}

$small_img=imagecreatetruecolor($smallimg_w,$smallimg_h);
imagecopyresampled($small_img,$big_img,0,0,0,0,$smallimg_w,$smallimg_h,$bigimg_w,$bigimg_h);


//输出
header("content-type:{$bigimg_mime}");
switch ($bigimg_type) {
case 1:
$smallimg_type="imagegif";
break;
case 2:
$smallimg_type="imagejpeg";
break;
case 3:
$smallimg_type="imagepng";
break;
}
/*$smallimg_type($small_img);*/
$small_name="s_".$file;
$smallimg_type($small_img,$url."/".$small_name);
imagedestroy($small_img);
imagedestroy($big_img);
}
*********************************************************************************
*********************************************************************************


40. 文件基础
1) filetype(); //文件类型
·文件 dir
·目录 file
2) is_dir(); //是否是目录
3) is_file(); //是否是文件
4) file_exists(); //文件或目录是否存在
5) filesize(); //文件或目录大小(4K)


41. 文件操作:
1) fopen($filename,"w");
打开模式:
· w //写模式新建文件,返回的是一个文件资源。
· r //以只读方式打开,将文件指针指向开头
· a //以只写方式打开
· w+ //可读也可写。清空,再写
· r+ //可读可写,从头抹掉/替换
· a+ //追加模式


2) fclose($fs); //关闭文件资源
3) rename($filename,"xxx"); //重命名
4) copy($filename,$url); //复制文件
5) unlink($filename); //删除文件
6) fwrite($fs,$str); //写入
7) fread($fs,len); //读文件


42. 文件指针
1) rewind(); //将文件指针直到最开头
2) ftell(); //返回指针的位置
3) feof($fs); //判断是否到文件结尾


43. fread();
file($filename); // (以下三种不需要资源。) 返回一个数组,包含每一行的值
readfile($filename); // 不用echo,直接返回内容 
file_get_contents($filename); // 返回的内容可以用函数加工
file_put_contebt($filename,$str,FILE_APPEND); //可以追加式的写


44. 目录有关操作
1) mkdir() //创建文件夹
2) rmdir() //删除文件夹,删除时必须是空目录
3) opendir($dirname); //返回目录资源
4) readdir($ds); //返回文件名(一次返回一个,指针指向下一个)
5)


45. 与路径有关函数:
basename($str); //文件名
dirname($str); //目录全名
realpath("./"); //相对地址转绝对地址
DIRECTORY_SEPARATOR //目录分隔符
pathinfo();
parse_url();


46. 文件上传:
1) 首先需要在<form>中设置 enctype="multipart/form-data"
2) 用 $_FILES 收提交的数据
3) move_uploaded_file($tmp_die,$real_dir);
4) 在php.ini配置文件中设置:
· upload_max_filesize = 200M //最大上传文件限制
· post_max_size = 80M //form中总提交的数据的限制大小,必定比 upload_max_size 大

/*错误编码:
0 上传成功
1 大小超过upload_max_filesize限制
2 大小超过MAX_FILE_SIZE隐藏限制域 (<form enctype="multipart/form-data" action="_URL_" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">)
3 只有部分被上传
4 没有文件上传
*/
*****************************************************************************************
*****************************************************************************************
文件上传实例代码:
<?php 
header("content-type:text/html;charset=utf-8");
echo "<pre>";
print_r($_FILES);
echo "</pre>";
$pos=strrpos($_FILES['file']['name'],'.');
$ext=substr($_FILES['file']['name'],$pos+1); //获得后缀名
// 方法二:按'.'拆分,再弹出最后一个数组元素
// $ext = array_pop(explode('.',$_FILES['file']['name']));
date_default_timezone_set("PRC");
$filename=date("YmdHis",time()).mt_rand(0,10000);
//过滤文件类型
$arr=explode('/',$_FILES['file']['type']);
$filetype=$arr[0];
if($filetype=="image"){
$dir="images";
}else{
// die("文件类型不对,要求图片类型!");
$dir="text";
}
//限制文件大小
$size=$_FILES['file']['size'];
if($size<8000){
//过滤后缀名
$houzhui=array('png','jpg','jpeg');
if(in_array($ext,$houzhui)){
//从临时文件转移到目标文件
$tmpfile=$_FILES['file']['tmp_name']; //临时文件
$dirfile="upload/{$dir}/{$filename}.{$ext}"; //目标文件名
if(move_uploaded_file($tmpfile,$dirfile)){
echo "上传成功";
}else{
echo "上传失败";
}
}else{
echo "文件后缀不允许!";
}
}else{
echo "文件过大!";
}
 ?>
*****************************************************************************************


47. 文件下载
//必须知道文件的mime类型,所以一个偏门方法是写: application/octet-stream  表示以二进制文件形式输出
1) header("content-type:application/octet-stream");
2) header("content-disposition:attachment;filename={$filename}");
3) header("content-length:{$size}"); // filesize($path); 获取文件大小
4) readfile($path);


48. mysql 基本命令:
1) net start mysql //开启mysql服务
2) net stop mysql //关闭mysql服务
3) show databases; //察看数据库
4) use data_name; //切换到xx数据库
5) show tables; //查看数据库中的表
6) desc table_name; //查看表结构
6) select * from table_name; //查看表中所有字段
8) exit; //退出所有终端


49. mysql 数据库操作:
1) create database db_name //创建一个数据库
2) drop database db_name //删除一个数据库


50. mysql 表操作:
1) show tables; //查看表
2) create table table_name( //创建一个表
id   int(3),
name varchar(30),
pass varchar(30)
);
3) desc tb_name; //查看表结构(表字段)
4) select id from tb_name; //查看固定记录
5) rename table tb_name to tb_name2; //修改表名
6) drop table tb_name; //删除表


51. 表结构:
1) char(255) //最多255. 快,但浪费空间,写多少字节长度就浪费多少字节,哪怕仅仅一个a
2) varchar() //最多65535,比char()慢但节约空间,可变字长,存储L+1
3) int(10) //最多10位
4) text //最多存65535个字节,存储L+2
5) longtext //最多存42亿字节,存储L+4


52. id int unsigned auto_increment primary kry 设置为自增必须要设置为索引(索引速度快)
desc select * from tb_name where id=1 /G //加一个/G详情看起来好看,但不要加 ';' (可以查看检索速度)


53. \s 查看服务器详细信息(多查看四种字符集)


Server characterset //服务器字符集
Db characterset //数据库字符集
Client characterset //客户端字符集
Conn characterset //客户端连接字符集


show create database db_name //查看数据库字符集
show create table tb_name //查看表字符集


mysql_query("set names utf8"); //修改mysql客户端和连接字符集


54. 索引:可以让查询变得更快
1) 主键索引 primary key(id),
2) 普通索引 index index_name(name), //普通索引的标识符是 index 并需要给普通索引取个名字 index_name
3) 唯一索引
4)删除索引 alter table tb_name drop index index_name
5) 添加索引 alter table tb_name add index index_name(xxx); //给xx表的xxx列加索引


查看索引:show index from tb_name; //有几行就有几个索引


55. 字段操作:
1) 添加字段: alter table tb_name add age smallint after id; //在id字段后插入新字段
2) 修改字段: alter table tb_name modify age int null default 20;
3) 删除字段: alter table tb_name drop username
4) 更改列名: alter table tb_name1 change name tb_name2 varchar(); //更改列名时必须追上类型


56. SQL数据结构化语言:
1) 数据定义:
·cteate
·drop
·alter
2) 数据操作:
·insert insert into user(username,password) values('zhang','123');
·update update tb_name set id=6 where id=10; //修改多个字段用","隔开 update tb_name set id=10,name="zhang" where id=1;
·delete delete from tb_name where id=1; //删除多个值: delete from tb_name where id between 3 and 5; 或者  ... where id in(1,3,5); 或者 id>=3 and id<=5
3) 数据查询:
① 选择特定列: select from tb_name where ...;
② 给字段起别名: select id,name n,password p from tb_name; //给name起了个别名 n 给password 起了个别名叫 p
③ 查不重复字段: select distinct username form user; //distinct 唯一值
④ 对付 NULL 字段: select * from tb_name where name is null; //不能用 where name=null; 在sql中,用 is 来判断null,若判断不是null的,就是 is not null
⑤ like的模糊查询: select * from tb_name where name like '%php%'; //搜索name中包含"php"的记录。% 相当于正则中的 ".*" 表示任意多字符
select * from tb_name where name like '%php%' or name like '%linux%'; //多条件查询
⑥ 正则查询(速度慢,不建议用):select * from tb_name where name regexp 'php';
⑦ 对查询结果进行排序: select * from tb_name order by time desc; // desc->降序  asc->升序 默认是升序
⑧ 限制查询个数:    select * from tb_name limit 3; // limit 0,3  如果只写一个数字,则默认 0,x
⑨ limit 的offset 参数 select * from tb_name limit 3 offset 2;
//以下为查询函数
① concat()字符串连接符:select concat("id","-","name"); //字符串连接符
② rand()随机打乱: select * from tb_name order by rand() limit 1;
③ count()统计个数: select count(*) from tb_name; //快速得到表的总行数,用count(*),官方优化,及其快!
④ sum()总和: select sum(price) from tb_name
⑤ avg()平均数 select avg(price) ...
⑥ max()最大值 select max(price) ...
⑦ min()最小值 select min(price) ...


注意:尽量不要用mysql的函数


·分组聚合
查询每个用户发了多少帖子:
select username,count(id) from tb_name group by username order by count(id) desc; //注意,排序要在分组之后
·分组后加条件用having
select username,count(id) from tb_name group by username order by count(id) having count(id)>=10;
·多表查询
① 普通多表查询:select * from tb1,tb2 where tb1.id=tb2.uid;
② 左链接查询: select td1.name,td2.title from tb1 left join td2 on td1.id=td2.uid;
③ 嵌套查询: select name from td1 where id in(select uid from td2);
4) 数据控制:
·grant
·commit
·rollback


57. php进行数据库操作:
1) 通过php连接mysql数据库
· mysql_connect("localhost","root","q12w34e56");
2) 选择数据库
· mysql_select_db("test");
3) 设置客户端连接字符集:
· mysql_query("set names utf8");
4) 通过php进行增删改查
·插入一条数据:
$sql="insert into tb1 values('{$name}','{$pass}')"; //注意!!values()中的字符串加引号!哪怕是变量!!很容易犯错!
mysql_query($sql);
·修改操作:
$sql="update tb1 set name='zhang' where id=1";
mysql_query($sql);
·从结果集中取数据:
mysql_fetch_array //混合数组
mysql_fetch_row //索引数组
mysql_fetch_assoc //关联数组
mysql_fetch_object //对象
mysql_fetch_field //返回列对象 可以用 $sql="desc tb1"; 来代替
·查询操作:
$sql="select * from tb1";
$result=mysql_query($sql); //返回的是一个资源类型,即句柄,也就是相关的标识符
while($row[]=mysql_fetch_assoc($result)){
print_r($row);
}
5) 释放结果集资源
· mysql_free_result($result); //不释放也没关系
6) 关闭资源
· mysql_close($con);


58. 一些有用的数据库操作函数
1) mysql_insert_id() //返回刚刚插入数据的id
2) mysql_affected_rows(); //返回上一步insert,delete,update操作的影响行数
3) mysql_num_rows($result) //返回select操作的影响行数


59. php中mysql报错相关函数:
· mysql_errno(); //错误编码
· mysql_error(); //错误信息


60. cookie技术
//cookie是客户端带过来的!
1)设置cookie:
·setcookie("username","user1",time()+7*60*60*24); //保留七天
·setcookie("username","user1",0); //若时间设置为0,则表示浏览器关闭时失效
·setcookie("username","user1",0 ,"/"); //第四个参数表示可以往哪些地方带cookie,'/'表示根目录下所有目录。默认是只能让当前目录访问,所以应该加上'/'
2)查看cookie:
·$_COOKIE['username'];
3)删除cookie:
·setcookie("username","",time()-3600);


61. session技术
1)设置session:
·session_start(); //此前不能有输出
·$_SESSION['username']="user1";
2)查看session:
·print_r($_SESSION);
3)删除session:
·session_start();
·session_unset();     //把数据删了
·session_destroy();  //把'卡'销毁
·setcookie(session_name(),"",time()-3600,"/"); //把客户'家里的'卡号销毁
4)查看session名:
·session_name();
5)查看session值:
·session_id();


-------------------------------------------------------------


62. ·set_include_path() 设置系统路径
   ·get_include_path() 获取系统路径
   ·PATH_SEPARATOR   系统路径分隔符,经过测试,本机分隔符为 ";"
   
define("ROOT",dirname(_FILE_));
set_include_path(".".PATH_SEPARATOR.ROOT."./lib".PATH_SEPARATOR.ROOT.get_include_path());


63. extract() 函数从数组中把变量导入到当前的符号表中。
对于数组中的每个元素,键名用于变量名,键值用于变量值。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值