PHP基础巩固笔记

1、变量   --122

   1.1类型  

   1.2变量的检测

   1.3类型检测

   1.4变量的打印

   1.5类型的转换

   1.6变量赋值

   1.7变量销毁

   1.8动态变量名

   1.9面试常见问题

2.运算符  --239

   2.1算术符

   2.2比较运算符

   2.3三元运算符

   2.4逻辑运算符

   2.5递增递减运算符

   2.6字符串运算符

   2.7赋值运算符

3.控制结构  --379

   3.1选择结构

   3.2循环结构

   3.3实操训练

4、函数   --548

     4.1函数概念

     4.2函数的定义格式

     4.3函数的命名规范

     4.4函数的调用过程和返回值

     4.5函数参数的传值方式

     4.6函数中变量的作用域

     4.7动态调用函数

5、日期时间函数  --665

   5.1获取事件戳

      time()

      microtime()

6、格式化  --707

    date()

    gmdate()

7、解析检测日期  --727

   mktime()

   strtotime()

   checkdate() 

8、字符串    --747

   8.1字符串的定义方式

   8.2单双引号对比:转义 解析 速度

   8.3字符串常用函数分类

       字符串长度函数

       查找字符位置函数

       字符串替换函数

       提取字符串函数(双字节)

       分割,链接,反转函数

       去除,增加空格函数

       HTML代码/数据库安全处理有关函数

       比较字符函数

       字符大小写转换函数

   8.4如何选择单双引号

9、数组讲解    --829

   9.1数组的特点及声明方式

   9.2索引数组,关联数组,多维数组

   9.3键的规则

   9.4操作数组单元

   9.5循环数组

   9.6游标操作

   9.7常用函数及面试题

10、超级全局变量   --1030

    $_GET

    $_POST

    $_REQUEST


    $_SESSION

    $_COOKIE

    $_FILES


    $_ENV

    $_SERVER


    $GLOBALS


11、常量  --1067

    11.1意义

    11.2声明

    11.3特点

    11.4检测

    11.5案例

    11.6声明常量后,该常量在页面的任意处都可以访问


12、文件包含  --1102 

    作用

    include 

    include_once


    require

    require_once


    include 和require的区别


13、位运算   --1132


14、进制详解  --1163


15、位运算与PHP错误报告设置   --1188


16、浮点数并不精确   --1214


17、逻辑运算的短路特性与运算符优先级   --1230


18、递归   --1273

   18.1递归概念

   18.2递归技巧与案列

   18.3递归与静态变量

   18.4递归练习题

19、程序练习  --1334

   19.1 IP,域名,DNS,host概念

   19.2 apache安装与虚拟主机配置

   19.3 整合PHP

   19.4 安装myaql

20、mysql入门语句  --1431


21、留言提交到mysql   --1481


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

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

1、变量

    1.1类型

            整型、浮点型、字符串、布尔、数组、对象、NULL、资源


             NULL:是指没有值,也没有类型,它的值就是null -->$a = null;

                 形象的称为:只有名字的盒子,盒子里没有内容,不知道盒子是用来做什么的

                 用途:变量初始化,比较的时候等等

    

    1.2变量的检测

            判断变量是否存在:

                            isset可以检测变量是否存在,对于NULL,isset也返回false

                            对于值为零 $a = ''; 的变量也是存在的

            样式为:

                   if(isset($b)){

                      echo '变量b存在';

                   } else {

                       echo '变量b不存在';

                   }

    

    1.3类型检测

            gettype();获取变量类型

                样式为:

                        $a = '1';

                        echo gettype($a);

            判断是否我们想要的类型:is_int ,is_float , is_array ...

                样式为:

                        if(is_int($a)){

                           echo 'a是整型';

                        }  else{ 

                            echo 'a不是整型';

                        }

            注意:$a = 23; --> 这是整型

                  $a = '23';--> 这是字符串


    1.4变量的打印

            常用:

                echo: 方便打印字符串、数字

                print_r: 方便打印数组,会打印数字结构

                var_dump: 方便打所有类型,调试时方便打印:变量的类型及其值

            

            样式为:

                $b = arry(1,2,'3');

                var_dump($b);   -->对打印类型及其值


    1.5类型的转换

             PHP中,变量的类型是可以随时转变的,非常灵活,最常见的是字符串与数字的转换

             或是数字/字符串 -> 布尔值的转换

             字符串到数字的转换:

                             $a = 'world12.3hello';

                             $a = $a + 3;  -->规律:从左到右截取,直到碰到不合法的数字,截取出来的部分转换成数字

                             var_dump($a);  -->打印出:3 因为碰到world就已经不和法,所以后面的无法截取转换成数字

              

             注意:字符串的拼接是用点 --> .  列如:$a = $a . 'hello';

             数字转换为字符串:

                             $a = 123;

                             $a = $a . 'hello';

                             echo $a;  -->打印出:123hello

             到布尔值的判断,以下值,都被当成布尔的假,而其它值,都被当成布尔型的真

                   如: '' , '0' , 0 , 0.0 , false , NULL , array();

                   列如:

                        if('' == false) {

                          echo '字符串果然假';   -->打印出字符串果然假

                        }


    1.6变量赋值

            传值赋值,引用赋值

            变量赋值之传值赋值:

                         样式为: $li = 29;

                                  $wang = 23;

                                  $wang = $li;


                                  var_dump($li,$wang); -->打印出:29,29 

                                  $wang = 'w';

                                  var_dump($li,$wang);打印出:29,29 , w

            变量赋值之引用赋值:两个变量指向同一个盒子(同看一台电视),一个人修改盒子就会影响另一个人的盒子

                         样式为: $li = 29;

                                  $wang = 23;


                                  $wang = &$li;


                                  var_dump($li,$wang);  -->打印 29 ,29

                                  

                                  $wang = 'w';

                                  var_dump($li,$wang); -->打印 w , w

    

    1.7变量销毁:unset

                样式1为:一个人看一部电视

                       $a = 99;

                       unset($a);

                       if(isset($a)){

                          echo 'a存在';

                       } else {

                           echo 'a不存在';   -->打印a不存在

                       }

                样式2为:两个人同看一部电视,一个人不在,另一个人还在看电视

                        $li = 29;

                        $wang = &$li;


                        var_dump($li,$wang) -->29  29

                        $wang = 20;

                        var_dump($li,$wang) -->20  20


                        unset($li);

                        var_dump($li,$wang); -->null 20


    1.8动态变量名:用变量的值再做变量的名,如$$a

                 样式为:

                        $liubei = '河北人';

                        $laoda = 'liubei';

                        $paihang = 'laodao';


                        echo $laoda , $$laoda , $$$paihang; -->liubei  河北人  河北人

    

    1.9面试常见问题:

                    变量的类型

                    传值赋值和引用赋值的区别


2.运算符

   2.1算术符

          样式1为:

                  $a = 10;

                  $b = 0;

                  echo $a / $b; -->除数不能为0 

          样式2为:

                  $a = 320000000000;

                  $b = 320000000000;

                  $c = $a + $b;

                  var_dump($c);  -->当数量太大溢出时,有可能会得到浮点数

          样式3为:

                   $a = -10;

                   $b = -3;

                   echo $a % $b;  --> -1 注意:在取模算法时,结果的正负仅取决于被除数 -10


    2.2比较运算符 :凡运算必有运算结果,比较运算符的运算结果是布尔型值

          样式1为:

                  $a = 5;

                  $b = 3;

                  $c = ($a > $b);

                  var_dump($c);  -->布尔值:bool(true)

          样式2为:

                  $c = ($a == $b);

                  var_dump($c);  -->布尔值:bool(false)

          样式3为:

                  $a = 5;

                  $B = '5';

                  var_dump($a == $b); -->布尔值:bool(true)

                  var_dump($a === $b); -->布尔值:bool(false)

                  注意:===  3个等号要求类型相同,且值相等

          样式4为:

                  $res = 0; // 1 2 3 false

                  if($res === false){

                     echo '没找到';

                  } else {

                     echo '找到';    --> 找到

                  }      

          面试题:

                 “===”是什么?试举一个“==”是真但“===”

          

                   与==相比,===,不仅要求值相等,还要求变量类型也相等.

                   比如

                   echo false==0?'等于':'不等于'; // 等于

                   echo false===0?"等于":'不等于'; //不等于


                   例: 查找字符串'abcde'中有没某个指定字母(不区分大小写)


                   $str = 'abcdef';


                   echo stripos($str,'z')!=false?'有':'没有';

                   echo stripos($str,'e')!=false?'有':'没有';

                   echo stripos($str,'a')!=false?'有':'没有';


  2.3三元运算符

            给定2个数,找比较大的数

            样式1为:

                  $a = 15;

                  $b = 10;

                  $c = null;


                  if($a >= $b){

                      $c = $a;

                  }  else {

                      $c = $b;

                  }


                  var_dump($c);  -->15

            样式2为:

                  $a = 15;

                  $b = 10;

                  $c = null;  

                  $c = ($a>=$b? $a : $b); 三元运算符:  ? -->前面的判断真假 ,如果为真则取$a ,为假则取$b

                  var_dump($c);  -->15

            利用3元运算符,求3个数中最大的数 -->需要2个3元运算符嵌套


   2.4逻辑运算符

            有房有车,才嫁

            样式1为:

                    $house = true;

                    $car = true;

                    if($house === true){

                       if($car === true){

                           echo '嫁';

                       }  else '不嫁';

                    }   else {

                            echo '不嫁';

                    }

            样式2为: 

                    注意:&&  -->并且

                    $house = true;

                    $car = true;

                    if( ($house==true) && ($car == ture) ){

                          echo '嫁';

                    }  else {

                          echo '不嫁';

                    }

            有房或有车都行

            样式1为:

                    注意: || -->或者

                    $house = true;

                    $car = true;

                    if($house || $car){

                       echo '嫁';

                    }  else {

                         echo '不嫁';

                    }


   2.5递增递减运算符

         样式1为:

                 $b = 5

                 $a = $b++;  ++的效果  --> 1.返回b本身的值,2.把b的值加1

                 var_dump($a,$b);  -->  5 6 

          样式2为:

                  $b = 5

                  $a = $b--;  --的效果  -->1.把b的值减1 2.返回新值

                  var_dump($a,$b);  -->  5 4 

          样式3为:

                  $b = 5

                  $a = ++$b;  ++的效果  -->1.把b的值加1 2.返回新值

                  var_dump($a,$b);  -->  6 6 

          样式4为:

                  $b = 5

                  $a = --$b;  --的效果  -->1.把b的值减1 2.返回新值

                  var_dump($a,$b);  -->  4 4 


    2.6字符串运算符 : .  -->字符串拼接 ,可以把整型当字符串拼接起来

           样式1为:

                  $a = 'hello';

                  $b = 'world';

                  $c = $a . $b;

                  var_dump($c);  -->hellworld

            样式2为:

                  $a = 'hello';

                  $b = 'world';

                  $c = $a . $b;

                  $d = 112;

                  $c = $c . $d;

                  var_dump($c);  -->hellworld112

            注意:下面哪个语句运行速度快?

                  $a = 'hello';

                  $b = 'world';

                  echo $a , $b;  -->速度较快,因为:两个木棍同时一起扔

                  echo $a . $b; -->速度较慢,因为:两个木棍拼接起来了才扔


      2.7赋值运算符

            样式1为:

                   $a = 3; -->这是一个赋值运算 ,有2个作用,1是把3赋给$a ,2是返回运算结果,即3

            样式2为:

                    $a = 3;

                    $res = ($a = 3);

                    var_dump($res); --> 3



3.控制结构

    3.1选择结构

       样式1为:判断星期几

             $todat = 1;

             if($today ==1){

                echo '今天星期1';

             }  else if ($today == 2){

                echo '今天星期2';

             } else if ($today == 3){

                echo '今天星期3';

             } else if ($today == 4){

                echo '今天星期4';

             } else if ($today == 5){

                echo '今天星期5';

             } else if ($today == 6){

                echo '今天星期6';

             } else if ($today == 7){

                echo '今天星期7';

             }  else  {

                echo '你来自火星';

             }

    样式2为:switch ()  适合用在验证多个可能的值,不适合用在判断范围

            $todat = 1;

            switch ($today){

               case 1;

                   echo '今天星期1';

                   break;  -->到为真是,breadk会切断后面的值,否则后面是值也会显示出来


               case 2;

                   echo '今天星期2';

                   break;


               case 3;

                   echo '今天星期3';

                   break;


              case 4;

                   echo '今天星期4';

                   break;


              case 5;

                   echo '今天星期5';

                   break;


              case 6;

                   echo '今天星期6';

                   break;


              case7;

                   echo '今天星期7';

                   break;


              default:

                   echo '你来自火星';

            }

    

    3.2循环结构

      whlie(){}

           样式1为:先算,再工作

                   $i = 0;

                   whlie($i++<=10){

                       echo $i;   -->1 2 3 4  ... 10 11

                   }

            样式2为:

                   $i = 0;

                   whlie($i<=10){

                       echo $i++;   -->1 2 3 4  ...  9 10 

                   }

      do while  -->先工作,再算

            样式1为:

                    $i = 100;

                    do {

                        echo '我照样执行一次';

                    } while($i<10); 


      for 

        注意:循环的一般要素:初始化(1),判断(2),执行体(3),修改变量(4)

            样式1为:

                    for(1 ; 2 ; 4){

                       3

                    }

            样式2为:  注意:$i-=3  --> $i = $i - 3的简写;

                    for($i=50; $i>=3; $i-=3 ) {  

                         echo '喝酒';

                    }

            样式3为:多个初始化,判断 ~ ~

                   for($i=1,$j=5;$i<=5 && $j>=1;$i++,$j++){

                      echo $i,'~',$j,'<br />';

                   }

     break/continue

            样式1为:

                    for ($i=0;$i < 10 ; $i++){

                         if($i == 4){

                            continue;   -->直接把4删除了

                         }


                         echo $i,'<br />';

                    }

            样式2为:

                    for ($i=0;$i < 10 ; $i++){

                         if($i == 4){

                            echo $i;

                            break; -->把4后面是数字删掉

                         } else{

                             echo $i,'<br />';

                         }      

                    }

3.3实操训练:

1、奖金利润提成,利润(I)低于或等于10万元时,奖金可提 10%;利润高于10万时,低于20万时,低于10万元时的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发奖金总数?

程序分析:利用 if else 做范围的讨论

$i=60;

if ($i<=10) {

        $reward =0.1*$i;

}else if ($i<=20 && $i>10) {

        $reward = 1+($i-10)*0.075;

}else if ($i<=40 && $i>20) {

        $reward = 1+0.75+($i-20)*0.05;

}else if ($i<=60 && $i>40) {

        $reward = 1+0.75+1+($i-40)*0.03;

}else if ($i <=100 && $i>60){

        $reward = 1+0.75+1+0.6+($i-60)*0.015;

}else if ($i>=100){

        $reward = 1+0.75+1+0.6+0.6+($i-100)*0.01;

}

echo $reward;


2、输入三个整数 x,y,z ,找出最大的数

$x = 1;

$y = 2;

$z = 3;

$a = ($x>$y? $x : $y);

$a = ($a>$z? $a : $z);

var_dump($a);


3、打印出所有的“水仙花数” 。所谓“水仙花数” 是指一个三位数 ,且个位数字立方和等于该数本身,例如:153 是一个“水仙花数” ,因为 153 = 1 的三次方 + 5 的三次方 +3的三次方。

程序分析:利用for 循环控制100-999个数,每个数分解出个位,十位,百位。

for ($x=1; $x <= 9; $x++) { 

  for ($y=0; $y <=9 ; $y++) { 

    for ($z=0; $z <=9 ; $z++) { 

      if ($x*$x*$x + $y*$y*$y + $z*$z*$z == 100*$x + 10*$y +$z) {

        echo $x,'&nbsp',$y,'&nbsp',$z,'<br />';

      }

    }

  }

}


4、猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,有多吃了一个,第二天早上又将剩下的桃子吃掉了一半,有多吃了一个,以后每天早上吃了前一天剩下的一半零一个,到第10天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少?

程序分析:采取逆向思维的方法,从后往前推断

for ($t=1,$tian=9; $tian>=1 ; $tian--) { 

  $t=($t+1)*2;

  echo '猴子第',$tian,'天,还有',$t,'个桃子','<br />';

}


5、有一分数序列:2/1 , 3/2 , 5/3 , 8/5 ,13/8 , 21/13 ...求出这个数列的前20项之和 

for ($m=2,$z=1,$a=0,$s=1; $s<=20 ; $s++) { 

   $a=$a+$m/$z;

   $m =$z+$m;

   $z =$m-$z;

}

echo $a,'<br />';


6、假设某人有100,000现金,没经过一次路口需要进行一次交费,交费规则为当他现金大于50,000时每次需要交5%,如果现金小于等于50,000每次交5,000。请写一程序此人可以经过多次这个路口。


for ($i=100000,$cnt=0; $>=5000 ; ) {    --> $cnt=0  走的次数

     $cnt += 1;

     if($i > 5000){

       $i *=0.095;

     }  else {

           $i -= 5000;

     }


     echo '第' , $cnt , '次过桥,剩下' , $i ,'元<br />';

}    



7、打印九九乘法表

for($i=1;$i<=9;$i++){

    for($b=1;$b<=$i;$b++){

        echo $i,'*',$b,'=',$i*$b,'&nbsp';

}

echo '<br />';

}


8、有鸡翁一,值钱五,鸡母一,值钱三;鸡雏三,值钱一;百钱买鸡白只,问鸡翁、鸡母、鸡雏几何?

for ($g=1;$g<20 ; $g++) { 

        for ($m=1; $m < 35; $m++) { 

                for ($x=1; $x <300 ; $x++) { 

                        if(5*$g+3*$m+$x/3==100 && $g+$m+$x==100) {

                                echo '公鸡',$g,'母鸡',$m,'小鸡',$x,'<br />';

                        }

                }

        }

}


9、求1到100内的素数

for ($a=1; $a <=100 ; $a++) { 

  $num =0;

  for ($b=1; $b<$a ; $b++) { 

    if ($a%$b ==0) {

      $num++;

    }

  }

  if ($num ==1) {

    echo $a,'<br />';

  }

}


10、一种羊 第二年生一个小羊 第四年生一个小羊 第五年死  20年后有多少羊?

$arr = array('0'=>1,'1'=> 0,'2'=>0,'3'=>0,'4'=>0);

for ($i=1; $i <=20 ; $i++) { 

        $num = $arr[1]+$arr[3];

        array_unshift($arr, $num);

        array_pop($arr);

}

echo array_sum($arr);

?>


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

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


4.1函数概念

   一段封装好的代码,可以随时调用 

   样式1为:

             function t1() {

                  echo 'hello';

                  echo 'world';

                  echo '<br />';

             }

             t1();  -->体现了代码的封装效果

    样式2为:

             function he($a,$b) {

                   $c = $a +$b;

                   echo $c;

             }


             he(3,4);  -->体现了函数能帮忙运算

     样式3为:

              function h2($a,$b) {

                  $c = $a + $b;

                  return $c;

              }

                  $d = h2(4,5);   -->通过返回值形式拿到结果

                  echo $d;  

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

4.2函数的定义格式

   样式1为:

            function 函数名([参数1,参数2..N]) {   [] -->里面的参数可不写

                    return;   -->执行语句

            }

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

4.3函数的命名规范

   对于函数,命名规则和变量是一样的,但是函数不区分大小写

   样式1为:

           echo H2(2,4)

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

4.4函数的调用过程和返回值

   样式1为:

           function t(){

              echo 'hello';  -->没有调用函数,无法显示 ,函数不调用,就无法运行

           }

    执行语句的流程:

                   样式2为:

                            function t(){

                              echo 'hello';

                            }

                               echo 'a';  -->第一步

                               t();   -->第二步:碰到函数调用时,PHP脚本就控制权就会跑到 function t() 执行完

                               echo 'b';  --> 调用函数完后,回到原地,再执行第三部


                    注意:函数调用时,代码执行权进入函数,当函数所有语句执行完毕,函数结束,交回执行权

                          或者函数碰到return 语句时,函数返回,交回执行权

                    样式3为:

                             function t2(){

                                  echo '1';

                                  echo '2';

                                  echo '3';

                                  return 'good';  -->悄悄返回,但是没有echo

                                  echo '4';

                                  echo '5';

                                  return 'study';

                             }


                             $res = t2(); --> 1 2 3 

                     注意:函数返回,要么不返回,要么只能返回一个值

                     样式4为:

                             function t3(){

                                return 'hello' , 'world';   -->错误语句,不能同时返回两个值

                             }

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

4.5函数参数的传值方式

   样式1为:

            function t($a) {

               $a +=1;

            }


            $a = 3;

            t($a);

            echo $a;  --3  ,因为function里的 $a(属于函数内部的) 跟外面的 $a = 3 是没有关系的

    样式2为:

            function t($a) {

               $a +=1;

            }


            $b = 3;

            t($b);  --> 传参$b,相当于$b 的值,赋给$a ,而$a 是函数内部的值,怎么变,和外界无关,体现了函数的封装性

            echo $a; 

     样式3为:

             function t2($a){

                 $a +=1;

             }

             $b = 5;

             t2($b);

             echo $b; -->6    ;$a和$b 指向了同一个地址。

             注意:这种传参方式是不推荐的,因为函数内部的语句,影响到了外部的变量,破坏了函数的封装性

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

4.6函数中变量的作用域

     在PHP的页面中声明的变量,叫做“全局变量”,函数内的变量,叫“局部变量”;各自有各自的作用域

     样式1为:

             $a = 12;  -->全局变量

             function t(){

                 $b = 22;  -->局部变量

                 echo $a;

             }

             t();

             echo $b;

      样式2为:声明全局变量  global -->可随意找到变量

              $a = 22;

              function t2(){

                  global $a;

                  echo $a;

              }


              t2();  -->  22

              注意:这种传参方式是不推荐的,因为函数内部的语句,影响到了外部的变量,破坏了函数的封装性

        样式3为:超级全局变量,在页面的任何部分,包括函数,方法等,都可以直接访问

                 function t3(){

                      print_r($_GET);

                 }


                 t3();


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

4.7动态调用函数

   样式1为:可以用变量的值当作函数,并调用函数

            function wel(){

                echo 'welcome';

            }


            function beat(){

                echo 'beat';

            }


            $heart = 'wel';


            $heart();  -->$heart 的值是welcome,因为调用执行wel();


     注意:变量可重名,但是函数重名就会报错

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

5、日期时间函数

   5.1获取时间戳

      time()

      样式1为:

              echo time();  -->返回时间戳

              注意:时间戳是指1970 01 01 00:00:00到现在这一瞬间经过的秒数

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

      microtime()    -->microtime作用:检测程序运行速度

      样式1为:

              print_r(microtime());-->返回时间戳同时还有微秒

      样式2为:

              print_r(microtime(true));-->返回单位是微秒时间戳    

      样式3为:

               $start = microtime(true);

               for($i=1;$i<10000000;$i++){

                   $tmp = 13333333/234;

               }


               $end = microtime(true);

               echo $end - $start;  -->检测13333333/234的运行效率

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

6、时间戳格式化

    date()

    样式1为:

            $time = time();

            echo date('Y-m-d 星期N h:i:s' , $time);  -->2014-9-14 星期日 22:33:24

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

    gmdate()

    样式1为:

            $time = time();

            echo date('Y-m-d 星期N h:i:s' , 0); -->1970-01-01 星期四 08:00:00 格林威治和北京的时区差别

    样式2为:

            $time = time();

            echo gmdate('Y-m-d 星期N h:i:s' , 0);  -->1970-01-01 星期四 12:00:00 格林威治时区的时间

            注意:h:i:s 小写h 是12小时制,大写的24小时制

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

7、解析检测日期

   mktime()

   样式1为:

           mktime(14,35,20,09,14,2014);  -->计算得到是时间戳

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

   strtotime()

   样式1为:

           echo strtotime('now'); -->计算现在的时间戳

   样式2为:

           echo strtotime('now +1 day'); -->计算明天的时间戳

   样式2为:

           echo strtotime('now -1 day'); -->计算昨天的时间戳

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

   checkdate() :检测日期是否合法

   样式1为:

           var_dump(checkdate(2.29,2000)); -->返回布尔值true/false


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

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


8.1字符串的定义方式

    样式1为:

            $a = 'hello';

            $b = 'hello';

            echo $a , '<br />' , $b;

    样式2为:heredoc nowdoc 定义大段文本

            $c = <<<HTML  -->可自定义

            -------可随意写内容

            -------可随意写内容

            HTML; -->可自定义

    样式3为:

            $d = <<<'HTML'  -->nowdoc多了一个单引号

            -------可随意写内容

            -------可随意写内容

            HTML;

            echo $d;

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

8.2单双引号对比: 转义 解析 速度

     单引号转义:

     样式1为:$a = '\'';  

              echo $a;  -->echo: '

     样式2为:$a = '\\';  

              echo $a;  -->echo: \

     双单引号转义:

     样式3为:$a = "\"";  

              echo $a;  -->echo: '

      注意:双引号里的变量negotiations解析

      样式4为:

              $age = 29;

              $str1 = '李明今年 $age 岁';

              $str2 = "李明今年 $age 岁";

              echo $str1;  --->李明今年 $age 岁

              echo $str2;  --->李明今年 29 岁

      注意:速度比较

                    单引号不需要分析串内有无变量,需要转义的内容少,因此速度比较快

                    优先使用单引号

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

   8.3字符串常用函数分类

       字符串长度函数:strlen

       样式1为:按字节计算

                $a = 'hello';

                echo strlen($a);  -->5

        样式2为:按字节计算

                $b = '中国';

                echo strlen($b);  -->6 因为:utf8 编码,中文占3个字节

        样式3为:按字符来计算

                 $c = '中国';

                 echo mb_strlen($c, 'utf-8');   -->2  'utf-8'是告诉计算机我使用的编码类型

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

       查找字符位置函数:strpos


       样式1为:

                $str = 'abcde';

                $char = 'a';


                if(strpos($str, $char) !==false){

                     echo '含有' , $char,'<br />';

                }  else {

                     echo '不含有' , $char,'<br />';

                }


       字符串替换函数

       样式1为:

                $str = 'hi, fuck';

                echo str_replace('fuck','f**k',$str);  -->hi, f**k

        样式2为:替换一批字符串

                $str = '男人,女人,男孩,女孩';

                echo strtr($str, array('男'=>'女' , '女'=>'男'));

       提取字符串函数(双字节)

       样式1为:substr()

                $str = 'tommrow is another day';

                echo substr($str, 0 ,3);   -->tom  0开始。截3个字符

                echo substr($str, 0 ,-3);   --> mrow is another day -3代表结束位置,后往前数

                echo substr($str,-10 ,-3);   -->nother  

       分割,链接,反转函数

       样式1为:

               $str = 'tech,linux,mysql';

               $arr = explode(',',$str);  

               print_r($arr);   -->把字符串拆分数组

       样式2为:

               $str = 'tech,linux,mysql';

               echo implode($arr , ',');  -->把数组合并为字符串

       去除,增加空格函数

       HTML代码/数据库安全处理有关函数

       比较字符函数

       字符大小写转换函数

把以上函数练习3次以上

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

9、数组讲解

   9.1数组的特点及声明方式

      数组是一种复合数据,可以装下多个值,每个值用不同的键来区分

      样式1为:声明语法

              $arr = array('001'=>'春','002'=>'夏','003'=>'秋','004'=>'冬');

              print_r($arr);

      特点:放在独特的柜子里

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

   9.2索引数组,关联数组,多维数组

      样式1为:索引数组

              $arr = array(0=>'东',1=>'南',2=>'西');  -->键不必有特殊意义,纯数字,注意突出内容

      样式2为:关联数组

              $stu = array('name'=>'小华' , 'age'=>30); -->字符串做键,一般能体现该单元的内容,如age ->年龄

      样式3为:多维数组

              $arr = array(0=>'a' , 1=>array('stu'=>'li','bag'=>array('数学','语文')));

              print_r($arr);

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

   9.3键的规则

      样式1为:如果不声明键,会从0 1 2..递增来生成键

              $arr = array('a','b','c');

              print_r($arr);

      样式2为:如果已经存在某1个或几个数字键,则从最大的数字键,递增生成数字键

               $arr = array(3=>'a' , 'b', 'c');

                print_r($arr);

      样式3为:如果键声明重复了,后面的值覆盖前面的值

              $arr = array(3=>'a' , 3=>'b' , 4=>'c');

              print_r($arr);

      样式4为:键可以是整数,也可以是字符串

               $arr = array(2=>'布' , 2.3=>'尔' , '2.5'=>'教' , '2x'=>'育');

               print_r($arr);

      注意:浮点数转成整数,如果字符串的内容恰好是整数,也理解成整数

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

   9.4操作数组单元

      样式1为:增1个单元

               $arr = array('a','b','c');

               $arr[] = 'd';

               $arr[99] = 'e';

               print_r($arr);  -->  a b c d e 

      样式2为:读取单元值

              $arr = array('a','b','c','d');

              echo $arr[3];  -->d

      样式3为:多维数组读取

              $arr = array('a','b','c');

              $arr[] = 'd';

              $arr[99] = 'e';

              $arr['stu'] = array('li' , 'wang');

              echo $arr['stu'][1];  -->wang

      样式4为:改单元值

              $arr = array('a','b','c');

              $arr[0] = 'A';   a --> A 

      样式5为:删除某个单元值

               $arr = array('a','b','c');

               unset($arr[1]);   -->删除 b

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

   9.5循环数组

      样式1为:

               for 循环,对于0..1.2...递增的索引数组

               $arr = array('a','b','c','d','e','f');

               for($key = 0;$key<count($arr);$key++) {    --->count($arr)读取$arr数组单元的个数

                   echo $arr[$key], '<br />';

               }

      样式2为:关联数组

               $arr = $array('age'=>28,'height'=>180,'name'=>'list');

               foreach ($arr as $key =>$value) {   --把age赋予$key  ,把28赋予$value (value可自定义)

                    echo $key , '~', $value , '<br />';

               }

      样式3为:选取数组中的值

               $arr = $array('age'=>28,'height'=>180,'name'=>'list');

               foreach($arr as $v) {

                   echo $v;  --> 28 180 list

               }

      样式4为:把下面数组的每个单元值变成原来的2倍

              $stu = array('lisi'=>3,'wang'=>4,'zhangsan'=>6);


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

   9.6游标操作:current()  next()  end() reset()  prev() 

      样式1为:current() -->取当前游标指向的数组单元的值

              $arr = array('a','b','c');

              echo current($arr);  -->a

      样式2为:next()  -->把数组的游标往后移

              $arr = array('a','b','c');

              next($arr);

              echo current($arr);  -->b

      样式3为:end()  -->把数组游标移到最后

              $arr = array('a','b','c');

              end($arr);

              echo current($arr);  -->c

      样式4为:reset()  -->把数组游标移复位

              $arr = array('a','b','c');

              reset($arr);

              echo current($arr);  -->a

      样式5为:prev()   -->把数组游标前移

              $arr = array('a','b','c');

              end($arr);

              echo current($arr);  -->c

              prev($arr);

              echo current($arr);  -->b

      样式6为:整合运用

              $arr = array('a','b','c');

              while($v = current($arr)) {

                    echo $v;

                    next($arr);  -->a b c

               }

      样式7为:上面的漏洞

               $arr = array(1,3,4,5,false,6,8,9,);

               while($v = current($arr)) {

                    echo $v;

                    next($arr);  --> 1,3,4,5  

               }  -->因为while碰到了false 就结束了 ,这种情况可以用数组游标的each 函数来处理

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

   9.7常用函数及面试题 

      常用函数:以下没个练习3次以上

               count()

               array_key_exists()

               in_array()

               array_change_key_case()

               array_count_values()

               array_fill()

               array_filter()

               array-values()

               array_keys()

               array_push()

               array_pop()

               array_shift()

               array_unshift()

               Sort()

               Resort()

               Usort()

               asort()

               ksort()

               natsort()

               natcasesort()

               array_merge()

               array_merge_recursive()

               array_diff()

               array_diff_assoc()

               array_intersect()

               array_intersect_assco()

               array_flip()

               array_unque()

               array_reverse()

               array_sum()

               shuffle()

               Range()

               Srand()

               array_rand()

      样式1为:

              $arr = array('a'=>'张龙' , 'b'=>'赵虎' , 'c'=>NULL);


              if( isset($arr['c']) ) {

                  echo 'c号单元存在';

              }  else {

                  echo 'c号单元不存在';  --c号单元不存在  ,实际上是存在的

              }

      样式2为:判断数组单元键是否存在 array_key_exists()

              $arr = array('a'=>'张龙' , 'b'=>'赵虎' , 'c'=>NULL);

               if( arrary_key_exists('c',$arr) ) {

                  echo 'c号单元存在';

              }  else {

                  echo 'c号单元不存在';  --c号单元存在 

              }

      样式3为:判断数组单元值是否存在in_array()

              $arr = array('a'=>'张龙' , 'b'=>'赵虎' , 'c'=>NULL);

               if( in_array('赵虎',$arr) ) {

                  echo '赵虎存在';

              }  else {

                  echo '赵虎不存在';  --赵虎存在 

              }

      样式4为:往数组尾部加入单元,并返回操作后的数组长度

             $arr = array('a' , 'b' , 'c' , 'd');

             echo array_push($arr, 'e');  -->5

      样式5为:弹出尾部的单元,并显示弹出的单元

              $arr = array('a' , 'b' , 'c' , 'd');

              echo array_pop($arr);  --> e

              echo array_pop($arr);  --> d

      样式6为:数组头部增加单元,并返回操作后的数组长度

               $arr = array('a' , 'b' , 'c' , 'd');

               echo array_unshift($arr, 'z');   -->z a b c d

       样式7为:弹出头部单元

                $arr = array('a' , 'b' , 'c' , 'd');

                echo array_shift($arr);

        练习题1:

                一种羊 第二年生一个小羊 第四年生一个小羊 第五年死  20年后有多少羊?

                (计算机是从0开始算起)

                $arr = array(1, 0, 0, 0, 0);

                for($i=1;$i<=20;$i++) {

                   $tmp = $arr[1] + $arr[3];

                   array_unshift($arr, $tmp);

                   array_pop($arr);

                }


                echo array_sum($arr);  -->178

        练习题2:

                n只猴子围坐成一个圈,按顺时针放心从1到n编号,然后从1号开始沿顺时针方向从1开始报数,报到m的猴子出局

                再从刚出局猴子的下一个位置重新开始报数,从此重复,直至剩下一个猴子,它就是大王。

                设计并编写程序,实现如下功能:

                1、要求由用户输入开始时的猴子数n,报到的最后一个数m。

                2、给出当选猴王的初始编号。

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

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


 10、超级全局变量


    $_GET  -->地址栏上获得的值

    $_POST -->POST表单发送的数据

    $_REQUEST  -->既有GET,也有POST的内容

    样式1为:表单html

             <form action="122.php?id=3" method="post">

                   <p><input type="text" name="username" /></p>

                   <p><input type="subimt" value="提交" /></p>

             </form>

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

    $_SESSION  -->

    $_COOKIE  -->

    $_FILES  -->

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

    $_ENV  -->服务器操作系统的环境变量,如操作系统类型--linux win mac 环境变量等等

              容易暴露服务器信息,一般不允许显示

              禁用方法:variables_order = "GPCS"

        练习题:如果禁用了$_ENV变量,还有什么办法获取环境信息?

    $_SERVER  -->获取当前服务器,网站的域名,当前访问的脚本,客户IP

               获取客户IP地址:(REMOTE_ADDR, HTTP_X_FORWARD_FOR)

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

    $GLOBALS  -->是对全局变量花名册的一个别名,通过该变量,可以任意访问全局变量

            样式1为:

                     $a = 3;

                     $b = 4;


                     function t(){

                        print_r($GLOBALS);

                        $GLOBALS['a'] = 99;

                     }


                     t();   -->a =3  b = 4


                     echo $a;  -->99

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

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

11、常量

    11.1意义:

             声明后值不能修改

    11.2声明:

        define(常量名,常量值)

        样式1为:

                define('PI' , 3.14);   --常量名字前不加$

                echo PI;

        命名规范:和变量一样,只不过习惯上全是大写

    11.3特点:

             声明后,值不能修改,也不能重新声明,也不能销毁unset (是针对变量的)

        样式1为:

                 PI = 3.14;

                 echo PI;   -->语法错误  

    11.4检测:defined()

        样式1为:

                 PI = 3.14;

                 if(defined('PI')) {

                     echo '常量已存在';

                 }   else {

                     echo '常量不存在';

                 }

        样式2为:真实开发一般这样用 ,因为不知道常量是否存在,同时可以定义常量

                if(!defined('HEI')){

                    define('HEI', 8846)

                }

        练习题:动词常量名,用变量的值做常量的名字,该如何做?

                $chang = 'HEI';

                echo $chang;


                echo constant('HEI')  -->根据常量值,获得常量名

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

    11.5案例

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

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

12、文件包含

    作用:在于代码的重用,我们可以把常用的代码段写一个文件里,当需要用这些代码时,

          引入这个文件就可以了。

    include :

    样式1为:

            include('./**.php');   -->调用其它文件里的函数,相当于把**.php的文件内容替换本行,复制多行就是把**.php的内容运用多次

    样式2为:

             1.php   -->  $age +=1;

             include('./1.php');

             include('./1.php');

             include('./1.php');

             echo $age;  --> 3  ,复制多行,相当于运行了多次

    include_once:

    样式3为:

            1.php   -->  $age +=1;

            include_once('./1.php');   

            include_once('./1.php'); 

            include_once('./1.php'); 

            echo $age;  -->  2

    注意:_once 的作用: 只引入1次,如果之前已引用过,不再重复引用

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

    require

    require_once

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

    include和require的区别:如果引入文件不存在,include尽量往下执行,报warning

                            require则直接煲fatal error ,脚本立即停止执行

    注意:

          不加_once速度快些

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

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

13、位运算:是针对字节上的位来进行运算(8位),把位的0/1当成假/真,针对每个位上的逻辑运算,就是位运算

    样式1为:

            10进制        2进制

            5             0000 0101

            13            0000 1101

            &             -----------

                          0000 0101      <--echo 5 & 13;  -->5 

            |             0000 1101      <--echo 5 | 13;  -->13

            ^             ----------   两者必须一样

                          0000 1001

            ~             ----------   求反

    样式2为:

            echo 5 & 12; ---> 4

            echo 5 | 12; ---> 13

    样式3为:

            echo 5 ^ 12; ---> 9

    样式3为:

            echo ~5 ; ---> -6

    练习:利用位运算的左移,使整数增大2倍

          $a = 3;

          echo $a << 1;  --> 6


          echo $a << 2; --> 12


          echo $a >> 1; --> 1


          echo 8 >>2; --> 2

    作业:

          自定义函数实现10进制整数转16进制

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

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

14、进制详解

    生活中常用10进制

    计算机常用2进制,8进制,16进制

    样式1为:10进制

            echo 123;  -->从右到左3位,分别以1顶1 以1顶10 以1顶 100

            echo 1*3 + 10*2 + 100*1;

    样式2为:8进制 ,前面加0代表8进制

            echo 0123;   -->从右到左3位,分别以1顶1 以1顶8 以1顶64

            echo 027;   --> 23 

    样式3为:16进制,前面加0x 代表16进制

             echo 0x123;  -->从右到左3位,分别以1顶1 以1顶16 以1顶256

             echo 0x1c;   -->28

    样式4为: 2进制,PHP目前不支持直接表示

              从右到左,分别以1顶1 以1顶2 以1顶4

             10进制        2进制

             5             0000 0101

             255           1111 1111,128+64+32+16+8+4+2+1

             -1            1111 1111  ,这8个1,到底理解成255 ,还是理解成-1 ,这个取决于程序

                                        比如在Mysql中,int则理解为-1 ,usigned int 理解为255

    注意:查找进制补码相关资料

          计算机中的正负数,就是时钟的顺逆时钟的区别

    练习题:

           1、为什么程序员总是分不清万圣节 和圣诞节 ?

           2、 /thread-9527-1-1.html

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

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

15、位运算与PHP错误报告设置

    PHP脚本的错误,分多个等级,如致命错误,Notice ,warning, N多级,如何方便的设置报告错误?

    PHP 把不同等级的级别,用数字来表示,比如:

        1 E_ERROR(integer) 致命的运行时错误,这类错误一般是不可恢复的情况,例如内存分配导致的问题,后果是导致脚本终止运行

        2 E_WARNING(integer) 运行时警告(非致命错误) ,仅给出提示信息,但是脚本不会终止运行

        4 

        8

        16

        上面数字与2进制的关系是: 不同级别 1的位置就不同

                                0000 0001

                                0000 0010

                                0000 0100

                                0000 1000

        综上,想报告所有错误,可以把所有错误级别 a | b | c....

        

        样式1为:设置报告所有错误  -->注意:设置报告所有错误这样会把资料泄露出去的:如泄露网站地址

                 error_reporting(E_ALL);

        样式2为:不报错误 

                 error_reporting(0);

        样式3为:想报所有错误,除了notiec的错误

                 error_reporting(E_ALL ^ E_NOTIEC);

            或者:error_reporting(E_ALL & ~E_NOTIEC);

                  因为:echo E_NOTIEC; --> 8 -- 0000 1000

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

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

16、浮点数并不精确

    样式1为:

            if( (0.3 - 0.2) == 0.1) {

               echo '相等';

            }  else {

                echo '不等';

            }   --> 不等  (舍入)

      原因:10进制:3.1 是 3 *10^0 + 1 * 10^ - 1;

            3进制: 1.1 是 1* 3^0 + 1 * 3^ -1; 对应10进制,1.333333

            10进制  2进制

            0.5     0.1

            0.8     0.1100..

            某些小数在10进制下,是有限的,转成2进制要无限循环,因此,损失一些精度

            导致浮点数计算和数学上结果不一致

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

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

17、逻辑运算的短路特性与运算符优先级

    样式1为:

            $house = false;

            $car = true;


            if($house && $car) {

               echo '嫁';

            }  else {

               echo '不嫁';

            }  -->房子已经为假,又用并且计算,结果为假,程序并不会去判断$car的值

      样式2为:

              $b = 1;

              if( $house && ($b = 6) ) {  $b =6 被短路 ,没有机会执行

              }   echo $b;   --> 1

      样式3为:

              $b = 1;

              if( $house || ($b = 6) ) {  $b =6 

              }   echo $b;   --> 6

      样式4为:

              $b = 1;

              if( $car || ($b = 6) ) {  $b =1

              }   echo $b;   --> 1


      短路特性:一旦前面已经判断真假,后面就没有机会执行

      短路特性的运用:

                     利用短路写出简短的判断代码

      样式5为:

               if(!defind('PI')) {

                  define('PI', 3.14);

               }

              短路写出:省略了if 结构

               defined('PI')||defined('PI', 3.14); 前面为真,后面就不会执行

      练习题:

             $a = 3;

             $b = 5;

             if ($a = 5 || $b = 7) {

                $a++;  -->这里得到布尔值true

                $b++; 

             }

             echo $a; --> 1  布尔值true显示效果为 1

             echo $B; --> 6

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

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

18、递归

   18.1递归概念

        样式1为:

               function sum($n) {

                  if($n==1) {

                    reture 1;

                  }

                  ruture $n + sum($n - 1);

               }


               echo sum(100);

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

   18.2递归技巧与案列

       技巧:假设法--假设自己的函数已经完成

       样式1为:用递归打印当前目录下的所有文件,目录及子目录 ...

                function print_r($path,$lev=1) {

                    $dh = opendir($path);


                    whlie( $row=readdir($dh)) !== false) {

                        echo str_repeat('&nbsp;',$lev) , $row,'<br />';


                        if('.'== $row ||'..'==$row) {

                           continue;

                        }


                        if(is_dir($path . '/' . $row)) {

                            printdir($path . '/' . $row , $lev +1)

                        }

                    }


                    closedir($dh);

                }


                $path = '.';

                printdir($path)


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

   18.3递归与静态变量

       样式1为:

               function t() {

                   $a = 10;

                   $a += 1;


                   reture $a;

               }


               echo t();  --> 11

               echo t();  --> 11

               echo t();  --> 11

        样式2为:

                function t() {

                   statci $a = 10;

                   $a +=1;

                   return $a;

                }


               echo t();  --> 11

               echo t();  --> 12

               echo t();  --> 13

               static 变量有一个特点,在第一次函数调用声明之后存在,且不随函数结束而结束

                      当函数再次调用时,可以直接利用上次的结果

        样式3为:写递归函数,计算所有单元的和

                $arr = $array(1,2,3,array(4,arrary(5,6)));

                function sum($arr) {

                  static $sum = 0;

                   foreach ($arr as $v) {

                       if(is_array($v)) {

                           sum($v);

                       } else {

                            $sum +=$v;

                       }   

                   }

                   echo $sum,'<br />';

                   return $sum;

                }


                echo sum($arr)

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

18.4递归练习题


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

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

19、程序练习

   19.1 IP,域名,DNS,host概念

       IP有 2^32  --> 42亿

       域名 --> 解析成 --> IP

       DNS服务器:用户把域名发送到DNS服务器上,服务器把域名解析成相应的IP地址,也叫做域名解析


       在本地机上模拟域名:在c盘 window -system32 - drivrs -etc -host文件上添加域名,如

       126.0.0.1  a.com   -->在浏览器上输入a.com  ,就可以访问相对应的文件

       (原因:解析的优先权:谁离的近,就先解析谁) ,a.com 是本地机上的域名,所有就会先解析本地,远程的就不再解析

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

   19.2 apache安装与虚拟主机配置

        为什么要安装apache:

             apache就是提供网页服务,客户访问网页html(html网页交给了apache管理)的时候,apache就会响应给客户.

        每个软件都有其相应的端口,apache上网时的端口一般是80.

        apache响应的是静态文件,如GIF/CSS/HTML

        apache 访问htdocs文件里的网页,但是不理解PHP程序语言,所以需要要PHP解释器


        虚拟主机:一个apache 提供多个网站域名的服务

        如何然spache服务多个虚拟IP:

        方法如下

           1、   找到spache/conf文件夹下的 httpd 文件  (vhost配置虚拟主机服务)

              找到语句:

              # Virtual hosts

              #Include conf/extra/httpd-vhosts.conf   -->删掉这句的# ,就可以支持虚拟主机的配置了,

           2、找到conf文件夹下的 extra 文件夹 里面的httpd-vhost.conf 添加语句:

              <VirtualHost *:80>

                  ServerAdmin [email protected]

                  DocumentRoot "D:/docs/htdocs/b.com"    -->这个就需要响应b.com目录下的文件给我

                  ServerName b.com      -->我在浏览器上输入这个

                  ErrorLog "logs/dummy-host2.a.com-error.log"

                  CustomLog "logs/dummy-host2.a.com-access.log" common

              </VirtualHost>

            3、要重启apache

            4、在htdocs文件夹里添加命名为b.com的文件夹

            5、在c盘window -system32 - drivrs -etc -host文件最后添加:

               127.0.0.1       b.com

        

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

   19.3 整合PHP

        流程:

          php 1、解压php-5.4.28-Win32-VC9-x86到某盘php文件里

              2、在php文件里找到  php.ini-development 复制一份并改为  php.ini文件

              3、找到php.ini文件里的语句:

                 ; extension_dir = "ext"   -->改为:extension_dir = "D:/php/ext"

      apache 4、打开apache/conf/httpd文件 里的语法:

                在<IfModule mime_module>  前面添加语句:

                PHPIniDir "D:/php"  --> 存放文件

                LoadModule php5_module "D:/php/php5apache2_2.dll"  --> 桥梁

                LoadFile "D:/php/libeay32.dll"

                LoadFile "D:/php/ssleay32.dll"


                #.php    -->php解释器

                AddType application/x-httpd-php .php   -->


                注释:php文件夹里的 php5apache2_2.dll  就是php和apache的桥梁

              5、安装:文件

                      vcredist_x86_2005

                      vcredist_x86_2008

                      vcredist_x86_2010

              6、要是还是不行可以通过命令查找问题

                 cmd -->  ??

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

   19.4 安装mysql

        1、常规安装

        2、找到 "D:/docs/htdocs/b.com文件里新建a.php 文件,里面写:

           var_dump(mysql_connect('127.0.0.1','root','admin')); 

                127.0.0.1  默认的网址

                root默认的目录

                admin 安装时填写的密码

        3、找到D:/php/php.int  文件里的:

           ;extension=php_mysql.dll   -->修改为:extension=php_mysql.dll

        4、重启apachce

        5、浏览器打开a.php  会显示: resource(3) of type (mysql link)

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

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

20、mysql入门语句

    sql查询语言

    数据库服务器 mysql

    库 database

    表  table

    1、连接到数据库服务器

       cmd  --> 输入连接命令: mysql -h localhost -u root -p admin

       mysql :数据库

       -h localhost :指定哪个数据库

       -u root :默认的目录

       -p admin :登录密码

       ------>cmd得到:

       mysql>


    2、查看所有库:输入

       mysql> show databases  

               --->得到有哪些库


    3、选择库:输入

       mysql> use test(库名)


    4、查看库下面的表:输入

       mysql>show tables


    5、建表:

      creat table msg (   -->msg是存储的文件

      id int auto_increment primary key,

      title varchar(200),  -->存标题

      content varchar(200),  -->存内容

      pubtime int    

       )charset utf8;

    6、告诉服务器你的字符集

       set names gbk/utf8;  -->客户端是什么字符集就写什么


     7、添加数据:输入

       mysql>insert into msg (id,content,pubtime) values (1,'逗你玩',1312345);

         

        select * from msg   -->显示新建的表


        set names gbk;  -->表格会显示乱码文字,因为客户端是gpk ,而服务器是utf8


    8、查询所有数据

       select * from msg;


    9、按id查询一行

       select * from msg where id=2;  -->取出id=2 的数据


    10、快速清空表

        truncate 表名

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

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

21、留言提交到mysql

    1、开始留言   -->已经建好的表单

    2、连接mysql:规划好放到哪个文件

       语句:

            $conn = mysql_connect('192.168.1.100','root','密码');


            发送查询:

                      mysql_query('use test' , $conn);

                      mysql_query('set names utf8' , $conn);

            接收POST数据:

                         $sql = insert into liuyan (tltle,content,pubtime) values ('" .$_POST['tielt'] . "','" . $_POST['content']."',".time() .")";

            注意:反浏览器反馈的信息,复制粘贴到 cmd  mysql>  *** 可以及时查询问题

            

    3、发送:

            if(mysql_query($sql,$conn)) {

               echo '留言成功';

            } else {

              echo '留言失败';

            }


    4、查询

       $sql = 'select' * from liuyan;


       mysql_query($sql,$conn);

    5、读取:

        while($row = mysql_fetch_assoc($rs)) {

          echo '<li><a href="du.php?id=',$row['id'],'">',$row['title'],'</li>';

        }

        建立du.php文件,通过地址栏来确定你要读哪条留言

        代码为:

              <?php

               $coon = mysql_connect('192.168.1.100','root',',');


               mysql_query('use test' , $conn);

               mysql_query('set names tuf8' , $conn);


               $id = $_GET['id'];

               $sql = 'select * from liuyan where id=' . $id;


               $rs = mysql_query($sql,$conn);


               $row = mysql_fetch_assoc($rs);

               ?>


               <h1><?php echo $row['title']; ?></h1>

               <p><?php echo $row['content']; ?></p>



你可能感兴趣的:(PHP基础巩固笔记)