代码改变世界

php学习

2016-06-16 18:42  孤独大兔子  阅读(262)  评论(0)    收藏  举报

一、安装、配置环境

Windows下安装方式
appserv http://www.appservnetwork.com
phpStudy
Wamp
Xmapp

这里选择AppServ安装,先去官网下载,然后安装

分别填写服务器名称,邮箱,端口号

填写登录密码,用utf-8字符集

安装完成,测试是否安装完成

1、开始--程序中有AppServ

2、找到安装路径

分别是apache服务程序,mysql,php脚本解析,网站默认的目录

3、打开网址,见到这个页面,说明已经安装成功了

这个页面就是D:\AppServ\www\index.php,等于打开了 http://localhost:8082/index.php

4、进入到服务器,其实就是进到phpMyAdmin目录下,用户名是root,密码是之前安装时输入的密码

 

二、安装disucz论坛和ecsshop网店

安装discuz论坛和ecsshop网店
去 http://www.comsenz.com/products/discuz 下载然后安装
去 http://www.ecsshop.com 下载然后安装

 

discuz需要先运行安装向导  http://localhost:8082/discuz/install/ 才可以正常访问

安装成功后,就可以正常访问了 http://localhost:8082/discuz/

同理,安装ecshop

 

四、基本语法

基本风格:<?php dosomething ?>

简短风格:<? dosomething ?>

script风格:<script language="php"> echo dosomething </script>

1、向浏览器输出:

echo() 功能:向浏览器输出字符串

echo()返回值:void 无返回值

<?php
    echo "ddd";
?>

print()功能:向浏览器输出字符串

print()返回值:整型

<?php
    echo print "<p>ddd</p>";
?>
//输出多了1

printf()功能:向浏览器输出字符串

printf()返回值:返回字符串的长度

<?php
    echo printf ("我买了%d套光盘",5);
?>
//多了个19

sprintf功能:将字符串保留在内存中

sprintf返回值:返回字符串

<?php
    sprintf ("我买了%d套光盘",5);
?>  
//不会输出,保存在内存中

printf()和sprintf是c语言模式,sprintf需要echo将他输出

常用类型指示符

类型 描述
%b 整数,显示为二进制
%c 整数,显示为ASCII字符
%d 整数,显示为有符号十进制数
%f 浮点数,显示为浮点数
%o 整数,显示为八进制数
%s 字符串,显示为字符串
%u 整数,显示为无符号十进制数
%x 整数,显示为小写的十六进制数
%X 整数,显示为大写的十六进制数

2、标识符与变量

创建变量

$+标识符

标识符可以任意长度,由字母,数字,下划线组成,不能以数字开始,标识符区分大小写,变量名可以与函数名相同

变量数据类型:整数,浮点,字符串,布尔,数组,对象

类型转换:

gettype和settype用于检测数据类型

<?php
    $abc=5;
    echo gettype($abc);
?>
//integer 整型
隐式转换
<?php $abc=5; $abc1=1.22; $abc=$abc1; echo gettype($abc); ?> //double 浮点型
强制转换
<?php
    $abc=5;
    $abc1=(float)$abc;
    echo gettype($abc1);
?>
//double 浮点型

settype设置变量类型

<?php
    $abc=5;
    settype($abc,"string");
    echo gettype($abc);
?>
//string

isset()和unset()判断变量是否存在,销毁一个变量,返回布尔值

<?php
    $abc=5;
    echo isset($abc);
?>
//1

 如果为真返回1,如果为假返回空

unset()销毁一个变量,销毁后再isset(),就为空了

empty()检查一个变量的值是否为空

不为空返回空,为空返回1   (其实就是判断true和false)空字符串,没有变量,0....都返回1

其他检测类型

is_array()、is_double()、is_float()、is_real()、is_long()、is_int()、is_integer()、is_string()、is_object()、is_resource()、is_null()、is_numeric()

<?php
    $abc="100";
    echo is_integer($abc);
?>
//返回空

可以通过调用一个函数来实现转换类型

intval()、floatval()、strval()   整形、浮点、字符串

<?php
    $abc=22.22;
    //intval($abc)整体变成整形
    echo intval($abc);
    //$abc 还是浮点型
?>
//settype($abc,"integer")设置,会设置

变量和作用域

超级全局变量--可以在任何地方使用和可见

常量,一旦被生命,将可以在全局可见

超级全局变量

$GLOBALS  所有全局变量数组

$_SERVER  服务器环境变量数组

$_GET    通过get方法传递给该脚本的变量数组

$_POST  通过post方法传递递给该脚本的变量数组

$_COOKIE  cookie变量数组

$_FILES   与文件上载相关的变量数组

$_ENV    环境变量数组

$_REQUEST  所有用户输入的变量数组

$_SESSION   会话变量数组

常量define--一旦被定义后,就不会再更改,要大写

<?php
    define("TOTO",100);
    echo TOTO;

    //一旦定义,就不会再更改
    define("TOTO",200);
    echo TOTO;
?>
//100 100

除了自定义常量外,php还预定了许多常量,可以用phpinfo()方法查看,其中

这些都为预定常量(环境变量)

<?php
    echo $_SERVER["DOCUMENT_ROOT"];  //物理地址
    echo $_SERVER["SERVER_PORT"];//端口号
?>

表单变量

 访问表单变量

$userName                         //简单风格   不允许使用,会混淆和普通变量的关系

$_POST["userName"]           //中等风格    把表单中的value提取出来

$HTTP_POST_VARS["userName"]         //冗长风格

<form method="post" action="demo02.php">
    姓名:<input type="text" name="userName" />
         <input type="submit" value="提交">
</form>


<?php
   //$userName
   //echo $_POST['userName'];         //将表单中的value值提取出来
   //$HTTP_POST_VARS["userName"]      //不推荐
?>

变量和字符串之间用.连接

$_GET方式接收需要前面method改成get

 

七、操作符与控制

1、字符串插入

双引号,可以解析出来变量,如果是中文字符尽量用.来连接

<?php
echo $userName="root";
echo "this is name $userName!" //this is name root!
?>

可加入转义字符

单引号,变量和转义字符不会被解析

2、操作符

+、-、*、/、%   +=、-=、*=、/=、%=  ++、--、==、===、!=.......和js一样

错误抑制符:$a=@(100/0);   除数不能为0,会出错,所以加上@避免出现错误警告。

3、控制结构

if(){}、if(){}else{}、if(){}elseif(){}和js不同的是elseif是连在一起的

switch、while、for....break退出当前循环,exit退出整个程序,continue退出当前本次循环并且继续下次循环

 

九数学函数、数组
1、数值数据类型

隐式转换

<?php
   $a="5";
   $b=7+$a;
   echo $b;   //12
?>
//如果是. 就是75

is_numeric()可以检查参数传入是否是数字或数字字符串

is_int()是否是整数

is_float()是否是浮点数

2、随机数

rand()产生随机整数     //echo rand(0,10)

mt_rand()替代了rand(),速度更快

3、格式化参数

number_format 以千位分隔符格式化一个数字

<?php
  $num=123.234;
  $b=number_format($num,2);
  echo $b;
?>
//123.23

4、数学函数

abs()   绝对值

floot()   舍去法取整

ceil()    进一法取整

round()   四舍五入

min()   求最小值或数组中最小值

max()  求最大值或数组中最大值

 

十、数组

第一种:通过array()来创建

<?php
  //创建数组
  $arr=array("lynn","zhh","mayun");
  //只能打印出类型
  //echo $arr;
  
  //具体元素要找到他的下标
  //echo $arr[0];

  //可以通过print_r()来查看数组
  print_r($arr);       //Array ( [0] => lynn [1] => zhh [2] => mayun )
?>

第二种:通过range()函数自动创建一个数组

<?php
  $arr1=range(1,10);
  print_r($arr1);

  $arr2=range('a','z');
  print_r($arr2);
?>

使用循环访问数组

<?php
  $arr1=range(1,10);
  for($i=0;$i<10;$i++){                 //$i<$count($arr1);
      echo $arr1[$i];
      echo '<br />';
  }
?>

可以使用count()来统计数组的个数

如果key不是从0开始,或者压根不是数字,要用到forEach()来遍历

<?php
  $arr1=range(1,10);
  foreach ($arr1 as $value) {
      echo $value.'<br />';
      # code...
  }
?>

死格式,key和value分别对应键和值;

如果不是数组,就会报错,所以先判断是不是数组用 is_array()来判断

2、自定义键数组

<?php
  $arr1=array('baidu'=>'lynn','taobao'=>'mayun','360'=>'zhy');
  echo $arr1['baidu'];
?>

追加数组

直接追加    $arr1=[‘lynn’]='li';

each 返回当前数组键值对,并将数组指针向前移动一步,默认情况下他指向第一个键值对

<?php
  $arr1=array('baidu'=>'lynn','360'=>'liyanhui',"souhu"=>'zhou');

  $a=each($arr1);
  echo $a[key];    
  echo $a[value]
?>

如果前面有一个each(),指针向前移动一步

<?php
  $arr1=array('baidu'=>'lynn','360'=>'liyanhui',"souhu"=>'zhou');

  while(!!$a=each($arr1)){
      echo $a['key'].'---'.$a['value'].'<br />';
  }
?>     
//每次移动一次,判断如果有值,就循环

list(),可以直接得到数组的值----只能认识key为数字的,不能认识自定义

<?php
  $info = array('coffee', 'brown', 'caffeine');

  list($var1,$var2)=$info;
  echo $var2;
?>    ///brown

但可以这样做

<?php
  $info = array('coffee'=>'a', 'brown'=>'b', 'caffeine'=>'c');

  list($var1,$var2)=each($info);
  echo $var1;
  echo $var2;
?>

each()指针如果想调整到最初,用reset()方法

<?php
  $info = array('coffee'=>'a', 'brown'=>'b', 'caffeine'=>'c');

  $a=each($info);
  echo $a['key'];    //coffee

  $a=each($info);
  echo $a['key'];    //coffeebrown
  //如果想取数组第一个数据,用reset()方法
  reset($info);

  $a=each($info);
  echo $a['key'];    //coffee
?>

array_unique移除数组中重复的值

<?php
  $info = array('coffee'=>'a', 'brown'=>'b', 'caffeine'=>'c','lynn'=>'c');

  print_r($info);
  echo '<br />';
  $a=array_unique($info);
  print_r($a);
?>     //移除了lynn

array_filp()交换数组中的键和值

3、二维数组

<?php
  $info = array(
              array("主弱",1,11),
              array("苹果",2,22),
              array("里",3,33)
      );

  print_r($info)
?>      //info[0][0]  可以这样打印

4、数组排序

sort();排序,会改变原数组,可接受第二个参数

  • SORT_NUMERIC - 单元被作为数字来比较
  • SORT_STRING - 单元被作为字符串来比较
  • 。。。。

asort();排序,保持原始的key的关联,保持索引关系

ksort();排序,按照键名排序 ,key

反向排序,在所有前面加r,如rsort()、arsort()、krsort()

随机排序,shuffle(),同sort();

 反向排序,array_reverse();  创建新数组

将新元素添加到数组头:array_unshift();   第二个值设置添加的内容---返回数组元素个数

将新元素添加到结尾:array_push();

删除数组头第一个元素:array_shift();  

删除数组尾第一个元素:array_pop(); 

从数组中随机取出一个或多个单元:array_rand();       第二个参数是取出几个

<?php
  $info = array(
              "pingguo","orange","banner"
      );
  $a=array_rand($info,1);
  print_r($a);
?>

获取指针当前元素:current();  默认情况下指针在第一条数据,不会将指针移到下一个

获取当前元素:each(); next();      会将指针移到下一个

reset();   会将指针复原

prev();end();和next();相反,将指针往回移一个位置

统计数组下标个数:count();sizeof();

统计数组中所有值出现的次数:array_count_values();

<?php
  $info = array(
              1,2,43,12,3,1,2,3,345,1,2453,1,3,8
      );
  $a=array_count_values($info);
  print_r($a);
?>      //其中1出现的次数最多,出现了4次

 extract() 把数组变成变量

<?php
  $a=$b=$c='';
  $info = array(
              'a'=>'apple','b'=>'banner','c'=>'orange'
      );
  //通过标量函数将字符串键(key)设置成变量,然后将值付给这个变量
  extract($info);
  echo $a;    //分别得到各自的值
  echo $b;
  echo $c;
?>

十六、目录和文件

1、目录操作

basename();  返回路径中的文件名部分

dirname();  返回路径的目录部分

pathinfo();  路径信息,是个数组,包括目录名,基本名和扩展名...

<?php
  $path='D:\AppServ\www\statusphp\demo01.php';
  echo basename($path);   //文件名
  echo dirname($path);    //目录部分
  echo pathinfo($path);    //路径的信息,创建一个关联数组,包括目录名,基本名和扩展名
  echo '<br />';
  print_r(pathinfo($path));  //dirname\basename\extension\filenam
?>

realpath();    转换成绝对路径

<?php
  $path='demo01.php';
  echo realpath($path);   //转换成绝对路径
?>

2、磁盘路径和目录和文件计算

filesize();  取得文件大小,返回的是字节

disk_free_space();   磁盘可用空间

disk_total_space();   磁盘总空间

fileatime();  获取文件最后的访问时间 返回一个时间戳,需要格式化

filectime();   获取文件最后的改变时间

filemtime();  获取文件最后的修改时间

<?php
  $path='demo01.php';
  echo filesize($path);        //文件大小 返回字节
  echo disk_free_space('C:');  //返回磁盘可用空间大小  /1024就是KB
  echo disk_total_space('C:');  //返回磁盘总空间大小  /1024就是KB
  echo '<br />';
  echo fileatime($path);    //最后访问时间
  echo '<br />';
  //格式化一个本地日期
  date_default_timezone_set('Asia/Shanghai');   //调整一下时区
  echo date('Y-m-d H:i:s');
  echo date('Y');
  echo '<br />';
  echo date('Y:m-d H:i:s',fileatime($path))  //把时间戳放进去,转换成时间
?>

3、文件处理

将数据写入一个文件,需要三个步骤,打开一个文件(如果文件不存在需要创建他),将数据写入,关闭文件

将数据读出,需要三个步骤,打开一个文件(如果文件不存在需要创建他),将数据读出,关闭文件

fopen('file.txt','w');  打开一个文件,需要制定如何使用它,也就是文件模式;

fopen()文件模式

第一个参数是哪个文件,第二个参数表明模式

如果文件已经有了,并且有数据,那么删除这个文件,重新创建

如果没有这个文件,那么那么就自行创建

打开后要关闭掉

fclose();

<?php
    $a=fopen("bb.txt", 'w');
    fclose($a);
?>

r 只读,r+读写, w只写,w+读写,a读写.....

fwrite()写入  第一个参数是资源句柄,第二个是内容,第三个参数是长度

<?php
    $a=fopen("bb.txt", 'w');  //打开
    fwrite($a,'this haha');  //写入
    fclose($a);   //关闭
?>

file_put_contents('xx.txt','neirong');   就只有一句话,不需要做其他的事,使用这个,php5才有用

<?php
    //第一种写法
    $a=fopen("bb.txt", 'w');  //打开
    $outputstring="this is wq!\r\n19";
    fwrite($a,$outputstring,strlen($outputstring));  //写入
    fclose($a);   //关闭


    //第二种写法
    file_put_countents('bb.txt',"this is wq!\r\n19");
?>

读取:

$fp=fopen('xx.txt','r');

fgetc();  读出一个字符,并将指针移到下一个字符

fgets();  读出一样字符,可以制定一行显示的长度(第二个参数)--长度-1的字符串

fgetss();  从文件指针中读取一行并过略掉html标记

fread();   读取定量的字符

fpassthru();  输出文件指针处的所有剩余字符

file();   将整个文件读入数组中,以行分组

readfile(); 读入一个文件并写入到输出缓冲  ,将整个文件都出来,不需要echo,返回值是文件字节的总长度

file_get_contents();  将整个文件读入一个字符串  php5才有,同上,只是不用关闭

<?php

    $a=fopen("bb.txt", 'r');  //打开
    
    echo fgets($a);   //读一行

    fclose($a);   //关闭
?>

//读取一个文件的时候,必须保证这个文件存在,否则就报错,有必要做检测

file_exists-- 检查文件或目录是否存在

<?php

    if(file_exists('bb.txt')){
        echo '执行各种各样的文本操作!';
    }else{
        echo '此文件不存在';
    }
?>

unlink('xx.txt');  删除一个文件

rewind();   倒回到文件指针的位置,回到首位

ftell();    返回文件指针的位置,只是查看,从0开始

fseek();   在文件指针中的位置,第二个参数是定位的位置

4、文件锁定

读写文件的时候,进行文件锁定

flock();    LOCK_EX文件锁定,LOCK_UN文件解锁

<?php
    $a=fopen('xx.txt','ab');
    flock($a,LOCK_EX);  //锁定
    fwrite($a, "haha");  //操作
    flock($a,LOCK_UN);  //解锁
?>

opendir();   打开一个目录,可以放绝对路径,也可以放相对路径

closedir();   关闭一个目录

readdir();   读出一个目录,每次读出一个,使用一个循环来读出

<?php
    $a=opendir('../statusphp');
    //读出目录,使用一个循环来读出
    //字符串如果是布尔值,就是说,字符串不为空,那么就是真,为空就是假
    while(!!$file=readdir($a)){
        echo $file.'<br />';
    }

    closedir($a);
?>

scandir();   列出指定路径的文件和目录,生成数组,不需要打开和关闭

<?php    
    print_r(scandir('../statusphp'));
?>

rmdir();   删除一个目录,不需要打开和关闭,同样相对路径和绝对路径都可以操作

unlink();  删除文件

rename();  重命名,第二个参数是修改后的名字,目录和文件都可以重命名

 

二十、自定义函数

1、标准函数

标准php发行包中有1000多个标准函数,这些标准函数都是系统内置的,不需要用户自己创建而可以直接使用

<?php    
    echo md5('123456');   //MD5函数对字符串进行加密处理
?>

2、自定义函数

同js  

和js不同的是函数中的变量和外面的变量没关系,如果函数中没有变量不会去全局变量中去找

&符号,按引用传参

<?php   
    $prices =50;
    $tax=0.5;
    function functionPrices($prices,$tax){
        $prices=$prices+$prices*$tax;
        $tax=$tax*$tax;
        echo $prices;
        echo "<br />";
        echo $tax;
        echo "<br />";
    }
    functionPrices($prices,$tax);   //75,0.25
    echo $prices;            //50
    echo "<br />";
    echo $tax;               //0.5
    echo "<br />";
?>
------------------------------------------------------------
<?php   
    $prices =50;
    $tax=0.5;
    function functionPrices(&$prices,$tax){
        $prices=$prices+$prices*$tax;
        $tax=$tax*$tax;
        echo $prices;
        echo "<br />";
        echo $tax;
        echo "<br />";
    }
    functionPrices($prices,$tax);   //75,0.25
    echo $prices;            //75  按引用
    echo "<br />";
    echo $tax;               //0.5
    echo "<br />";
?>

函数调用不区分大小写,变量区分大小写

全局变量

<?php   
    $a=5;
    function fa(){
        global $a;  //设置成全局变量
        $a=2;
    }
    fa();
    echo $a;
?>

使用超级全局变量

<?php   
    $GLOBALS['a']=5;
    function fa(){
        $GLOBALS['a']=2;
    }
    fa();
    echo $a;
?>

3、文件包含

为了创建自己的函数库,要引用文件内的function

include  语句包含并运行指定文件,运行了而已

<?php 
    include 'library/library.php';    //引用这个文件,这个文件中有一个functionPi()函数
    echo functionPi();
?>

如果写两遍,就包含两遍

如果只想包含一次,用include_once();  他会判断之前是否包含

require()和require_once()同include和include_once()一样,只是如果文件不存在不会有警告直接报错停止执行

4、魔法常量

__FILE__ 当前文件名

<?php 
    //__FILE__ 取得路径
    //$file=__FILE__;  
    //echo $file;   
    //一般包含我呢见的时候,建议采用__FILE__ ,这样速度更快
    require dirname(__FILE__).'\demo01.php';
?>

__LINE__  当前行号

__FUNCTION__ 当前函数名

<?php 
    function aaa(){
        return __FUNCTION__;
    }
    echo aaa();
?>

__CLASS__  当前类名

__METHOD__  当前方法名

 

二十三 字符串处理

二十七 正则

三十日期和时间

三十二表单与验证

header();函数重新导向一个url

header('Location:demo02.php');自动跳转,也可以非本地跳转

//在执行header()之前不能有任何浏览器输出,输出任何都不行包括空格,解决方案要启用缓冲输出 ob_start();(在之前写入)

可用于设置页面字符编码  //之前输出还是有上面的内容

<?php 
    header('Content-Type:text/html;charset=gbk');
    echo '编码是GBK';
?>
<form method="post" action="demo02.php">
    姓名:<input type="text" name="userName" />
         <input type="submit" value="提交">
</form>


<?php
   //$userName
   //echo $_POST['userName'];         //将表单中的value值提取出来
   //$HTTP_POST_VARS["userName"]      //不推荐
?>

采用isset()判断变量是否存在,用empty()和==基本一样,并不能说非法提交只能说没有填写内容

<?php
   if(isset($_POST["username"])){
           echo '正常提交';
   }else{
           echo '非法提交';
   }
?>

在输出之前,为了安全性,禁止解析html

<?php
   if(isset($_POST["username"])){
           echo '正常提交';
           $username=$_POST['username'];
           $username=htmlspecialchars($username);  //禁止解析html
           echo $username;
   }else{
           echo '非法提交';
   }
?>

都数据有效性进行验证,可以用trim()

对长度进行限制  if( strlen($username)<2 ){ echo '小于两位';exit; }

判断是否是纯数字is_number();

判断邮箱是否合法,用正则

 完成的例子

<?php
   //设置编码
   header('Content-Type:text/html;charset=utf-8');
   //先验证是否是提交过来的
   if(!isset($_POST['code'])){
        header('Location:demo01.php');
        exit;
   }
   //接收所有数据
   $username=$_POST['username'];
   $password=$_POST['password'];
   $code=$_POST['code'];
   $content=$_POST['content'];
   $email=$_POST['email'];
   //用户名不能小于两位,不能大于10位
    if(strlen($username)<2 || strlen($username)>10){
         echo "<script>alert('用户名不能小于两位,不能大于10位');history.back();</script>";
         exit;
   }  
   //密码不能小于六位
   if(strlen($password)<6){
         echo "<script>alert('密码不能小于六位');history.back();</script>";
         exit;
   }
   //验证码必须是4位,必须是数字
   if(strlen($code)!=4 || !is_numeric($code)){
         echo "<script>alert('验证码必须是4位,必须是数字');history.back();</script>";
         exit;
   }
   //验证电子邮箱
   if(!preg_match('/([\w\.]{2,255})@([\w\-]{1,255}).([a-z]{2,4})/', $email)){
         echo "<script>alert('电子邮箱不合法');history.back();</script>";
         exit;
   }

   echo '用户名'.$username.'<br />';
   echo '电子邮箱'.$email.'<br />';
   echo '个人介绍'.$content;
?>

 三十四、会话控制

cookie:客户端生成

setcookie();创建cookie

$_COOKIE[];读取cookie,超级全局变量,他会慢一拍,第一次刷新只是生成覆盖原来的,但获取的还是之前的,而第二次刷新,才能真正获取到

<?php
    //创建cookie     setcookie();
    setcookie('name','Lynn',time()+(7*24*60*60));   //不设置过期时间,会话结束就没有了,表示未来七天
    echo $_COOKIE['name'];    //读取cookie,使用超级全局变量
?>

用判断检测函数判断cookie是否存在

<?php
    setcookie('name','Lynn',time()+(7*24*60*60));
    if(isset($_COOKIE['name'])){
        echo $_COOKIE['name'];
    }else{
        echo '此用户不存在';
    }
?>

删除cookie

<?php
    setcookie('name','Lynn',time()+(7*24*60*60));

    //第一种删除方法,将这个cookie设置为空
    //setcookie('name','');
    //第二种删除方法,将过期时间调整到之前的时间
    setcookie('name','lynn',time(-1));
    echo $_COOKIE['name'];
?>

cookie有限制,每个大小不能超过4kb,每个web站点能设置的cookie总数不能超过20个,一个浏览器能创建的cookie数量最多为30个,限制在客户端

综合例子

//demo01.php
<form method="post" action="demo02.php">
    姓名<input type="text" name="username" /><br />
    <input type="submit" value="提交" name="code" /><br />
</form>

//demo02.php
<?php
  if(isset($_POST['code']) && isset($_POST['username']) && $_POST['username']=='111'){
      setcookie('name','lee');
      header('Location:demo03.php');
  }else{
      header('Location:demo01.php');
  }
?>

//demo03.php
<?php
  if(isset($_COOKIE['name'])){
      echo '欢迎光临'.$_COOKIE['name'];
  }else{
      echo '非法登陆';
  }
?>

session,只用用session,就必须开启session会话处理  session_start();
创建session,直接采用超级全局变量赋值即可  $_SISSION['']='';取值就直接打印

他和cookie根本都区别是没有慢一拍(因为session是存放在服务器端的),一般存在1440s,如果没有网页任何操作,会自动修改,但可以修改php.ini保存时间,如果关闭浏览器,会自动销毁

判断方法和之前一样 isset();

<?php
  session_start();
  $_SESSION['name']='lee';
  echo $_SESSION['name'];
?>

删除session,不能将字符串设为空,用 unset($_SESSION['']);

unset($_SESSION['name']);
销毁所有的SESSION-------session_destroy();  也慢半拍

 

cookie适用于会员登录,购物车。。。因为不占用服务器资源

session一般用于后台管理登陆,人少,安全性好

 

三十六、上传文件

$_FILE;  超级全局变量(没有括号),是一个数组

<form method="post" action="upload.php" enctype="multipart/form-data">  <!-- 这里是固定写法,否则上传文件失败 -->
     <input type="hidden" name="MAX_FILE_SIZE" value="1000000" /><!-- 隐藏域,定义了上传文件大小的限制,必须定义在上传域前面,不能超过php.ini中的upload_max_filesize设置的值,否则没意义 -->
    上传文件<input type="file" name="userfile" />
    <input type="submit" value="上传" />
</form>

upload.php进行接受

print_r($_FILES); 是一个数组,打印内容如下

Array ( [userfile] => Array ( [name] => 9.供应商选择.png [type] => image/png [tmp_name] => C:\Windows\Temp\php60C1.tmp [error] => 0 [size] => 131967 ) )

其中userfile是上传域的name

  • [userfile][name]:是用户系统中的文件名称
  • [userfile][type]:是文件类型
  • [userfile][tmp_name]:是web服务器中临时存储的位置
  • [userfile][size]:是文件的字节大小
  • [userfile][error]:是错误类型,0没有任何错误

判断文件是否是通过HTTP POST上传的  is_uploaded_file();   通过这个上传后会存在临时文件夹下

<?php
   if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
           echo '上传的临时文件已找到,等待移动中...';
   }else{
           echo '临时文件找不到';
   }
?>
//通过
//is_uploaded_file($_FILES['userfile']['tmp_name']是否有临时文件来判断

移动文件 move_uploaded_file();  将上传文件移动到新位置,如果不合法,会返回false

<?php
   if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
           //移动文件到新位置
       //echo $_FILES['userfile']['tmp_name'];   C:\Windows\Temp\phpDDEF.tmp
       //第一个参数,临时文件地址,第二个是要存放的地址
          move_uploaded_file($_FILES['userfile']['tmp_name'], $_FILES['userfile']['name']);
   }else{
           echo '临时文件找不到';
   }
?>
//demo01.php
<form method="post" action="upload.php" enctype="multipart/form-data">  <!-- 这里是固定写法,否则上传文件失败 -->
     <input type="hidden" name="MAX_FILE_SIZE" value="1000000" /><!-- 隐藏域,定义了上传文件大小的限制,必须定义在上传域前面,不能超过php.ini中的upload_max_filesize设置的值,否则没意义 -->
    上传文件<input type="file" name="userfile" />
    <input type="submit" value="上传" />
</form>

//upload.php
<?php
   if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
           //移动文件到新位置
       //echo $_FILES['userfile']['tmp_name'];   C:\Windows\Temp\phpDDEF.tmp
       //第一个参数,临时文件地址,第二个是要存放的地址
          if(!move_uploaded_file($_FILES['userfile']['tmp_name'], $_FILES['userfile']['name'])){
                echo '移动失败';
                exit;
          }
   }else{
           echo '临时文件找不到';
   }

   echo "<script>alert('上传成功');location.href='demo03.php?url=".$_FILES['userfile']['name']."';</script>"
?>

//demo03.php
<?php
  $url=$_GET['url'];
  echo '<img src="'.$url.'" />';
?>
//用get进行接收

判断error

<?php
   if($_FILES['userfile']['error']>0){
           switch($_FILES['userfile']['error']){
               case 1:echo "上传文件超约定值";
               case 2:echo "上传文件超约定值";
               case 3:echo "部分被上传";
               case 4:echo "没有任何文件被上传";
               break;
           }
           exit;
   }
?>

判断只能允许jpg文件

<?php
   if($_FILES['userfile']['type']!='image/jpeg'){
           echo "<script>alert('本站只允许JPG图片!');history.back();</script>";
exit; }
?>

 浏览器的type值有些不一样,可能是 image/pjpeg,兼容写法

      switch($_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('本站只允许上传图片!');history.back();</script>";
        exit;
       }

//可以这样写
   $fileMimes=array('image/jpeg','image/pjpeg','image/png','image/x-png','image/gif');
   //判断类型是否是数组里的一种
   if(is_array($fileMimes)){
       if(!in_array($_FILES['userfile']['type'],$fileMimes)){
         echo "<script>alert('本站只允许上传图片!');history.back();</script>";
       }
   }

判断文件大小

      //创建一个常量
      define('MAX_SIZE',2000000);
      //判断配置大小
      if($_FILES['userfile']['size'] > MAX_SIZE){
        echo "<script>alert('上传文件不得超过2M');history.back();</script>";
        exit;
      }

如果没有目录,创建目录

      define('URL',dirname(__FILE__).'\uploads'); 
      echo URL;   //D:\AppServ\www\statusphp\uploads
      //判断目录是否存在
      if(!is_dir(URL)){
         mkdir(URL,0777);   //最大权限,0777意思没有这个目录,就创建
      }

三十九、处理图像

一般生成的图像可以是png,jpeg,gif,bmp

第一步,设置文件MIME类型,输出类型,默认为text/html类型为网页类型

设定标头,告诉浏览器要生成的MIME类型,将输出类型改成图像流 ,声明是一张图片

header('Content-Type:image/png');

第二步,创建一个图形区域

  //有两种创建方式  资源类型要加上@防止出错
  $im=imagecreatetruecolor(200, 200);    //返回资源句柄

第三步,在空白图像区域绘制   颜色,线条。。。

  //首先要有一个颜色填充器
  //imagecolorallocate(image, red, green, blue)  填充颜色
  $blue=imagecolorallocate($im, 0, 102, 255);  //创建颜色
  //imagefill(image, x, y, color)   填充颜色
  imagefill($im, 0, 0, $blue);

第四步,在背景上输入内容

  $white=imagecolorallocate($im, 255, 255, 255);
  //imageline 画一条线imageline(image, x1, y1, x2, y2, color)
  imageline($im, 0, 0, 200, 200, $white);
  imageline($im, 200, 0, 0, 200, $white);
  //imagestring 绘制文本imagestring(image, font, x, y, string, color)
  imagestring($im, 5, 0, 0, 'Mr.LEE', $white);

第五步,输出

  imagepng($im)

第六步,清空资源

  imagedestroy($im);

第七步,调用

echo '<img src="Demo01.php" alt="图像" />'

完整

//demo01.php
<?php
  echo '<img src="Demo02.php" alt="图像" />';
?>

//demo02.php
<?php
  //第一步,设置文件MIME类型
  header('Content-Type:image/png');
  //第二步,创建一个图形区域
  //有两种创建方式  资源类型要加上@防止出错
  $im=imagecreatetruecolor(200, 200);    //返回资源句柄
  //第三步,在空白图像区域绘制   颜色,线条。。。
  //首先要有一个颜色填充器
  //imagecolorallocate(image, red, green, blue)  填充颜色
  $blue=imagecolorallocate($im, 0, 102, 255);  //创建颜色
  //imagefill(image, x, y, color)   填充颜色
  imagefill($im, 0, 0, $blue);
  //第四步,绘制内容
  $white=imagecolorallocate($im, 255, 255, 255);
  //imageline 画一条线imageline(image, x1, y1, x2, y2, color)
  imageline($im, 0, 0, 200, 200, $white);
  imageline($im, 200, 0, 0, 200, $white);
  //imagestring 绘制文本imagestring(image, font, x, y, string, color)
  imagestring($im, 5, 0, 0, 'Mr.LEE', $white);


  //第五步,输出到浏览器或文件(最终图形)imagepng()
  imagepng($im);
  //第六步,清空资源
  imagedestroy($im);

?>

例:简单的验证码

<?php
 //简单验证码
 //dechex   --可以将十进制转换成十六进制
 //创建4位验证码
 for($i=0;$i<4;$i++){
     $nmsg.=dechex(mt_rand(0,15));
 }
 
 header('Content-Type:image/png');  //1
 $im=imagecreatetruecolor(75, 25);  //2
 $blue= imagecolorallocate($im, 0, 102, 255);  //3
 $white=imagecolorallocate($im, 255, 255, 255);
 imagefill($im, 0, 0, $blue);
 imagestring($im, 5, 15, 5, $nmsg, $white);  //4
 imagepng($im);  //5
 imagedestroy($im);//6

?>

例:加载已有的图像

<?php
 //简单验证码
 //dechex   --可以将十进制转换成十六进制
 //创建4位验证码
 for($i=0;$i<4;$i++){
     $nmsg.=dechex(mt_rand(0,15));
 }
 
 header('Content-Type:image/png');  //1
 //imagecreatefrompng(filename)  从PNG文件或URL新建一图像,这种方式可以编辑,可以加水印
 define('URL',dirname(__FILE__).'\\');
 $im=imagecreatefromjpeg(URL.'222.jpg');   //2     //里面放路径,插入一张已有的图片
 $white=imagecolorallocate($im, 255, 255, 255);    //3
 imagestring($im, 5, 20, 10, 'mia.com', $white);    //4

 imagejpeg($im);  //5
 imagedestroy($im);//6

?>

例:加载已有字体

<?php

 header('Content-Type:image/png');  //1
 //imagecreatefrompng(filename)  从PNG文件或URL新建一图像,这种方式可以编辑i,可以加水印
 define('URL',dirname(__FILE__).'\\');
 $im=imagecreatefromjpeg(URL.'222.jpg');   //2     //里面放路径,插入一张已有的图片
 $white=imagecolorallocate($im, 255, 255, 255);    //3
 //imagettftext(image, size, angle, x, y, color, fontfile, text) 采用系统提供的字体
 $text=iconv('gbk','utf-8','中文');     //如果是中文,转换格式
 $font='C:\WINDOWS\Fonts\verdana.TTF';
 imagettftext($im, 20, 0, 30, 30, $white, $font, $text);

 imagejpeg($im);  //5
 imagedestroy($im);//6

?>

 例:调整图像尺寸

<?php

 header('Content-Type:image/png');  //1
 define('URL',dirname(__FILE__).'\\');
 list($width,$height)=getimagesize(URL.'222.jpg');   //list把数组中的值赋给一些变量,getimagesize(URL.'222.jpg')返回一个数组
 $new_width=$width*0.7;
 $new_height=$height*0.7;
 $im=imagecreatetruecolor($new_width, $new_height);   //新建一个真彩色图像,宽高是转换以后的
 $im2=imagecreatefromjpeg(URL.'222.jpg');   //由文件或 URL 创建一个新图象
 imagecopyresampled($im, $im2, 0, 0, 0, 0, $width , $height , $new_width , $new_height);    //重采样拷贝部分图像并调整大小


 imagejpeg($im);  //5
 imagedestroy($im);//6
 imagedestroy($im2);

?>

四十二、mysql

1、登陆到MySQL

  • 显示当前数据库的版本号和日期

SELECT VERSION(),CURRENT_DATE();

  • 通过AS关键字设置字段名

SELECT VERSION() AS version;    //可设置中文,通过单引号

  • 通过SELECT 执行返回计算结果

SELECT(20+5)*4;

  • 通过多行实现数据库的使用者和日期(只要不打回车就不会退出)

SELECT

->USER()

->NOW();

  •  通过一行显示数据库(可以用逗号,也可以打两遍)

SELECT USER();SELECT NOW();      SELECT USER(),NOW();

  • 命令取消

\c

  • 窗口退出(ctrl+c)

exit;

MYsql的数据库操作

1)显示当前存在的数据库

SHOW DATABASES;

2)选择你所需要的数据库

USE guest;

3)查看你所选择的数据库

SELECT DATABASE();

4、查看一张表的内容  //可以先通过SHOW TABLES;查看有多少张表

SELECT * FROM guest;    //如果只想显示部分,把星号改成要显示的名字

5)根据数据库设置中文编码

SET NAMES gbk;    //set names utf8;

6)创建一个数据库

CREATE DATABASE book;

7)在数据库里创建一张表

>CREATE TABLE uses(

>nusername VARCHAR(20),   //设置不能为空(姓名采用verchar可变字节)

>sex CHAR(1),         //性别 使用char

>birth DATETIME);   //年龄 使用datetime类型

8)显示表的结构

DESCRIBE uses;

9)给表插入一条数据

INSERT INTO uses (username,sex,birth) VALUES('Lee','X',NOW());  

10)筛选指定的数据

SELECT * FROM uses WHERE username = 'Lee';

11)修改指定的数据

UPDATE uses SET sex='男' WHERE username= 'Lee';

12)删除指定的数据

DELETE FROM uses WHERE sex='1';

13)按照指定的顺序排序

SELECT * FROM uses ORDER BY birth DESC;   //按照时间的倒序

SELECT * FROM uses ORDER BY birth ASC;   //按照时间的正序

14)删除指定的表

DROP TABLE uses;

15)删除指定数据库

DROP DATABASE books;

 

MySQL常用函数

 例:

创建一个班级数据库,里面包含一张班级表 grade,包含编号(id)、姓名(name)、邮件(email)、评分(point)、注册日期(regdate)

CREATE DATABASE school;      //创建表
USE school;     //锁定表
mysql> CREATE TABLE grade(
    -> id TINYINT(2) UNSIGNED NOT NULL AUTO_INCREMENT,    //无符号,整数2位,从1开始
    -> name VARCHAR(20) NOT NULL,
    -> email VARCHAR(40),
    -> point TINYINT(3) UNSIGNED NOT NULL,
    -> regdate DATETIME NOT NULL,
    -> PRIMARY KEY(id)    //id为主键,让id值唯一,不得重复
    -> );                                      //创建表

DESC grade;        // 查看表

给这个班级表grade新增5-10条学员记录

mysql> INSERT INTO grade(name,email,point,regdate) VALUES('lee','yc60',95,NOW());

查看班级的字段

mysql> SELECT id,name,email FROM grade;

..................

mysql地址:http://localhost:8082/phpmyadmin/