zoukankan      html  css  js  c++  java
  • PHP学习记录03

    php高级教程03

    date() date函数

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

    语法

    string date ( string $format [, int $timestamp ] )
    
    参数 描述
    format 必需。规定时间戳的格式。
    timestamp 可选。规定时间戳。默认是当前的日期和时间。

    date() 函数的第一个必需参数 format 规定了如何格式化日期/时间。

    这里列出了一些可用的字符:

    • d - 代表月中的天 (01 - 31)
    • m - 代表月 (01 - 12)
    • Y - 代表年 (四位数)
    • H - 代表小时 (24 小时制,带前导零(00 到 23)
    • h - 代表小时 (12 小时制,带前导零(01 到 12)
    • i - 代表分,带前导零(00 到 59)
    • s - 代表秒,带前导零(00 到 59)
    <?php
    echo date("Y/m/d");
    echo "<br>";
    echo date("Y.m.d");
    echo "<br>";
    echo date("Y-m-d-h-i-s");
    echo "<br>";
    echo date("Y-m-d H:i:s");
    echo "<br>";
    echo date("Y 年 m 月 d 日 H 点 i 分 s秒");
    ?>
    

    PHP 包含文件

    PHP include 和 require 语句

    在 PHP 中,您可以在服务器执行 PHP 文件之前在该文件中插入一个文件的内容。

    include 和 require 语句用于在执行流中插入写在其他文件中的有用的代码。

    include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:

    • require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
    • include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。

    因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。

    包含文件省去了大量的工作。这意味着您可以为所有网页创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。

    语法

    include 'filename';
    或者
    require 'filename';
    

    基础实例

    假设您有一个标准的页头文件,名为 "header.php"。如需在页面中引用这个页头文件,请使用 include/require:

    <?php include 'php6.php'; ?>#在同一路径
    <h1>欢迎来到我的主页!</h1>
    <p>一些文本。</p>
    
    <?php include '123/php6.php'; ?>#不同路径
    <h1>欢迎来到我的主页!</h1>
    <p>一些文本。</p>
    

    基础实例

    假设我们有一个定义变量的包含文件("vars.php")

    <?php
    $color='red';
    $car='BMW';
    ?>
    

    使用

    <h1>欢迎来到我的主页!</h1>
    <?php 
    include 'vars.php';
    echo "I have a $color $car"; // I have a red BMW
    ?>
    

    include 和 require 的区别

    • require 一般放在 PHP 文件的最前面,程序在执行前就会先导入要引用的文件;

    • include 一般放在程序的流程控制中,当程序执行时碰到才会引用,简化程序的执行流程。

    • require 引入的文件有错误时,执行会中断,并返回一个致命错误;

    • include 引入的文件有错误时,会继续执行,并返回一个警告。

    文件处理

    fopen() 函数用于在 PHP 中打开文件。

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

    打开文件

    fopen() 函数用于在 PHP 中打开文件。

    此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件:

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

    如果 fopen() 函数不能打开指定的文件,下面的实例会生成一段消息:

    <?php
    $file=fopen("123.txt","r") or exit("无法打开文件!");
    ?>
    
    #用相对路径打不开子目录中的文件时,可用绝对路径打开,如下:
    $file=fopen("D:\phpstudy_pro\unins000.dat","r") or exit("无法打开文件!");
    #如果打开一个文件,文件名为中文,如果系统编程和当前文档编码不一致,会导致文件找不到无法打开,解决方法是用 iconv 函数编码转换成一致,如下:
    $fpath=iconv('UTF-8','GB2312',"阿三.txt");
    $file=fopen($fpath,"r") or exit("无法打开文件!");
    

    关闭文件

    fclose() 函数用于关闭打开的文件:

    <?php
    $file = fopen("test.txt","r");
    //执行一些代码
    fclose($file);
    ?>
    

    检测文件末尾(EOF)

    feof() 函数检测是否已到达文件末尾(EOF)。

    在循环遍历未知长度的数据时,feof() 函数很有用。

    注释:在 w 、a 和 x 模式下,您无法读取打开的文件!

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

    逐行读取文件

    fgets() 函数用于从文件中逐行读取文件。

    注释:在调用该函数之后,文件指针会移动到下一行。

    实例

    下面的实例逐行读取文件,直到文件末尾为止:

    <?php
    $file=fopen("123.txt","r") or exit("无法打开文件!");
    while(!feof($file))
    {
        echo fgets($file). "<br>";
    }
    if (feof($file))
    	{echo "文件结尾";} 
    fclose($file);
    ?>
    

    逐字符读取文件

    fgetc() 函数用于从文件中逐字符地读取文件。

    注释:在调用该函数之后,文件指针会移动到下一个字符。

    实例

    下面的实例逐字符地读取文件,直到文件末尾为止:

    <?php
    $file=fopen("123.txt","r") or exit("无法打开文件!");
    while (!feof($file))
    {
      echo fgetc($file);
        #echo "<br>";
    }
    if (feof($file))
    	{echo "文件结尾";} 
    fclose($file);
    ?>
    

    PHP 文件上传

    $_GET

    $_POST

    $_FILES

    通过 PHP,可以把文件上传到服务器。

    本章节实例在 test 项目下完成,目录结构为:

    test
    |-----upload             # 文件上传的目录
    |-----form.html          # 表单文件
    |-----upload_file.php    # php 上传代码
    

    创建一个文件上传表单

    允许用户从表单上传文件是非常有用的。

    请看下面这个供上传文件的 HTML 表单:

    <form>
    文件上传:<input type="file" name="file" id="file"><br><br>
    提交:<input type="submit" name="submit" value="点击上传">
    </form>
    

    将以上代码保存到 form.html 文件中。

    <form action="" method="post" enctype="multipart/form-data">
    文件上传:<input type="file" name="file" id="file"><br><br>
    提交:<input type="submit" name="submit" value="点击上传">
    

    有关上面的 HTML 表单的一些注意项列举如下:

    • 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。
    • input 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

    注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。

    创建上传脚本

    "upload_file.php" 文件含有供上传文件的代码:

    通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

    第一个参数是表单的 input name,第二个下标可以是 "name"、"type"、"size"、"tmp_name" 或 "error"。如下所示:

    $_FILES 数组内容如下:
    $_FILES["file"]["name"] - 上传文件的名称
        $_FILES['myFile']['name'] 客户端文件的原名称。
    $_FILES["file"]["type"] - 上传文件的类型
        $_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
    $_FILES["file"]["size"] - 上传文件的大小,以字节计
        $_FILES['myFile']['size'] 已上传文件的大小,单位为字节。
    $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
        $_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在 php.ini 的 upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。
        
    $_FILES["file"]["error"] - 由文件上传导致的错误代码
    	$_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在 PHP 4.3.0 之后变成了 PHP 常量。)
    
    UPLOAD_ERR_OK - 值:0; 没有错误发生,文件上传成功。 
    UPLOAD_ERR_INI_SIZE - 值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 
    UPLOAD_ERR_FORM_SIZE - 值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 
    UPLOAD_ERR_PARTIAL - 值:3; 文件只有部分被上传。 
    UPLOAD_ERR_NO_FILE - 值:4; 没有文件被上传。 
    UPLOAD_ERR_NO_TMP_DIR -其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
    UPLOAD_ERR_CANT_WRITE - 其值为 7,文件写入失败。PHP 5.1.0 引进。
    

    这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关允许哪些用户上传文件的限制。

    <?php
    if ($_FILES["file"]["error"] > 0)
    {
        echo "错误:" . $_FILES["file"]["error"] . "<br>";
    }
    else
    {
        echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
        echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
        echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
    }
    ?>
    

    注意:文件被上传结束后,默认地被存储在了临时目录中,这时您必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用PHP的 copy() 函数将它复制到其它位置,此时,才算完成了上传文件过程。

    上传限制

    在这个脚本中,我们增加了对文件上传的限制。用户只能上传 .gif、.jpeg、.jpg、.png 文件,文件大小必须小于 200 kB:

    <?php
    // 允许上传的图片后缀
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);        // 获取文件后缀名
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/jpg")
    || ($_FILES["file"]["type"] == "image/pjpeg")
    || ($_FILES["file"]["type"] == "image/x-png")
    || ($_FILES["file"]["type"] == "image/png"))
    && ($_FILES["file"]["size"] < 204800)    // 小于 200 kb
    && in_array($extension, $allowedExts))
    {
        if ($_FILES["file"]["error"] > 0)
        {
            echo "错误:: " . $_FILES["file"]["error"] . "<br>";
        }
        else
        {
            echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
            echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
            echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
            echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
        }
    }
    else
    {
        echo "非法的文件格式";
    }
    ?>
    

    保存被上传的文件

    上面的实例在服务器的 PHP 临时文件夹中创建了一个被上传文件的临时副本。

    这个临时的副本文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

    <?php
    // 允许上传的图片后缀
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $_FILES["file"]["name"]);
    echo $_FILES["file"]["size"];
    $extension = end($temp);     // 获取文件后缀名
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/jpg")
    || ($_FILES["file"]["type"] == "image/pjpeg")
    || ($_FILES["file"]["type"] == "image/x-png")
    || ($_FILES["file"]["type"] == "image/png"))
    && ($_FILES["file"]["size"] < 204800)   // 小于 200 kb
    && in_array($extension, $allowedExts))
    {
        if ($_FILES["file"]["error"] > 0)
        {
            echo "错误:: " . $_FILES["file"]["error"] . "<br>";
        }
        else
        {
            echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
            echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
            echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
            echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
            
            // 判断当前目录下的 upload 目录是否存在该文件
            // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
            if (file_exists("upload/" . $_FILES["file"]["name"]))
            {
                echo $_FILES["file"]["name"] . " 文件已经存在。 ";
            }
            else
            {
                // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下(重要)
                move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
                echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
            }
        }
    }
    else
    {
        echo "非法的文件格式";
    }
    ?>
    

    上面的脚本检测了文件是否已存在,如果不存在,则把文件拷贝到名为 "upload" 的目录下。

    cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。

    如何创建 Cookie?

    setcookie() 函数用于设置 cookie。

    注释:setcookie() 函数必须位于 标签之前。

    实例 1

    在下面的例子中,我们将创建名为 "user" 的 cookie,并为它赋值 "runoob"。我们也规定了此 cookie 在一小时后过期:

    <?php
    setcookie("user", "runoob", time()+3600);
    ?>
    
    <html>
    .....
    

    注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码。(为防止 URL 编码,请使用 setrawcookie() 取而代之。)

    实例 2

    您还可以通过另一种方式设置 cookie 的过期时间。这也许比使用秒表示的方式简单。

    <?php
    $expire=time()+60*60*24*30;
    setcookie("user", "runoob", $expire);
    ?>
    
    <html>
    .....
    

    在上面的实例中,过期时间被设置为一个月(60 秒 * 60 分 * 24 小时 * 30 天)。

    PHP 的 $_COOKIE 变量用于取回 cookie 的值。

    在下面的实例中,我们取回了名为 "user" 的 cookie 的值,并把它显示在了页面上:

    <?php
    // 输出 cookie 值
    echo $_COOKIE["user"];
    
    // 查看所有 cookie
    print_r($_COOKIE);
    ?>
    

    在下面的实例中,我们使用 isset() 函数来确认是否已设置了 cookie:

    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <?php
    if (isset($_COOKIE["user"]))
        echo "欢迎 " . $_COOKIE["user"] . "!<br>";
    else
        echo "普通访客!<br>";
    ?>
    
    </body>
    </html>
    

    如何删除 Cookie?

    当删除 cookie 时,您应当使过期日期变更为过去的时间点。

    删除的实例:

    <?php
    // 设置 cookie 过期时间为过去 1 小时
    setcookie("user", "", time()-3600);
    ?>
    

    PHP Session


    PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。


    PHP Session 变量

    您在计算机上操作某个应用程序时,您打开它,做些更改,然后关闭它。这很像一次对话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应用程序。然而,在因特网上问题出现了:由于 HTTP 地址无法保持状态,Web 服务器并不知道您是谁以及您做了什么。

    PHP session 解决了这个问题,它通过在服务器上存储用户信息以便随后使用(比如用户名称、购买商品等)。然而,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久存储信息,可以把数据存储在数据库中。

    Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。


    开始 PHP Session

    在您把用户信息存储到 PHP session 中之前,首先必须启动会话。

    注释:session_start() 函数必须位于 标签之前:

    实例

    上面的代码会向服务器注册用户的会话,以便您可以开始保存用户信息,同时会为用户会话分配一个 UID。


    存储 Session 变量

    存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:

    实例

    <?php
    session_start();
    // 存储 session 数据
    $_SESSION['views']=1;
    ?>
     
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
     
    <?php
    // 检索 session 数据
    echo "浏览量:". $_SESSION['views'];
    ?>
     
    </body>
    </html>
    

    输出:

    浏览量:1
    

    在下面的实例中,我们创建了一个简单的 page-view 计数器。isset() 函数检测是否已设置 "views" 变量。如果已设置 "views" 变量,我们累加计数器。如果 "views" 不存在,则创建 "views" 变量,并把它设置为 1:

    实例

    <?php
    session_start();
     
    if(isset($_SESSION['views']))
    {
        $_SESSION['views']=$_SESSION['views']+1;
    }
    else
    {
        $_SESSION['views']=1;
    }
    echo "浏览量:". $_SESSION['views'];
    ?>
    

    销毁 Session

    如果您希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。

    unset() 函数用于释放指定的 session 变量:

    实例

    <?php
    session_start();
    if(isset($_SESSION['views']))
    {
        unset($_SESSION['views']);
    }
    ?>
    

    您也可以通过调用 session_destroy() 函数彻底销毁 session:

    实例

    <?php
    session_destroy();
    ?>
    

    注释:session_destroy() 将重置 session,您将失去所有已存储的 session 数据

    愿路途漫长,以后莫失莫忘。 愿你不骄不躁,安稳顺心。

    作者:菜鸟-传奇
    本文版权归作者和博客园共有,不以任何盈利为目的,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律声明责任的权利。
  • 相关阅读:
    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
    输入一个链表,反转链表后,输出链表的所有元素。java实现
    少一点虚荣,多一点务实
    Mysql存储引擎__笔记
    osi七层模型和两主机传输过程:
    redis_笔记
    zookeeper_笔记
    rest和soap_笔记
  • 原文地址:https://www.cnblogs.com/cainiao-chuanqi/p/14861497.html
Copyright © 2011-2022 走看看