php笔记总结1111

原文链接:http://www.runoob.com/php/php-file.html
方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。
然而,默认情况下,POST 方法的发送信息的量最大值为 8 MB(可通过设置 php.ini 文件中的 post_max_size 进行更改)。
eg:<?php echo $_POST["fname"]; ?>
    <?php echo $_POST["age"]; ?>

$_REQUEST 
包含了 $_GET、$_POST 和 $_COOKIE 的内容。
可用来收集通过 GET 和 POST 方法发送的表单数据。
eg:<?php echo $_REQUEST["fname"]; ?>
    <?php echo $_REQUEST["age"]; ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

日期

date()将时间戳转化为可读性好的日期
eg:
    <?php
    echo date("Y/m/d") . "<br>";
    echo date("Y.m.d") . "<br>";
    echo date("Y-m-d");
    ?>
http://www.runoob.com/php/php-date.html
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

include & require

在服务器执行php之前在该文件中插入一个文件的内容
include如果出错,会继续执行下去
require如果出错,会终止后续的执行
eg:
    <?php include 'header.php'; ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

文件

fopen() 用于打开文件
fclose()用于关闭文件
feof()  检测文件是否到达末尾
fgets() 逐行读取文件
fgetc() 逐字符读取文件

http://www.runoob.com/php/php-file.html
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

文件上传

文件上传表单+处理php代码
表单:
<form action="upload_file.php" method="post" enctype="multipart/form-data">
    <label for="file">文件名:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="提交">
</form>
enctype表示提交表单时使用的内容类型
type="file"规定将输入作为文件处理
文件上传是一个安全风险,要谨慎开放
使用$_FILES作为文件上传的容器
通过对$_FILES的各个属性做限制来约束上传文件的属性
$_FILES["file"]["name"] - 上传文件的名称
$_FILES["file"]["type"] - 上传文件的类型
$_FILES["file"]["size"] - 上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码
上传之后还需要保存的操作,将其拷贝到upload文件夹下,否则只有一个临时的文件副本。
eg:
    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"];
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

Cookie

常用于识别用户
是一种服务器留在用户计算机上的小文件,当同一台计算机通过浏览器请求页面时,这台计算机将会发送cookie
setcookie()     设置cookie值   必须位于<html>标签之前
setcookie(name, value, expire, path, domain); //cookie名,值,过期时间(单位是秒),路径,主机名
setrowcookie()  设置原始cookie,不会被URL编码
$_COOKIE['cookie名'] 取回cookie值
eg:
    <?php
    if (isset($_COOKIE["user"]))
        echo "欢迎 " . $_COOKIE["user"] . "!<br>";
    else
        echo "普通访客!<br>";
    ?>
将expire的时间设置为过去,值设置为空即可删除该cookie
eg:
    <?php
    // 设置 cookie 过期时间为过去 1 小时
    setcookie("user", "", time()-3600);
    ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

Session

用于存储关于用户会话的信息,或者更改用户会话的设置。
Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。
Session 的工作机制:
    为每个访客创建一个唯一的 id (UID),并于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。
启动会话    
    session_start()     
    必须位于<html>标签之前      
    向服务器注册会话以便保存用户信息并分配一个UID
存储和引用Session    
    $_SESSION['session名']
销毁Session   
    unset($_SESSION['session名'])   释放指定的session变量
    session_destroy()   彻底销毁session 将会重置session会失去所有为未储的session
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

E-mail

mail(to,subject,message,headers,parameters)
*需要有一个已安装且正在运行的邮件系统,通过php.ini设置
为了防止注入攻击需要对输入做检查和过滤
filter_var()
  • 1
  • 2
  • 3
  • 4
  • 5

错误处理

报错时会直接将错误发送给浏览器包含文件名,行号,错误的消息,但这显然是不安全的
解决办法:
    A.  die(),用if...else...添加判断,如果出错,用die()返回提示消息,但是这种办法会终止脚本的执行
        eg:
            <?php
            if(!file_exists("welcome.txt"))
            {
                die("文件不存在");
            }
            else
            {
                $file=fopen("welcome.txt","r");
            }
            ?>
    B.  创建自定义错误处理器
        error_function(error_level,error_message,error_file,error_line,error_context)
        http://www.runoob.com/php/php-error.html
        eg:
            function customError($errno, $errstr)// 错误处理函数
            {
                echo "<b>Error:</b> [$errno] $errstr<br>";
                echo "脚本结束";
                die();
            }
            set_error_handler("customError");// 设置错误处理函数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

异常

try throw catch结构来实现,总体和Java是类似的
可以抛出多个异常被多个catch捕获并处理
可以重新抛出异常,对用户显示友好的提示,对后台显示真正的错误位置(在catch块中再次throw)
顶层异常处理器,用于处理所有未被捕获的异常,set_exception_handler()
  • 1
  • 2
  • 3
  • 4
  • 5

过滤器

过滤的目的是防止非安全来源的数据对系统造成破坏
表单数据,cookies,web服务数据,服务器变量,数据库查询结果都是外部数据都需要过滤
filter_var() - 通过一个指定的过滤器来过滤单一的变量
filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
filter_input - 获取一个输入变量,并对它进行过滤
filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
参数包含待过滤的变量和过滤器(例如,FILTER_VALIDATE_EMAIL用于验证传入的变量是否是一个email地址)
过滤器种类和过滤函数参考链接http://www.runoob.com/php/php-ref-filter.html
过滤器有两类Validating和Sanitizing
V用于验证用户输入,有严格的格式规则(URL,E-mail),如果成功则返回预期的类型否则返回false
S用于允许或禁止字符串中指定的字符,无数据格式规则,始终返回字符串
通过filter callback可以调用自己设置的过滤器,参数有一个关联数组,键为options
<?php
function convertSpace($string)
{
    return str_replace("_", ".", $string);
}

$string = "www_runoob_com!";

echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace"));
?>
http://www.runoob.com/php/php-filter.html
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

PHP与mySQL

A.  连接和关闭数据库
有mysqli和PDO两种办法,mysqli专用,PDO通用
mysqli:
  • 1
  • 2
  • 3
  • 4
        <?php
        $servername = "localhost";
        $username = "username";
        $password = "password";

        // 创建连接
        $conn = new mysqli($servername, $username, $password);

        // 检测连接
        if ($conn->connect_error) {
            die("连接失败: " . $conn->connect_error);
        } 
        echo "连接成功";
        //关闭连接
        $conn->close();
        ?>
    PDO:
        <?php
        $servername = "localhost";
        $username = "username";
        $password = "password";

        try {
            //需要指定数据库名
            $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
            echo "连接成功"; 
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
        //关闭连接
        $conn = null;
        ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
B.  创建数据库
mysqli:
  • 1
  • 2
  • 3
        $sql = "CREATE DATABASE myDB";
        if ($conn->query($sql) === TRUE) {
            echo "数据库创建成功";
        } else {
            echo "Error creating database: " . $conn->error;
        }
    PDO:
        try { 
            $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password); 

            // 设置 PDO 错误模式为异常 
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
            $sql = "CREATE DATABASE myDBPDO"; 

            // 使用 exec() ,因为没有结果返回,如果出错会抛出异常进入catch块 
            $conn->exec($sql); 

            echo "数据库创建成功<br>"; 
        } 
        catch(PDOException $e) 
        { 
            echo $sql . "<br>" . $e->getMessage(); 
        } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
C.  创建表
    和标准sql一样的办法,执行过程与B类似,mysqli判断返回值真假,PDO直接exec()
D.  插入、修改、删除数据
    和标准sql一样的办法,执行过程与B类似,mysqli判断返回值真假,PDO直接exec()
E.  查询数据
mysqli:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "myDB";

    // 创建连接
    $conn = new mysqli($servername, $username, $password, $dbname);
    // 检测连接
    if ($conn->connect_error) {
        die("连接失败: " . $conn->connect_error);
    } 

    $sql = "SELECT id, firstname, lastname FROM MyGuests";
    $result = $conn->query($sql);//返回查询结果集

    if ($result->num_rows > 0) {
        // 输出每行数据
        while($row = $result->fetch_assoc()) {//fetch_assoc用于取出每一个结果
            echo "<br> id: ". $row["id"]. " - Name: ". $row["firstname"]. " " . $row["lastname"];
        }
    } else {
        echo "0 个结果";
    }
    $conn->close();
    ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
PDO:
  • 1
  • 2
    <?php
    echo "<table style='border: solid 1px black;'>";
    echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th><th>Email</th><th>Reg date</th></tr>";//设置表头

    class TableRows extends RecursiveIteratorIterator { //构造出一个表的结构
        function __construct($it) { 
            parent::__construct($it, self::LEAVES_ONLY); 
        }

        function current() {
            return "<td style='width: 150px; border: 1px solid black;'>" . parent::current(). "</td>";
        }

        function beginChildren() { 
            echo "<tr>"; 
        } 

        function endChildren() { 
            echo "</tr>" . "\n";
        } 
    } 

    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "myDBPDO";

    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = $conn->prepare("SELECT * FROM MyGuests"); 
        $stmt->execute();

        // 设置结果集为关联数组
        $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 

        foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { 
            echo $v;
        }
        $dsn = null;
    }
    catch(PDOException $e)
    {
        echo "Error: " . $e->getMessage();
    }
    $conn = null;
    echo "</table>";
    ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
F.  预处理语句
目的:
    在大量重复操作时,提高数据库操作效率,节省带宽
    防止SQL注入攻击,
mysqli:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
        <?php
        $servername = "localhost";
        $username = "username";
        $password = "password";
        $dbname = "myDB";

        // 创建连接
        $conn = new mysqli($servername, $username, $password, $dbname);

        // 检测连接
        if ($conn->connect_error) {
            die("连接失败: " . $conn->connect_error);
        }

        // 预处理及绑定
        $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)");
        $stmt->bind_param("sss", $firstname, $lastname, $email);//sss表示后续共三个参数,每个参数都是string类型 i(int) d(double) s(string) b(BLOB二进制大对象)

        // 设置参数并执行
        $firstname = "John";
        $lastname = "Doe";
        $email = "[email protected]";
        $stmt->execute();

        $firstname = "Mary";
        $lastname = "Moe";
        $email = "[email protected]";
        $stmt->execute();

        $firstname = "Julie";
        $lastname = "Dooley";
        $email = "[email protected]";
        $stmt->execute();

        echo "新记录插入成功";

        $stmt->close();
        $conn->close();
        ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
PDO:
  • 1
  • 2
        <?php
        $servername = "localhost";
        $username = "username";
        $password = "password";
        $dbname = "myDBPDO";

        try {
            $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
            // 设置 PDO 错误模式为异常
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            // 预处理 SQL 并绑定参数,这里与mysqli略有不同
            $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) 
            VALUES (:firstname, :lastname, :email)");
            $stmt->bindParam(':firstname', $firstname);
            $stmt->bindParam(':lastname', $lastname);
            $stmt->bindParam(':email', $email);

            // 插入行
            $firstname = "John";
            $lastname = "Doe";
            $email = "[email protected]";
            $stmt->execute();

            // 插入其他行
            $firstname = "Mary";
            $lastname = "Moe";
            $email = "[email protected]";
            $stmt->execute();

            // 插入其他行
            $firstname = "Julie";
            $lastname = "Dooley";
            $email = "[email protected]";
            $stmt->execute();

            echo "新记录插入成功";
        }
        catch(PDOException $e)
        {
            echo $sql . "<br>" . $e->getMessage();
        }
        $conn = null;
        ?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章