• php编程 之 php进阶练习


    1,php的date相关操作:

    PHP date() 函数可把时间戳格式化为可读性更好的日期和时间。

    <?php
    echo date("Y/m/d") . "<br>";  //返回2016/10/21
    echo date("Y.m.d") . "<br>";    //返回2016.10.21
    echo date("Y-m-d");    //返回2016-10-21
    ?>

    注意:带着时分秒的格式是这样的:$t=date("Y.m.d.H.i.s")

      调用这个函数以前,最好是先设定一下时区:date_default_timezone_set('Asia/Shanghai');(前面这句话直接加在开头就行)

    完整的format字符可查询下表:
    format字符说明返回值例子
    --- ---
    d 月份中的第几天,有前导零的 2 位数字 01 到 31
    D 星期中的第几天,文本表示,3 个字母 Mon 到 Sun
    j 月份中的第几天,没有前导零 1 到 31
    l("L"的小写字母) 星期几,完整的文本格式 Sunday 到 Saturday
    N ISO-8601 格式数字表示的星期中的第几天(PHP 5.1.0 新加) 1(表示星期一)到 7(表示星期天)
    S 每月天数后面的英文后缀,2 个字符 stndrd 或者 th。可以和 j 一起用
    w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六)
    z 年份中的第几天 0 到 365
    星期 --- ---
    W ISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的) 例如:42(当年的第 42 周)
    --- ---
    F 月份,完整的文本格式,例如 January 或者 March January 到 December
    m 数字表示的月份,有前导零 01 到 12
    M 三个字母缩写表示的月份 Jan 到 Dec
    n 数字表示的月份,没有前导零 1 到 12
    t 给定月份所应有的天数 28 到 31
    --- ---
    L 是否为闰年 如果是闰年为 1,否则为 0
    o ISO-8601 格式年份数字。这和 Y 的值相同,只除了如果 ISO 的星期数(W)属于前一年或下一年,则用那一年。(PHP 5.1.0 新加) Examples: 1999 or 2003
    Y 4 位数字完整表示的年份 例如:1999 或 2003
    y 2 位数字表示的年份 例如:99 或 03
    时间 --- ---
    a 小写的上午和下午值 am 或 pm
    A 大写的上午和下午值 AM 或 PM
    B Swatch Internet 标准时 000 到 999
    g 小时,12 小时格式,没有前导零 1 到 12
    G 小时,24 小时格式,没有前导零 0 到 23
    h 小时,12 小时格式,有前导零 01 到 12
    H 小时,24 小时格式,有前导零 00 到 23
    i 有前导零的分钟数 00 到 59>
    s 秒数,有前导零 00 到 59>
    u 毫秒 (PHP 5.2.2 新加)。需要注意的是 date() 函数总是返回 000000 因为它只接受 integer 参数, 而 DateTime::format() 才支持毫秒。 示例: 654321
    时区 --- ---
    e 时区标识(PHP 5.1.0 新加) 例如:UTCGMTAtlantic/Azores
    I 是否为夏令时 如果是夏令时为 1,否则为 0
    O 与格林威治时间相差的小时数 例如:+0200
    P 与格林威治时间(GMT)的差别,小时和分钟之间有冒号分隔(PHP 5.1.3 新加) 例如:+02:00
    T 本机所在的时区 例如:ESTMDT(【译者注】在 Windows 下为完整文本格式,例如"Eastern Standard Time",中文版会显示"中国标准时间")。
    Z 时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。 -43200 到 43200
    完整的日期/时间 --- ---
    c ISO 8601 格式的日期(PHP 5 新加) 2004-02-12T15:19:21+00:00
    r RFC 822 格式的日期 例如:Thu, 21 Dec 2000 16:01:07 +0200
    U 从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数 参见 time()

    2,文件相关操作:

    打开文件:

    <?php
    $file=fopen("filename.txt","r");
    ?>

      文件打开模式详情见下表:

    模式描述
    r 只读。在文件的开头开始。
    r+ 读/写。在文件的开头开始。
    w 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。
    w+ 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。
    a 追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件。
    a+ 读/追加。通过向文件末尾写内容,来保持文件内容。
    x 只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。
    x+ 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。

    关闭文件:fclose($filename);

    检测是否到达文件末尾:

    if (feof($filename)) echo "文件结尾";

    逐行读取文件:

    <?php
    $file = fopen("welcome.txt", "r") or exit("无法打开文件!");
    // 读取文件每一行,直到文件结尾
    while(!feof($file))    //如果没有到达文件末尾
    {
        echo fgets($file). "<br>";    //就逐行读取文件
    }
    fclose($file);    //到了末尾就关闭
    ?>

    逐字读取文件:

    <?php
    $file=fopen("welcome.txt","r") or exit("无法打开文件!");
    while (!feof($file))
    {
        echo fgetc($file);    //注意,fgetc()函数,这是逐字读取。
    }
    fclose($file);
    ?>

    拓展:php读取文件的五种方法:

    第一种:

    <?php
    $file_path = "test.txt";
    if(file_exists($file_path)){
    $fp = fopen($file_path,"r");
    $str = fread($fp,filesize($file_path));//指定读取大小,这里把整个文件内容读取出来
    echo $str = str_replace("
    ","<br />",$str);
    }
    ?>

    第二种

    <?php
    $file_path = "test.txt";
    if(file_exists($file_path)){
    $str = file_get_contents($file_path);//将整个文件内容读入到一个字符串中
    $str = str_replace("
    ","<br />",$str);
    echo $str;
    }
    ?>

    第三种

    <?php
    $file_path = "test.txt";
    if(file_exists($file_path)){
    $fp = fopen($file_path,"r");
    $str = "";
    $buffer = 1024;//每次读取 1024 字节
    while(!feof($fp)){//循环读取,直至读取完整个文件
    $str .= fread($fp,$buffer);
    } 
    $str = str_replace("
    ","<br />",$str);
    echo $str;
    }
    ?>

    第四种:

    <?php
    $file_path = "test.txt";
    if(file_exists($file_path)){
    $file_arr = file($file_path);
    for($i=0;$i<count($file_arr);$i++){//逐行读取文件内容
    echo $file_arr[$i]."<br />";
    }
    /*
    foreach($file_arr as $value){
    echo $value."<br />";
    }*/
    }
    ?>

    第五种:比较推荐用这个。

    <?php
    $file_path = "test.txt";
    if(file_exists($file_path)){
    $fp = fopen($file_path,"r");
    $str ="";
    while(!feof($fp)){
    $str .= fgets($fp);//逐行读取。如果fgets不写length参数,默认是读取1k。
    }
    $str = str_replace("
    ","<br />",$str);
    echo $str;
    }
    ?>

    3,跨文件调用函数

    t1.php文件:作用在于把当前时间写到txt文档中,然后一行一行读取,读到的信息加工一下,展示出来。

    <?php
    function wgTime()
    {
        date_default_timezone_set('Asia/Shanghai'); 
        $t=date("Y.m.d.H.i.s")."
    ";
        //var_dump($t);
        $file=fopen("t1.txt","a");
        fwrite($file,$t);
        fclose($file);
        $file="t1.txt";
        if(file_exists($file)){
            $file_arr=file($file);    //行读取
            for ($i=0;$i<count($file_arr);$i++){
                $str=explode(".",$file_arr[$i]);
                $dw=array("Y ","M ","D ","H ","I ","S ");
                for ($j=0;$j<6;$j++){
            //echo $j."序号"."<br>";
                    echo $str[$j],$dw[$j];
                }
                echo "<br>";
            }
        }
    }
    //wgTime();    因为调用的时候会直接执行,所以要注释掉才好调用
    ?>

    在daqing.php文件中如果想要调用t1.php的方法,可以这样:

    <?php
    require_once "t1.php";    //表示调用一次
    wgTime();
    ?>

     4,php数据库相关操作:

      补充:die() 函数输出一条消息,并退出当前脚本。该函数是 exit() 函数的别名。

               $rowcount=mysqli_num_rows($result),mysqli_num_rows()函数返回记录数。

          mysqli_fetch_assoc()是一个读取数据库数据的函数,它会一行一行地读取,并且把读到的数据转化成数组,数组的键是数据库的列名,值是具体的数。比如,读取id 和currtime,id=1,currtime=2018.09.05.12.12.12,这个函数就会生成这样的数组:'currtime' => '2018.09.05.10.58.06  'id'=>1。

      连接数据库:

    //mysqli-面向对象
    <?php
    $servername="localhost";
    $username="xxx";
    $password="xxx";
    $conn=new mysqli($servername,$username,$password);
    if ($conn->connect_error) {
        die("连接失败: " . $conn->connect_error);
    } 
    echo "连接成功";
    ?>
    //mysqli-面向过程 <?php $servername = "localhost"; $username = "username"; $password = "password"; $conn = mysqli_connect($servername, $username, $password); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "连接成功"; ?>

    个人比较倾向于面向过程的这种方法,因为特殊符号比较少。

      创建数据表:

    <?php
    $servername = "localhost";
    $username = "xxx";
    $password = "xxx";
    $dbname="daqingdb";    //在这里可以直接加入datebase参数。
    $conn = mysqli_connect($servername, $username, $password,$dbname);
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
    echo "连接成功 <br>";
    $sql="create table wgtime (`id` int(4) unsigned auto_increment primary key,time varchar(20) not null)";
    if (mysqli_query($conn,$sql)){
        echo "创建table:wgTime 成功!<br>";
    }else{
        echo "创建表error".mysqli.error($conn);
    }
    mysqli_close($conn);
    echo "exitd!";
    ?>

     把时间写入数据库,并且读取出来:

    <?php
    date_default_timezone_set('Asia/Shanghai');
    $t=date("Y.m.d.H.i.s")."
    ";
    $servername = "localhost";
    $username = "xxx";
    $password = "xxx";
    $dbname="daqingdb";    //在这里可以直接加入datebase参数。
    $conn = mysqli_connect($servername, $username, $password,$dbname);
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
    echo "连接成功 <br>";
    // $sql="create table wgtime (`id` int(4) unsigned auto_increment primary key,currtime varchar(30) not null)";
    // if (mysqli_query($conn,$sql)){
    //     echo "创建table:wgTime 成功!<br>";
    // }else{
    //     echo "创建表error".mysqli.error($conn);
    // }
    $sql1="INSERT INTO `wgtime`(`currtime`) VALUES ('$t')";    //$t要用单引号表明
    if (mysqli_query($conn,$sql1)){
        echo "新纪录插入成功 <br>";
    }else{
        echo "error:".mysqli_error($conn);    //打印出mysql返回的错误
    }
    //$sql2="select * from `wgtime`";
    $sql2="select `currtime` from `wgtime`";
    $result=mysqli_query($conn,$sql2);
    //var_dump($result);    $result竟然是个object对象类!其方法或者属性有:current_field,field_count,lengths,num_rows,type.
    if (mysqli_num_rows($result)>0){    //mysqli_num_rows($result)返回数据库中查询到的记录的行数
        echo "查询成功<br>";
        while ($row=mysqli_fetch_assoc($result)){
            //var_dump($row); 这是一个数组,类似于字典吧。
            $dw=array("Y ","M ","D ","H ","I ","S ");
            $str=explode(".",$row["currtime"]);        
            for($i=1;$i<6;$i++){
                echo $str[$i],$dw[$i]; 
            }
            echo "<br>";
        }
    }else{
        echo "error:".mysqli_error($conn);
    }
    mysqli_close($conn);
    echo "exitd!";
    ?>

     5,php文件和目录相关操作。

    补充:

      file_exists()判断文件或者文件夹是否存在,返回布尔值

      $list=scandir($dirpath)读取$dirpath代表的位置的下面的文件。

      chdir(path)改变当前文件位置到指定地方,约等于文件夹的指针。 

    <?php
    function dirBuilder($d,$t,$note)    //参数分别是:文件夹名,文件名,文件内容
    {
        // date_default_timezone_set('Asia/Shanghai');    //也可以不用参数,改用时间
        // $d=date("Y年m月d日");
        // $t=date("H时i分s秒");
        // $note="hello";
        $dirpath="C:/xampp/htdocs/daqing_new/dir_test/$d";    //判断文件夹是否存在,不存在就创建
        if (!file_exists($dirpath)){
            mkdir($dirpath,0777,true);
            //echo "新建文件夹<br>";
        }
    
        chdir($dirpath);    
        //echo "改变当前文件夹<br>";
        if (file_exists("C:/xampp/htdocs/daqing_new/dir_test/$d/$t.txt")){    //判断是否有同名文件
            echo "文件已经存在,没有创建新的<br>";
        }else{
            //echo "文件不存在,新建<br>";
            $myfile=fopen("$t.txt",'w');
            fwrite($myfile,$note);
            fclose($myfile);
        }
        $list=scandir($dirpath);    //读取文件夹下的文件目录
        var_dump($list);    //$list是一个数组,带着文件名和length,不能直接打印
        for($i=2;$i<count($list);$i++){
            echo "$list[$i] <br>";
        }
    }
    dirBuilder('123',"345","hello i am daqing");
    ?>

     6,php和html混写

    第一种方法:单双引号包围法

    <?php
    echo '
    <!DOCTYPE html>
    <html>
        <head>
            <title> </title>
        </head>
        <body>
            <span>测试页面</span>
        </body>
    </html>
    ';
    ?>
    //返回:测试页面

    单双引号的方法是一样的,但是单双引号有区别,单引号不会解析内部的变量,双引号支持变量的解析。

    缺点在于:

      输出的内容中包含引号的话不好处理;编辑器不好提醒引号内部的格式错误。

    第二种,使用EOF标识,这种方法支持变量解析

    <?php
    $content='hello';echo <<<EOF
    ‘$content’
    EOF
    ?>
    //返回:'hello',证明这种方法支持单双引号的使用

    第三种,html中嵌入php程序块

      基本思想:提前定义好函数或者方法,然后在需要输出的地方写上代码就可以了。

    <?php
    function test(){
        echo "function test! <br>";
    }
    ?>    //方法或者函数需要写在<?php  ?>中,下文的输出也要写在这样的格式中
    
    <!DOCTYPE html>    //html语句不需要写在<?php ?>中,php会理解的。
    <html>
        <head>
            <title><?php test();?> </title>
        </head>
        <body>
            <span><?php test();echo 'lala';?></span>
        </body>
    </html>
    
    //输出:function test! <br> lala

    第四种,使用前端模板引擎

      比如,我们可以使用Smarty,当然了,目前并不能理解。

    相关技术的关系:

      HTML展示内容
      PHP动态修改输出HTML展示内容
      CSS美化页面
      JS让页面动起来。提高浏览体验。

    制作一个键:

    <html>
    
    <head>
    <meta charset="utf-8">    //在标题里,定义了网页的元信息,比如编码方式charset
    <title>    //title标签,会显示在浏览器窗口的头上
    大晴测试
    </title>
    </head>
    
    <body>
    <button name= "logup" type = "submit" >呵呵</button>    //button中定义的是这个按键的属性
    </body>
    
    </html>
  • 相关阅读:
    13.sqoop的安装
    12.Flume的安装
    11.把文本文件的数据导入到Hive表中
    10.hive安装
    9.centos7 安装mysql
    8.时间同步
    7.编写mapreduce案例
    mysql中如何处理字符
    装箱拆箱隐含的问题
    何谓幂等性
  • 原文地址:https://www.cnblogs.com/0-lingdu/p/9585667.html
Copyright © 2020-2023  润新知