php笔记

本文详细介绍了PHP的基本语法,包括变量、数据类型、运算符、控制结构、字符串处理、数组操作、函数定义与调用、文件系统操作等内容,适合初学者快速入门。

=========================================================
http://e-learning.51cto.com/video/14500
=========================================================
访问表单变量
<metahttp-equiv="Content-Type" content="text/html;charset=gbk">
<form method="post" action="Demo11.php">
    姓名:<input type="text" name="username" value="song"/>
          <input type="submit" value="提交"/>
</form>
=======================================================================
Demo11.php
<?php
    $username=$_post['username']
    echo "这个学生是:".$username
    
?>
===========字符串的插入======================================
双引号提供了最大的灵活性,原因是变量和转移序列都会得到相应的解析
<?php
$userName="SONG";
echo "his name is $uerName"
echo"<br/>"
echo "他的名字叫$userName,他19岁了,已经长大成人了!";
echo "他的名字叫$userName"."他19岁了,已经长大成人了!";
echo "<br/>"
echo "虽然他的QQ号有 很多女生,\n但一个都不属于他";   // \n换行符(编辑器)

?>
单引号会按照声明的原样解释,解析字符串时,变量和转义序列都不会进行解析。
\t   制表符
\n    换行符
\r    回车
=====================操作符===============
<?php
$a=5;
$b=6;

#$c=$a+$b;
#echo $c;

$a+=$b; //a=a+b;
echo $a;
?>
===   恒等  数值与类型相等
&& 与同时满足时为真
||  满足一个为真
//开发中最好将错误暴露出来
$a=@(100/0);    //错误一致操作符
为了避免优先级混乱 可以加括号
================================操作符和控制结构=========================================
<?php
$userAge = 19;
if($userAge>14){
echo "成年了";
}elseif($userAge>25){
echo '可以了!'
}elseif($userAge>30){
echo '可以回家了'
}
==================================switch语句==============================
<?php
$weekday=1;
switch ($weekday){
case 1:
    echo '今天星期一';
case 2:
    echo '今天星期二';
    }
    break;
    default: 
    echo '无聊在家';
?>              //块语句
==============================while======================
<?php

$a=10;
while($>0){
echo $a;
    $--;
    echo'<br/>';
    }
?>
========================for=================================
<?php\
for($a=10;a>0;$a--){
echo $a;
echo '<br/>';
}
echo "结束了"
?>
====================do while===============================
<?php
$a=10;
do{
echo $a;
$a--;
echo '<br/>';
}while($a>0)
?>
=====================================break======================
<?php
for ($i = i;$i<=10;$i++){
if($i==5){
break;     //中途退出当前循环,后面会执行       
}            continue //退出当前本次的循环 继续循环
echo $i.'<br/>';
}
?>
=======================数学运算===================================
<?php
$a='5';
$b=7+$a;
echo $b;                //a无法转换为数字
?>
--------------------------
$a='abc';
echo is_numeric($a);                   //检测是否为数字或数字字符串
-------------------------
<php?
if(is_int(5){
echo 'a是一个整数';
}else{
echo 'a不是一个整数';
}
?>
=============================随机数======mt_rand----(speed)=================================
rand   产生随机整数 
<?php
//echo  rand(0,10);
//echo mt_rand(0,100)
echo   getrandmax();   //最大随机值
?>
----------------------------format--------------------------------------

<?php
$i=1234;
$b = number_format($i,2,".",",");          //小数位保留两位      .小数分割
echo $b;
>
abs()   绝对值
floor ()舍去法取整
ceil()进一法取整
round()四舍五入
pow(2,2)   2的2次方
bcadd()  高精度

---------------------10-----数组----------------------------------
一组有某种共同特性的元素
<?php
$usernaema=array('李彦宏','周宏伟','马云','俞敏洪','李开复');
echo $userName[2];
?>
-------------------------------------------------------------------
print_r($userName)    //变量数值
<?php
$uerName=range(1,10)
print_r($uerName);
?>
----------------------------
$letters = range('a,z');
print_r($letters);
---------------------
$username[5]='李艳辉'      //改变数组的值
echo $username
============================
<?php
$username= array('李彦宏','周宏伟','马云','俞敏洪','李开复');
for($i=0;$i<count($usernaem);$i++){
echo $i.---.$username[$i];
echo'<br/>';
}

?>
===============================================
foreach  //不需要考虑key   只能用于数组遍历
foreach($username as $key=>$value){
echo  $value.''<br/>
}
---------------------
if(is_array($username)){
foreach($username as $key=> $value){
echo $key.'---'.$value'<br/>';
    } 
}else{

echo $username;
}
?>
==============================数组==============================================================
<?php
//如果不去声明key
$username= array(''baiud'=>'李彦宏','taobao'=>'马云','xindongfang'=>'俞敏洪');
//自定义键数组
print_r($username)
echo $username['baidu'];   //通过键去打印

?>
----------------------add-----------
<?php
$userage=array('吴起'=>19);
echo $userage['吴起'];
//追加数组
$userage['李艳辉']=23;
$userage['马化腾']=27;
//echo $userage['李艳辉'];
print_r($userage)
?>
-------------------add-----------------
<?php
$userage['吴起']=19;
echo $userage['吴起'];
//追加数组
$userage['李艳辉']=23;
$userage['马化腾']=27;
//echo $userage['李艳辉'];
print_r($userage);

//这里无法使用for循环 只能用foreach遍历
foreach($username as $key=>$value){  //一般要打印下标

echo 【$key.'-----'】.$value.'<br/>'
}
?>
------------------each  //返回数组中当前的键----------------------
<?php
//$userage['李艳辉']=23;
//$userage['马化腾']=27;
//$userage['吴起']=19;
$userage=array('吴起'=>12,'李艳辉'=>34,'胡新鹏=>56');
print_r($userage);
//each  ---返回数组中当前的键/值并将数组的指针向前移动一步
//默认情况下,指针是指向第一个
//如果each($userage),那么获取的就是第一个键值对'吴起=>'
//each这个函数返回的是一个数组,
//将第一个键值对获取到,然后包装成一个新数组


echo each($userage);
print_r(each($userage));
//相当于$a=array([0]=>吴起,[1]=>19,[value]=>19,[key]=>吴起)
each($userage);这是第一步,将19,吴起取出,包装成新数组
$a=each($userage);  //这个是第二步了,指针已经下移
echo $a[0];    //will see wuqi
$a=each($userage);
echo $a[1];            //will print 27
echo $a['value'];  
?>
-------------------用each将数组所有元素循环出来-----------------------------
<?php
$userage=array('吴起'=>12,'李艳辉'=>34,'胡新鹏=>56');
//$a=each($userage);
//echo $a[0].'--'.$a['value']'<br/>';
//$a=each($userage);
//echo $a[0].'--'.$a['value']'<br/>';
//$a=each($userage);
//echo $a[0].'--'.$a['value']'<br/>';

//echo !!each($userage);    //说明有数据,有数据,用布尔值得理念就是true,两个感叹号转换为布尔值
//echo !!each($userage);    
//echo !!each($userage);    
//echo !!each($userage);      //第四个为假
  

while(!!each($userage)){                  //!转换为布尔值
echo $a['key'].'---'.$a['value'].'<br/>'
}
?>
-------------------------------------list------------------------------------------------
// 把数组中的值赋给一些变量 
<?php
//$a=array('aaaa','bbbb','cccc','dddd');
print_r($a);
// list把数组中的值赋给一些变量,list 只认识下标   自定义的字符串是无法识别的 只认识 0 1
//list($var1,$var2,$var3,$var4)=$a;    //a的值给  var 1 2 3 4
//echo $var1;  //print aaa
//echo $var2;  //print bbb
---------------------------------
$userage=array('吴起'=>12,'李艳辉'=>34,'胡新鹏=>56');  //无法识别
so
$userage=array('12','34,'56');
list($a,$b,$c)=$userage;
--------------------
$userage=array('吴起'=>12,'李艳辉'=>34,'胡新鹏=>56');
list($name,$age)=$($userage);

echo $name;
echo $age;
----------------------------------------reset----------------------------------------------
$userage=array('吴起'=>12,'李艳辉'=>34,'胡新鹏=>56');
$a = each($userage);  //吴起
echo $a['key'];
$a = each($userage);   //李艳辉
echo $a['key'];
//第三次想取第一条数据 将数组的 指针 调到第一个指针上
//reset 将数组的指针 指向第一单元
rset($userage);
$a=each($userage);     //吴起
echo $a['key'];
each($userage);      //隔一部
each($userage);
$a=each($userage);     //吴起
echo $a['key'];     //胡新鹏
---------------------------------------array_unique-------------------------------------------------------
$userage=array('吴起'=>12,'李艳辉'=>34,'胡新鹏=>56','王瑞键'=>34);
print_r*($userage);
echo '<br/>'
//array_unique        --移除数组中重复的值
//创建了一个新数组,新的ok  旧的不变   

$a=array_unique($userage);
--------------------------array_filp----------------------------------------------------------------------------------
//变换数据中的键和值
$userage=array('吴起'=>12,'李艳辉'=>34,'胡新鹏=>56');
//array_filp 变换数据中的键和值  不改变本体
$newuserage=array_filp($userage);
print_r($newuserage)
----------------------------------------二维表--------数组里的数组------------------------------------------------------
$product=array(
    array("苹果",6,28.8),
    array("猪肉",2,38.8),
    array("饼干",3,48.8),

);
<?php
$product=array(
    array("苹果",6,28.8),         【0】
    array("猪肉",2,38.8),        【1】
    array("饼干",3,48.8),        【2】

);
//print_r($product);
//print_r($product[0]);         array("苹果",6,28.8),
//print_r($profduct[0][0]);           苹果
//print_r($profduct[0][2]);        28.8

echo "|".$profduct[0][0]."|".$profduct[0][1]."|"."$profduct[0][2]."|<br/>";
echo "|".$profduct[1][0]."|".$profduct[1][1]."|"."$profduct[1][2]."|<br/>";
echo "|".$profduct[2][0]."|".$profduct[2][1]."|"."$profduct[2][2]."|<br/>";

//首先求出外面数组的长度
//echo count($product);   3
//求出内数组的长度
//echo count($product[0/1/2]);
for($i=0;$i<count($product);$i++){
    for($j=0;$j<count($product[$i])$j++){
    echo $product[$i][$j].'|';  
    }
//echo $product[$i].'<br/>';                //三个array
echo '<br/>'; 
}
?>
-------------------------------------------------------------------------------

$product=array(
    array('产品名'=>"苹果",'数量'=>6,'价格'=>28.8),         【0】
    array('产品名'=>"猪肉",'数量'=>2,'价格'=>18.8),
    array('产品名'=>"饼干",'数量'=>3,'价格'=>48.8),
    //for($i=0;$i<count($product);$i++){
    //    for($j=0;$j<count($product[$i])$j++){                 不是 0 1 2  
    //    echo $product[$i][$j].'|';  
    //    }
    ////echo $product[$i].'<br/>';                //三个array
    //echo '<br/>'; 
  --------------------foreach--------------------
  for($i=0;$i<count($product);$i++){
  foreach($product[$i] as $key=>$value){
  echo $key.'--'.value.'|';
  }
  echo '<br/>';
  -------------------list----each----------------------------
for($i=0;$i<count($product);$i++){
while(!!list(key,$value)=each($product[$i])){
echo $key.'---'.$value.'|';
}
echo '<br/>';

}
------------------------sort 排序-----------------------------------------
<?php
$fruit = array('banner','orange','apple');

//没有排序前 是按key 的形式
sort($fruit);
print_r($fruit);          //a b o 
>
----------中文----------
$userage=array('吴起'=>12,'李艳辉'=>34,'胡新鹏=>56');
print_r($userage);
echo'<br/>';
sort($userage);
print_r($userage);                 //中文也可以数字也可以 升序
-------------------sort_string---------------------------
$number=array(2,12);
//按照数字的话,要看整体的大小,按照字符串的话,只看第一位大小
sort($number,sort_string);
print_r($number);
------------asort----------------------------
//原始的键是
$fruit = array('banner','orange','apple');
echo '原始的:';
print_r($fruit);
//保持原始的key的关联
asort($fruit);              //下标不变
echo '<br/>';
----------------ksort-------------------------
$fruit = array('banner','orange','apple');
//按照键名排序
print_r($fruit);        a b c
-----------------------------rsort----------------------------------------------
$number=array(2,34,1,5,88,2,3,667,34);
rsort($number);
print_r($number);
-----------------------------------
<?php
//echo'<img src="image/mm1.jpg">'
$pic=array('mm1.jpg','mm2.jpg','mm3.jpg','mm4.jpg','mm5.jpg',)

//数组进行随机打乱
shuffle($pic);  
//对数组进行反向排序  array_*一般是新数组
array_reverse($pic);


for($i=0;$i<3;$i++){
echo '<img src="image/'.$pic[$i].'" style="margin:10px;"/>';
echo "\n";
}
?>
------------------------------------array_unshift-----------------------------------------------
$username=array("吴起");

函数的返回值将会得到数组的个数

array_unshift($username,'胡新鹏');开头insert
array_unshift($username,'李艳辉');结尾insert
print_r($username);

array_shift($username);    删除开头的元素
----------------------array_rand-------------------
$fruit=array('bannner','orange','apple');
//这个函数用来获取一个数组中的键(key)
//这个参数表明随即获取几个
$a=array_rand($fruit,1);    随即两个
echo $a[1]
echo $fruit[$a];
------------------------------------------------------------------------
$userage=array('吴起','李艳辉','胡新鹏');
//获取指针的当前元素
echo current($username);    //并将指针移到下一位
echo  next($username);
echo reset($username);  指向第一个单元
echo prec($username);    back one
echo sizeof($username)  //数组的个数
-----------------------------------------
$username=array(1,24,4,.6,67.8,8)

print_r(array_count_values($username))    //value出现的个数
------------------------------------------------------------------------
$fruit=array('a'=>'apple','b'=>'banner','c'=>'orange');
//通过标量函数将字符串键(key)设置为变量,然后将值赋给了这个变量

extract($fruit);
echo $a;
echo $b;
echo $c;
-----------------------解析目录basename()-----------------------------------------
//将一个路径赋给变量
$path='C:\EFI\Microsoft\Boot\cs-CZ.php';
echo basename($path);            .后面的文件类型
----------------------------返回目录部分-------------------------------------------
echo dirname($path);     .之前的
echo pathinfo($path)      //创建的是array 
$array_path = pathinfo($path);
echo $array_path[dirname];             //打印出目录
echo $array_path[basename];
------------------------------------------------------------------------------------------
$path="demo2.php";              ../
echo realpath($path);              //真实的路径
-----------------磁盘目录和文件计算------------------
filesize  文件的大小
$path='C:\EFI\Microsoft\Boot\cs-CZ.php';
echo  filesize($path)  //字节  1024
echo  round(filesize($path)/1024,2).kb;
---------------------计算磁盘可用空间-------------------
echo round(disk_free_space('C:')/1024,2).kb;
------------------------------总空间大小-----------------------------
echo round(disk_total_space('C:')/1024,2).kb;
--------------------最后改变的时间------------------
echo fileatime($path);
-------------------格式化一个本地日期-----------------------
date_default_tiemzone_set('Asia/shanghai');
//获取最后的访问时间
echo date('Y-m-d:i:s',fileasize($path));
echo date('Y-m-d:i:s',filecsize($path));      //内容的修改时间  
echo date('Y-m-d:i:s',filemsize($path));      //权限的修改时间
------------------------文件处理------------------------------------------
$fp=fopen("file.txt",'w');    //第一参数为那个文件   w  只写  清空插入第一行  没有文件时 试图创建
$outstring='This  is  a wq!'

fwrite//返回的是资源类型
$outstring="This is a wq! he is 19";
fwrite($fp,$outstring,strlen($outstring));             //最后一位数表示限制的长度   用strlen函数
fclose($fp);

--------------------------------------------------------------------------------------------------------
file_put_counts('file2.txt','this is a wq!');           php5才可以使用
--------------------------------------------写入文件---------------------------------------------------------
$fp=fopen('file.txt','w');
$outputstring='this is wq!\r\n thsi is  19';              //\r\n 可以用文本换行
fwrite($fp,$outputstring,strlen($outputstring));
fclose($fp);
--------------------------
file_put_count('file2.txt','this is wq!\r\n thsi is  19');
------------------------------------------------读出文件---------------------------------------------------------------
a  //追加写
$fp=fopen('file.txt',r)          
fgetc($fp);
echo fgetc($fp);//读出一个字符,指针下移到下一个文件
//fgets                //读出文件的一行
fgets($fp);
echo fgets($fp,2);       2行
fgetss($fp);           //过滤html code
fread($fp,2);                //读取定量字节   2
fpassthru();                        //输出文件指针处的剩余所有依据 本身包含了向浏览器输出的功能  返回的是剩余的总长度
------------------------------file-----------------------------------
//把整个文件读入数组中 按每行来分组
  $array_file=file('path')                     //不需要文件聚丙
 echo array_file=[4]              打印文件的第五行
 -------------readfile----------------------------------------------------------------------
readfile('file.txt');                //将整个文件读出来  自带echo

echo   file_getcontents('file.txt')           //保存到缓冲区 通过echo打印出来
-----------------------------------------feof--------------------------------
//检测文件指针是否为结尾
$fp=open('file.txt','r');
while(!feof($fp)){
echo fgetc($fp);
}
fclose($fp);
----------------------------------file_exists--------------------------
//查看文件是否存在  读取文件时 一定要存在
if (file_exists('file.txt')){
echo 'z执行各种各样的文本读写操作';
}else{
echo '此文件不存在,请管理员创建此文件';
}
--------------------------file_size------------------
echo file_size('file_txt');           //文本大小
//删除文件
unlink('123.txt');
-----------------------------rewind倒回到指针的位置--------------------------------------------------
$fp=open('file.txt','r');
echo  fgetc($fp);              //读出并移到下一个
echo  fgetc($fp); 
rewind($fp);
echo  fgetc($fp);
fclose($fp);
----------------------------------------------ftell-----------------------------------------
$fp=open('file.txt','r');
echo  fgetc($fp);              //读出并移到下一个
echo  fgetc($fp);
rewind($fp);
echo  fgetc($fp);
echo ftell($fp);        //查看指针的位置
   
fclose($fp);
------------------------fseek------------------
//在文件指针中定位
$fp=open('file.txt','r');
echo  ftell($fp);
fseek($fp,22);
echo   ftell($fp);\
fclose($fp);
----------------------flock----------------------------
//文件的锁定
a 表示可以追加 b 表示二进制
flock($fp,LOCK_EX);
echo  fgetc($fp);
flock($fp,LOCK_UN);
-------------------opendir----------------------------------------
//打开目录的指定流
$dir=open('distinct_path');               @ 不让错误暴露出来

while($file=readdir($dir)){

echo $file.'<br/>';


}


closedir('$dir');
----------------------scandir-----------------------------------
打印文件
print_r(scandir('distinct_path'));
--------------------rmdir--------------------
rmdir('wode.txt');
------------------rename----------------------------
//目录和文件都可以改
rename('text.txt','wode.txt');
-----------unlink--------------
unlink('wode.txt');
-=========================================md5=============================================================
//对字符串进行加密
echo  md5('134345');
echo '<br/>';
echo  hha('134345');
--------------------------------------function---------------------
function functionname(){
echo '我是一个五参数无返回的函数';
}
  functionname();
--------------------------------------
function  functionmianji($radiu=10) {
$area = $radius*$radius*pi();
echo '半径为:'.$radius.'的面积为'.$area;
}
functionmianji(20);
----------------------------------------
function  functionmianji($radius) {
$area = $radius*$radius*pi();
return    $area;
//echo '半径为:'.$radius.'的面积为'.$area;
}
//大大提高了灵活性
echo '面积为:'functionmianji(20);
---------------------------------------------------
返回多个值得函数调用,可以通过返回一个数组然后可以使用list()函数构造即可
 function functioninfo($name,$age,$job){
    //$userinfo=array($name,$age,$job);      
    $userinfo[]=$username;        //可以用追加的方式比较常用    
    $userinfo[]=$age;
    $userinfo[]=$job;

    return $userinfo;
 }
 
 //$arr=(functioninfo('吴起',19,'学生'));
 //echo $ARR[0];
 
 //调用函数
 list($name,$age,$job)=functioninfo('吴起',19,'学生');
echo  $name.'今年'.'$age'.岁了,他还是'.$job;
------------------------------引用传参---------------------------------
$price = 50;
$tax = 0.5;

//值传参
function functionprice(&$price,$tax){       //&  引用   if not exists;

$pices=$pices+$pices*$tax;
$tax=$tax*$tax;

echo $price;   //75          //外面和里面没关系
echo '<br/>';
echo $tax;

}
functionprice($price,$tax);  
echo $price;     //50      加取址符为75 开辟新的空间
echo '<br/>';
echo $tax;                       //变量区分大小写,函数不区分大小写
----------------------全局变量--------------------------------------
 $a=5;
 function fa(){
 //global $a;         //全局变量
 //$a=2;
$GLODALS['a']=2;


 }
fa();
//echo $a;
echo $GLOBALS['a'];        //超级全局变量
print_r($GLOBALS);
------------------创建自己的函数库(library)--------------------------------------------
function functionpi(){       

return pi();
}   //会存到函数库
---------------------
这句话 把函数库复制过来了
include 'library/tool.library.php';
echo functionpi();  //3.1492615
---------------------------------函数的引用--------------------------------
include ('demo11.php');          //不存在会警告但是继续执行
include_once ('demo1.php' );      //只能包含一次
require_once('demo1.php' );         //recommand
require('demo11.php');       //不存在直接停掉 $ expose
echo '<strong>这是demo11.php </strong>'
-----------------------------------魔法常量-------------------------------
//—file—
//魔法常量 说白了就是一个值而已
$file=_file_
echo $file;    //当前的文件名
//所以包含文件时 推荐使用
//DIR 取得目录 ,去掉文件名
require(dirname(_FILE_).'demo1.phpo');
----------------------------
_LINE_  //return current  line
echo _LINE_;
----------------
function fff(){
return _FUNCTION_;     //return  current function name
}
fff();
-------------------------字符串的格式化---------------------
echo trim('     php     ');  //清理一下两边的空格  ltrim  rtrim(chop)
---------------\n=><br/>-----------------------
//将字符串作为输入函数,用html中的,<br/>标记 代替字符串中的换行符
echo nl2br("this is a teacher!\n this is a student!");      \n 较多
--------all of string transformate html --------------------------------
$str='<strong>吴起<strong>';
echo htmllentitis($str);  //转换所有字符
htmlspecialchars  //我们只需要转换特殊字符
strip_tags        //去掉标签(strong)
---------------------addslashes-------------------------
$str='this is a teacher. hios a  "lee",\n this is wuqi';
$a= addslashes($str);      //过滤
//对于即将插入数据库的字符串,全部会格式化
//这个a 就是写入数据库的,拿出来的话就会有 \这个符号
echo stripcslashes($a);            //解析
---------------------upper------------------------------
 echo  strtoupper('yse@gmail.com'); //将英文转化为大写
 echo  strtolower('yse@gmail.com');  //lower 
 echo  ucfirst('yse@gmail.com');    //first
 echo  ucwords('yse@gmail.com');    // EVER word’s first
-------------------------------str_pad---------------------------
//填充字符串函数  str_pad
$str = 'Lee';
echo str_pad($str,5.'#',STR_PAD_BOTH(LEFT)).'is good!';    //默认的是后面
-----------------------操作字符串---------------------------------------
explode 一个字符串切割另一个字符串
$email=explode('@','yse@gmail.com');
echo $email;
print_r($email);
---------------------------------------------
//分割完了,我经过一轮筛选,还要重新组合
$arr=array('Lee','Wq','Hxp');
$str=implode('&',$arr);        //连接符为&
echo $str;        
--------------------------------------
$str=" i will be back";
//$arr=explode('',$str);

print_r($arr);
----------切开字符串----------------------
$str=" i,will.be#back";
#tok=strok($str,',.#');
//echo $tok;
while($tok){
echo $tok.'<>';
$tok=strtok(',.#');         //分割符 
}
------------------substr----------------------------
$str='yse@gmail.com';
echo    substr($str,0,1)   中间的 是位数,最后一个取几个
------------------------str_split()---------------------
分解字符串  返回一个数组
//$str=' This is a teacher';
//$str='他是吴起';   //中文不太好取 两个字节
print_r(str_split($str));
----------------------strrev()-------------------------
//字符串会逆序   中文不支持
$str=' This is a teacher';
print_r(strrev($str));
------------------字符串的比较--------------------
==比较字符串是否一致    返回 0 负数  整数  区分大小写
if(strcmp('b','b')==0{    //非自然排序
echo "=="
}  
---------------------
echo strccasecmp('B','b');  //不区分大小写
echo strnatcmp('2','10');    //自然排序  10 大
-----------------strspn-----------------
echo strspn('123','123@qq.com',3,5);   //返回几个字母,第三个开始取五位
echo strlen('thjis');  字符串的长度
echo substr_count('thjis',i);  i出现的次数
-------------------查找替换--------------------------
strstr  开始到结尾的位置
echo strstr('yc60.com@gmail.com','@');
//从指定的字符串输出之后的字符串 不区分大小写
echo stistr('yc60.com@gmail.com','g');
-----------------strchr(别名)-------------------------
//查照某字符串 最先出现的位置
echo    strpos('yc60.com@gmail.com','g'); 从第0开始
---------------------------
//查照某字符串 最后出现的位置
echo    strrpos('yc60.com@gmail.com','g'); 从第0开始
---------------replace-------------------------------
echo str_replace('Lee','W','this is Lee');
str_ireplace
 --------------
 echo substr_replace('yc60.com@gmail.com','&&',0,5);
第一个位置开始 取出五个来 并将它替换成参数2
------------------处理中文字符----------------------------------
中文字符可以是 utf8 gb2312  utf8  
mb_strlen()=>strlen
$str='我是吴起';
echo strlen($str);   /8个
echo mb_strlen($str,'GBK');         //有第二个参数
----------------------------------
echo    substr($str,1,2,'GBK');
echo    mb_substr($str,1,2);
mb_strstr()=>strstr
echo    md_strpos('我是ABC','我',0,'GBK');
------------------------正则表达式----------------------
perl风格解析语言搜索和替换
<?
//尝试着写第一个正则表达式
    //if('a'=='a'){
    //echo '相等';
    
    //else{
    //echo  '不等''
    //}
----------------------------
eg:preg_match('model','string')
第一个参数为模式,第二个为字符串
--------
//匹配和相等是两个概念  模式是一个整体
$mode='/php/';
$string='php';

if(preg_match($mode,$string)){

echo '匹配';        //按照模式来匹配 只要通过模式
}else{
echo '不匹配';
}   
-------------------------------------
正则表达式中的元素
+    匹配任何至少包含一个前导字符串 
*    匹配0个或者多个              
?    匹配包含零个或一个前导字符串
.    匹配任意字符串
{x}    匹配任何包含x个前导字符串
{x,y}    匹配任何包含x到y个前导字符串
--------------------------------------
//$mode='/ph+p/';  前导为h      
//$mode='/ph*p/';   //0个多个  前导字符不能更改
//$mode='/ph?p/';        0或1  多个不行 
//$mode='/ph.p/';       //任意一个字符  
//$mode='/ph.*p/';    //前导任意个或多个
//$mode='/ph{3}p/';         //必须是三个
//$mode='/ph{3,5}p/';        //三到五个 
//$mode='/ph{3,}p/';        //至少 三个 
//$mode='/php$/';        匹配字符串的行尾 
//$mode='/^php/';        开始进行匹配
//$mode='/^php*/';        相当于等于
//$mode='/php|asp/';        匹配左边或者右边
//$mode='/(this) (is)  a teacher/';  分组
//$string='this is  a teacher';
$string='phhhhhhhp';        
if(preg_match($mode,$string)){

echo '匹配';        //按照模式来匹配 只要通过模式
}else{
echo '不匹配';
}   
==============================正则表达式元字符================================
//$mode='/[a-z]/';        任何包含a-z 中的任意一个
//$mode='/[abc]/';         一个 
//$mode='/[a-zA-Z0-9_]/';=======[\w]               [\W]=![\w]
//$mode='/[^abc]/';        //不包含abc的字符串 
\d=[0-9]
\D=[^0-9]
\s    空白字符
\S     不包含
\b      是否到达边界   边界可以为空格
\B    没有到达边界
\+    正则中的特殊字符   +  
//$string='php';
$string='phphhhhhhp';        
if(preg_match($mode,$string)){
echo '匹配';        //按照模式来匹配 只要通过模式
}else{
echo '不匹配';
}
------------------------------修饰符----------------------------------------
//$model='/php/i';    //修饰符一般在外面   i表示不区分大小写   
//$string='PHP';        
    //$model='/php$/';        采用多行识别    
    //$string="This is a php\n this is a god ";    单引号不能转义

//$model='/php/x'        //忽略掉规则模式中的字符
//$string='PHP';
    //$model='/php/A    从开头开始匹配
    //$string='PHP';
U     禁止贪婪

if(preg_match($mode,$string)){
echo '匹配';        //按照模式来匹配 只要通过模式
}else{
echo '不匹配';
}
------------------------------函数的引用--------------------------------------------------
搜索字符串 返回有某个模式的数组
preg_grep()
$language=array('php','asp','jsp','python','ruby');  //蟒蛇语言
找出*.p
$mode='/p$/'
    print_r(preg_grep($mode,$language));
----------------
$mode='/^p/'        php python
print_r(preg_grep($mode,$language));
--------------------------------------------
搜索模式
preg_match('/php/[1-6]','php5')        返回true or false
-----------------------------------
电子邮件的案例
//通过 拆分的方式来分组
$mode='(/[a-zA-Z0-9_\.]{2,255})@([\w-]{1,255}).*([a-z]{2,4})/';
$string='yc60.com@gmail.com';
if(preg_martch($mode,$string)){
echo'电子邮件合法';
}else{
echo '否则就不合法';
}
------------------------------
//匹配全局正则
preg_match_all('/php[1-6]/','php5php6hfregert','$out');
print_r($out);
echo $out[0];   php5
--------------------------------------
定界特殊的字符串
preg_quote(PHP is $150');
---------------------------preg_rplace-------------------------------
搜索替换
第一个为模式 第二个放的是替换的字符串 第三个为字符串
echo   preg_replace('/php[1-6]',"python","this is a php5,this is a php4");  //同时替换
-----------------------------贪婪问题和分组问题-------------------------------------
//贪婪和分组获取案例,ubb
//将[b][/b] 换成<strong>php5</strong>
//.*  表示匹配0个或者多个
//用括号分三组那么第一组为\1,第二组为\2,第三组为\3,只有一组就\1
//第一个问题[b][\b]和最后一组匹配了   所以导致直接结尾了
//贪婪匹配问题  跟踪最近的一个 
$mode='(/\[b\])(.*)([\b/])/U';              []为字符中的
$string='this is a [b]php5[\b],this is a [b]php5[\b]'
$replace='<strong>\2</strong>'      //取回php5

echo preg_replace($mode,$rplace,$string)
---------------------------------------------------
//正则表达式分割
//如果没有[]表示同时满足
print_r(preg_split('/[.@]/,'yc60.com@gmail.com'));  
*注释:posix格式  ereg_
====================日期和时间库=================================
1970 1月1日。。。。。POSIX time  格林威治时间
checkdate    返回值为布尔型 验证格里高里时间  
-----------------------
if(checkdate(7,16,2010)){
echo  '这个日期是有效的';
}else{
echo  '这个日期不是有效的';
}
----------------
date()  第一个是日期和时间的格式化[timestamp] 
//Y 4位数的时间 y是两位数的日期
//M表示 英文的月份缩写,m表示阿拉伯数字的月份
//D 表示 英文的日缩写,m表示阿拉伯数字的日 
echo date('Y-m-d H:i:sa');
-----------------------------
gettimeofday  //取得当前时间 得到一个数组
print_r(gettimeofday());
//"sec"    Unix 纪元的秒数        
//"usec" -微妙数        
//minuteswest 格林威治向西的分钟数
//dsttime   夏令时修正的类型
-----------------表单与验证--------------------------------
header()函数  //重新导向URL 跳转页面
ob_start();
//除非打开缓冲,否则之前不能有任何浏览器输出
header('Location:http://localhost');
----------------------
//字符编码法
ob_start();   //打开缓冲区
echo '123';
header(Content-Type:text/html;charset=gbk';   //设置页面编码
echo '嘿嘿,我是中文!'
------------------------------------------
hidden    input //隐藏框
file         //上传
-----------------html--------demo3--------------------
<form method="post action="demo.php">    //地址栏看不到
姓名:<input  type="text name="uername"/><br/>
<input type="submit" value="提交"/>
<form/>
----------------------------------demo4------------------
$_post  超级全局变量
<?php
//接受表单上的值
//一个值 username
//$_POST['username'];
//echo  $_POST['username'];   //提交之后会显示
//空字符串也是数据也可以赋值给$_post
//isset()验证是否z正常提交是非常有效的 
//目前所说的恶非法提交,是你没有经过表单提交,没有生产全局变量,而不是username

 
if(echo isset($_POST[username])){      
echo "正常提交";}
else{
echo "非法提交";
}
------------------------empty ------
//判断是否为空
if(empty($_POST[username])){       ==基本一样 只能说人家没有填 
echo "正常提交";
}
else{
echo "非法提交"
}
---------------------过滤html-------------------------
<form method="post action="demo.php">    //地址栏看不到
姓名:<input  type="text name="uername"/><br/>
<input type="submit" value="提交"/>
<form/>
-----php---------
if(isset($_POST[username])){          
echo "正常提交"
$username=$_POST['username'];

//为了 页面安全性 
$username=htmlspecialchars($username);
echo $username;
else{
echo "非法提交"
}
---------------------数据有效性---------------------------
if(isset($_POST[username])){          
echo "正常提交"
$username=$_POST['username'];
//有效性
$username=trim($username);
//为了 页面安全性 
$username=htmlspecialchars($username);
if(strlen($username)<2)then{
echo ''用户名不能小于两位;
exit;
}
echo $username
else{
echo "非法提交"
}
--------------------------是否为纯数字----------------
is_numeric
if(isset($_POST[username])){          
echo "正常提交"
$username=$_POST['username'];
//有效性
$username=trim($username);
//为了 页面安全性 
$username=htmlspecialchars($username);
if(strlen($username)<2)then{
echo '用户名不能小于两位';
exit;
}
if(!is_numeric($username))then{
echo '用户名必须是纯数字';
exit;
}
echo $username
else{
echo "非法提交"
}
-----------------------------demo4--------------------------------------
<meta http-equiv="Content-Type" content="text/html";charset=GBK">
<form method="post action="demo5.php">    //地址栏看不到
用户名:<input  type="text" name="uername"/><br/>
密  码:<input type="password" value="password"/><br/>
验证码:<input  type="text" name="code" size="5"/>1234<br/>
邮  件: <input type="text" name="email"/> <br/> 
介  绍:<textarea rows="25"cols="6" name="content"></textarea><br/>
<input  type="submit" value="提交"/><br/>
<form/>
--------------------------------------demo5-------------------------
<?php
header('Content-Type:text-html;charset=gbk');
//是否为demo5提交过来的
//只要是按钮点到这里的 其他超级全局变量都应该存在
//如果 send是存在的,那么就是点过来的,跳回5
if(!isset($_POST['send'])||$_POST[send]!='提交'){
header('Location:Demo5.php');
exit;
}
//第二步接收所有数据
$username=trim($_POST['username']);
$password=$_POST['password'];
$code=trim($_POST['code']);
$email=trim($_POST['email']);
$content=htmlspecialchars(trim($_POST['content']));
//echo $username.$password.$code.$content;
//用户名不能小于两位,不能大于10位;
if(strlen($username)<2||strlen($username)>10){
//使用js跳转
echo "<script>alert('用户名不能小于两位或者大于10位');history.back();</script>"
exit;
}
if(strlen($password)<6{
echo "<script>alert('密码不能小于6位');history.back();</script>"
exit;
}
if(strlen($code)!=4||!is_numeric($code)){
echo "<script>alert('验证码不能小于4位并为纯数字');history.back();</script>"
exit;
}
//验证电子邮件是否合法
if(!preg_match('/([a-zA-Z0-9_\.]{2,255})@([\w-]{1,255}).*([a-z]{2,4})/',$email)){
echo "<script>alert('电子邮件不合法');history.back();</script>"
exit;
}
echo '用户名:'.$username.'<br/>';
echo 'email:'.$email.'<br/>';
echo '个人介绍:'.$content;
?>
--------------------demo1-------------cookie sesion-----------------------------------------------
<form method="get" action="demo2.php">
姓名:<input type="text" name="username"><br/>
<input type="submit" value="提交"/>
</form>
<a href="demo2.php?a=5">Lee</a>       //get方式 可以用超链接来传值
------demo2----------------------
//$_POST['username'];
//如果表单采用的是get那么必须$_GET
$_GET['username'];        不安全
------------------------------cookie sesion---------------------------------------
//客户端存储少量信息,包含登录时的信息
//会话结束时 关闭浏览器就没有了
<?php
setcookie('name','value');             //创建 cookie
//创建一个包含 过期时间的cookie 当前时间戳+秒
//表示未来七天 time()+(7*24*60*60)
setcookie('name','value',time()+(7*24*60*60));

//读取本机的cookie,采用一个超级全局变量$_cookie
//有一个特性,setcookie并不是 及时生成,他会慢一拍 第一次刷新不会获取到 而二次才会真正获取到
echo  $_cookie['name'];
//用变量检测函数来判断cookie是否存在
if(isset($_COOKIE['name'])){
echo $_cookie['name'];
else{
echo '不存在此用户';
}

}
------------------删除cookie-------------------------------------------------------------
setcookie('name','value');  
//setcokie('naem','');
//过期的时间
setcookie('name','value',time()-1);
echo $_cookie['name'];
------------------------------------------cookie----------------------------
html 文件前 处理
不同的浏览器输出的结果不一致
一个浏览器能创建的cookie不能超过三十个并且每个不能超过4    kb 每个web站点能设置的cookie总数不能超过20个
主要限制在客户端
-----------------------------------demo6------会话控制--------------------------------
<form method="post action="demo7.php">    //地址栏看不到
姓名:<input  type="text name="username"/><br/>
<input type="submit" value="提交"/>
<form/>
---------------demo7
如果生成的与指定的相同就完成
if(isset($_POST['username'])&&$_POST['USERNAME']=='Lee'){
setcookie('name','value');
header(Locatin:Demo8.php');
}else{
header(Location:demo6.php);
}
============demo8==
if(isset($_COOKIE['name'])){         //有值
echo '欢迎光临'.$_COOLIE['name'];
}else{
echo '非法登录';
}
---------------------session------demo9----------------
session_start()      //开始会话处理     存在于服务器 存放1440秒 如果没有操作 会自动销毁  php.ini 可以修改
//如果关闭了浏览器 自动销毁
//没有慢一拍 即时性
$_SESSION['NAME']='Lee';
 if(isset($_SESSION['NAME'])){
echo $_SESSION['name'];
}else{
echo '不存在此人';
}

-----------unse------------------
unset($_COOKIE['name']
echo isset($_SESSION['NAME']);
--------demo9-------------------
session_start()  
$_SESSION['NAME']='Lee';
$_SESSION['NAME']='Lee2';
--------demo9-------------------
session_start()  
session_destory();  //销毁所有的session  也慢半拍
     echo $_SESSION['NAME'];
    echo $_SESSION['NAME'];
----------------session案例------------------------
//cookie  会员登录 购物车     不占资源
//session 一般用于后台管理 安全性高
-----------------上传文件-------------------------------------
$_file数组
file_uploads=on|off //php脚本是否可以接受文件上传
max_execution_time=integer   最长的等待时间 mb
memory_limit=integer      设置脚本可以分配到的最大内存 
upload_max_filesize=integer  mb  上传时的最大大小 此指令必须小于post_max_size
upload_tmp_dir=string  上传之前必须放在服务器的一个临时目录 知道文件移动到最终目录位置
past_max_size=integer   post方法最大的接受信息 mb
--------------------------------------------------------------
<form enctype="multipart/form-data" action="upload.php[destinct]" method="post">
//hidden 隐藏字段 隐藏域 超过值时not  file之前  不能超过ini.php
<input type="hidden" name="MAX_FILE_SIZE" value="1000000"/>
上传文件:<input type="file" name="userfile"/>
<input type="submit" value="上传"/>
</form>
--------------------------------------$_files-----------------------------------
<form enctype="multipart/form-data" action="demo2.php[destinct]" method="post">
//hidden 隐藏字段 隐藏域 超过值时not  file之前  不能超过ini.php
<input type="hidden" name="MAX_FILE_SIZE" value="1000000"/>
上传文件:<input type="file" name="userfile"/>
<input type="submit" value="上传"/>
</form>
-------------------demo1------------------
<?php
//接受文件
//$_Files
//print_r($FILES);
//存在但是是空值
[userfile][name]   
[userfile][type]
[userfile][type_size]
?>
-------------上传文件指定目录-----------------
is_uploaded_file() 
move_uploaded_file() 
//is_uploaded_file()
//上传后会存放到临时目录下

define('URL',_file_dirname(_file_).'/uploads');

//设置大小问题
if($FILES['usefile']['size']>MAX_SIZE){

echo  "<script>alert('上传文件不得超过2M');history.back</script>"
exit;
}
//判断目录是否存在
if(!is_dir(URL)){
mkdir(URL,0777);   //最大权限


}

define('MAX_SIZE',2000000);
$fileMimes=array(image/jpeg','image/pjpeg','image/png','image/x-png')
//判断是否为数组中的一种
if(is_array($fileMimes)){
in_array($_FILES['userfile']['type'],$fileMIMES)){
echo  '<script>alert('本站只允许jpg.gif.png图片');history.back</script>'
exit;
  }
}

//1 上传错误
if($_FILES['userfile']['error']>0){
switch($_FILES['userfile']['error']){
case 1:echo  "<script>alert('文件超过约定值');history.back</script>"
break;
case 2:echo  "<script>alert('文件超过约定值');history.back</script>"
break;
case 3:echo  "<script>alert('a little');history.back</script>"
break;
case 4:echo  "<script>alert('null');history.back</script>"
break;
}
exit;
}
             //2 只允许jpg
            if($_FILES['userfile']['type']!="img/jpeg" &&img/ejpg"  ){
            echo  "<script>alert('只允许jpg');history.back</script>"

            exit;
            }

        swith($_FILES['userfile']['type']){
        case 'image/jpeg';  //火狐
        break;
        case 'image/pjpeg';  //IE
        break;
        case 'image/gif';  
        break;
        case 'image/png';  //火狐
        break;
        case 'image/x-png';  //IE
        break;
        default :
        echo  "<script>alert('只允许jpg');history.back</script>"
        }


if(is_uploaded_file($_FILES['userfile'])){
//echo '上传的临时文件已经存在,等待移动中,,'
//move_uploaded_file()将上传文件移动到新位置
//第一个  临时文件的地址 
//第二个  存放文件的地址   //相对路径
    //先判断目录是否存在
//屏蔽警告 加@符号
if(!@move_uploaded_file($_FILES['username']['tmp_name'],URL.$FILES['userfile']['name'])){

echo '<script>alert('移动失败');history.back</script>'

exit;}
}else{
echo '<script>alert('找不到上传的文件');history.back</script>'

exit;}

//全部通过就上传成功了
echo '<script>alert('上传成功');location.href="demo3.php?url=".$_FILES['userfile']['name']."</script>'
demo3打印出源URL
-------------------------demo3--------------------
$url=$_GET['url'];
echo '<img src="'.$url.'">'
//echo '<img src="'$_FILES['userfile']['name']'"/>'    not    发送了 2 
----------------------------------上传文件---------------------------------------------------------------
define('URL',_file_dirname(_file_).'/uploads');
---------------------------动态图像的处理----demo1-----------------------------------------------
GD2库
//创建图像
//设置标图
//背景
//文本
//输出图形
//清理资源

//一般生成的是四种 png jpg jpng jpeg
//image 图像函数 只限于html输出

<?php
//1设置文件mime类型,输出类型  默认的 可以不写
header ('Content-Type:image/png');
//创建一个图形区域,图像背景
//2有两种  资源类型 一般加上@防止出错  imagecreate  imagecreatetruecreate
//这个函数创建了一个图像区域。没有进行填充的时候默认为黑色
$im=imagecreatetruecreate(200,200)    返回的是资源聚丙
//3在空白区图像绘制填充
//填充色换掉,首先要有个颜色填充器
//填充色换掉  imagecolorallocate  --为一副图像分配颜色
$blue =imagecolorallocate($im,0,102,255);  
//imgefill将颜色填充到背景
imagefill($im,0,0,$blue);
//4颜色填充 
$whilte=imagecolorallocate($im,255,255,255); 
//imageline --画一条线段
imageline($im,0,0,200,200,$whilte);
imageline($im,200,0,200,200,$whilte);
//imagestring 绘制文本 聚丙 字体size  x y 
imagestring($im,2,0,0,'Mr.Lee,$whilte);

//5输出图形
imagepng($im)
//6清除所有的资源
//imagedestroy($im)   推荐png
------------------demo2---------------------
header ('Content-Type:text/html;charset=gbk');
echo '<img src="demo1.php" alt="图形" title="图形"/>'
----------------------简单的小案例-----------------------------------
//简单的验证码
//随机数
//因为要实现最简单的字母和数字混搭
//十六进制 0-9 a-f 
//十进制转换为十六进制
//创建一个四位

for($i=0;$<4;$i++){
$nmsg.=dechex(mt_rand(0,15));
}
header('Content-Type:iamge/png');
$im=imagecreatetruecolor(75,25);
$blue=imagecolorallocate($im,0,102,255);
$whilte=imagecolorallocate($im,255,255,255);
imagefill($im,0,0,$blue);
imagestring($im,5,20,5,$nmsg,$white);
imagespng($im);
imagesdestory($img);
--------------加载已有的头像-----------------------
define('_DIR_',dirname(_FILE_).'\\');
header('Content-Type:iamge/png');
//imagecreatefrompng    --从png文件中或url新建一图像
//img载入时可以编辑 加水印
$im=iamgecreatefrompng(_DIR_.'222.png');  //全路径
//魔法常量_FILE_

$whilte=imagecolorallocate($im,255,255,255);
imagestring($img,5,0,0,'www.yc6o.com',$whilte);
imagespng($im);   //输出
imagesdestory($img);  //销毁
-------------------加载已有的系统字体---------------------------
define('_DIR_',dirname(_FILE_).'\\');
header('Content-Type:iamge/png');
$im=iamgecreatefrompng(_DIR_.'222.png'); 
$whilte=imagecolorallocate($im,255,255,255);
//采用系统字体
//字体文件
$font='C:\WINDOWS\FONTS\SIMHEI.TTF';
//字体转换
$text=iconv('gbk','utf-8','小李');
//第二个参数是字体的大小  
//三个 旋转角度
//四五参数是坐标
imagegettftext($im,20,0,30,30,$while,$font,$text)
-----------------------------------微缩图的问题-----------------------------
//<img src="22.png" width="20" heigth="40"/>   //会失真
//容量 大小都变小了
header('Content-Type:iamge/png');
define('_DIR_',dirname(_FILE_).'\\');
//getimagesize  取得图像大小
//获取到了原图的长度和高度
list($width,$height)=getimagesize(_DIR_.'222,png');
$_width=$width*0.4;
$_height*=$height*0.4;
//创建一张新图 
$im=imagecreatetruecolor($width,$heigth);

//下面的工作是载入原图,并复制到新图上去
$_im=imagecreatefrompng(_DIR_.'222.png');
//将原图重新采样到新图上 按0.4的比例输出
//imagecopyresampled  --重新采样 并调整大小
imagecopyresampled($im,$_im,0,0,0,$_width,$_height,$width,$height);


//将新图输出
imagepng($im);
//销毁
imagedestory($im);
imagedestory($_im);
---------jpeg
imagepng($im,null,34);  34 表示清晰度也会改变大小
载入jpg
导出的为png?    ok  
------------------------------------------------------------------------------
-


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值