为了账号安全,请及时绑定邮箱和手机立即绑定

PHP进阶篇

Jason PHP开发工程师
难度初级
时长 9小时28分
学习人数
综合评分8.90
570人评价 查看评价
9.3 内容实用
8.8 简洁易懂
8.6 逻辑清晰
  • PHP中一个数据库可能有一个或者多个扩展,其中既有官方的,也有第三方提供的。像Mysql常用的扩展有原生的mysql库,也可以使用增强版的mysqli扩展,还可以使用PDO进行连接与操作。

    不同的扩展提供基本相近的操作方法,不同的是可能具备一些新特性,以及操作性能可能会有所不同。

    mysql扩展进行数据库连接的方法:

    $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');

    mysqli扩展:

    $link = mysqli_connect('mysql_host', 'mysql_user', 'mysql_password');

    PDO扩展

    $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';
    $dbh = new PDO($dsn, $user, $password);


    查看全部
    0 采集 收起 来源:PHP数据库扩展

    2018-12-27

  • PHP通过安装相应的扩展来实现数据库操作,现代应用程序的设计离不开数据库的应用,当前主流的数据库有MsSQL,MySQL,Sybase,Db2,Oracle,PostgreSQL,Access等,这些数据库PHP都能够安装扩展来支持,一般情况下常说的LAMP架构指的是:Linux、Apache、Mysql、PHP,因此Mysql数据库在PHP中的应用非常广泛,我们会在本章中简单的了解Mysql的操作方法。

    查看全部
  • 在异常被捕获之后,我们可以通过异常处理对象获取其中的异常信息,前面我们已经了解捕获方式,以及获取基本的错误信息。

    在实际应用中,我们通常会获取足够多的异常信息,然后写入到错误日志中。

    通过我们需要将报错的文件名、行号、错误信息、异常追踪信息等记录到日志中,以便调试与修复问题。


    try {

        throw new Exception('wrong');

    } catch(Exception $ex) {

        $msg = 'Error:'.$ex->getMessage()."\n";

        $msg.= $ex->getTraceAsString()."\n";

        $msg.= '异常行号:'.$ex->getLine()."\n";

        $msg.= '所在文件:'.$ex->getFile()."\n";

        //将异常信息记录到日志中

     PHP异常处理之   file_put_contents('error.log', $msg);

    }


    查看全部
  • 在了解了异常处理的基本原理之后,我们可以通过try catch来捕获异常,我们将执行的代码放在try代码块中,一旦其中的代码抛出异常,就能在catch中捕获。

    这里我们只是通过案例来了解try catch的机制以及异常捕获的方法,在实际应用中,不会轻易的抛出异常,只有在极端情况或者非常重要的情况下,才会抛出异常,抛出异常,可以保障程序的正确性与安全,避免导致不可预知的bug。

    一般的异常处理流程代码为:

    try {
        throw new Exception('wrong');
    } catch(Exception $ex) {
        echo 'Error:'.$ex->getMessage().'<br>';
        echo $ex->getTraceAsString().'<br>';
    }
    echo '异常处理后,继续执行其他代码';


    查看全部
  • PHP具有很多异常处理类,其中Exception是所有异常处理的基类。

    Exception具有几个基本属性与方法,其中包括了:

    message 异常消息内容
    code 异常代码
    file 抛出异常的文件名
    line 抛出异常在该文件的行数

    其中常用的方法有:

    getTrace 获取异常追踪信息
    getTraceAsString 获取异常追踪信息的字符串
    getMessage 获取出错信息

    如果必要的话,可以通过继承Exception类来建立自定义的异常处理类。

    //自定义的异常类,继承了PHP的异常基类Exception
    class MyException extends Exception {
        function getInfo() {
            return '自定义错误信息';
        }
    }
    
    try {
        //使用异常的函数应该位于 "try"  代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
        throw new MyException('error');//这里规定如何触发异常。注意:每一个 "throw" 必须对应至少一个 "catch",当然可以对应多个"catch"
    } catch(Exception $e) {//"catch" 代码块会捕获异常,并创建一个包含异常信息的对象
        echo $e->getInfo();//获取自定义的异常信息
        echo $e->getMessage();//获取继承自基类的getMessage信息
    }


    查看全部
  • 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被执行。

    既然抛出异常会中断程序执行,那么为什么还需要使用异常处理?

    异常抛出被用于在遇到未知错误,或者不符合预先设定的条件时,通知客户程序,以便进行其他相关处理,不至于使程序直接报错中断。

    当代码中使用了try catch的时候,抛出的异常会在catch中捕获,否则会直接中断。

     

    1、基本语法
            try{
                //可能出现错误或异常的代码
                //catch表示捕获,Exception是php已定义好的异常类
            } catch(Exception $e){
                //对异常处理,方法:
                    //1、自己处理
                    //2、不处理,将其再次抛出
            }
    2、处理处理程序应当包括:
    Try - 使用异常的函数应该位于 "try"  代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
    Throw - 这里规定如何触发异常。注意:每一个 "throw" 必须对应至少一个 "catch",当然可以对应多个"catch"
    Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象。

    //创建可抛出一个异常的函数
    function checkNum($number){
         if($number>1){
             throw new Exception("异常提示-数字必须小于等于1");
         }
         return true;
     }
     
    //在 "try" 代码块中触发异常
     try{
         checkNum(2);
         //如果异常被抛出,那么下面一行代码将不会被输出
         echo '如果能看到这个提示,说明你的数字小于等于1';
     }catch(Exception $e){
         //捕获异常
         echo '捕获异常: ' .$e->getMessage();
     }

    上面代码将获得类似这样一个错误:

    捕获异常:: 异常提示-数字必须小于等于1

    例子解释:

    上面的代码抛出了一个异常,并捕获了它:

    创建 checkNum() 函数。它检测数字是否大于 1。如果是,则抛出一个异常。
    在 "try" 代码块中调用 checkNum() 函数。
    checkNum() 函数中的异常被抛出
    "catch" 代码块接收到该异常,并创建一个包含异常信息的对象 ($e)。
    通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息


    查看全部
  • 跟Unix系统命令类似,PHP使用unlink函数进行文件删除。

    unlink($filename);

    删除文件夹使用rmdir函数,文件夹必须为空,如果不为空或者没有权限则会提示失败。

    rmdir($dir);

    如果文件夹中存在文件,可以先循环删除目录中的所有文件,然后再删除该目录,循环删除可以使用glob函数遍历所有文件。

    foreach (glob("*") as $filename) {
       unlink($filename);
    }


    查看全部
  • 与读取文件对应,PHP写文件也具有两种方式,最简单的方式是采用file_put_contents

    $filename = './test.txt';
    $data = 'test';
    file_put_contents($filename, $data);

    上例中,$data参数可以是一个一维数组,当$data是数组的时候,会自动的将数组连接起来,相当于$data=implode('', $data);

    同样的,PHP也支持类似C语言风格的操作方式,采用fwrite进行文件写入。

    $fp = fopen('./test.txt', 'w');
    fwrite($fp, 'hello');
    fwrite($fp, 'world');
    fclose($fp);


    查看全部
  • 通过filesize函数可以取得文件的大小,文件大小是以字节数表示的。

    $filename = '/data/webroot/usercode/resource/test.txt';
    $size = filesize($filename);

    如果要转换文件大小的单位,可以自己定义函数来实现。

    function getsize($size, $format = 'kb') {
        $p = 0;
        if ($format == 'kb') {
            $p = 1;
        } elseif ($format == 'mb') {
            $p = 2;
        } elseif ($format == 'gb') {
            $p = 3;
        }
        $size /= pow(1024, $p);
        return number_format($size, 3);
    }
    $filename = '/data/webroot/usercode/code/resource/test.txt';
    $size = filesize($filename);
    $size = getsize($size, 'kb'); //进行单位转换echo $size.'kb';

    值得注意的是,没法通过简单的函数来取得目录的大小,目录的大小是该目录下所有子目录以及文件大小的总和,因此需要通过递归的方法来循环计算目录的大小。


    查看全部
  • 文件有很多元属性,包括:文件的所有者、创建时间、修改时间、最后的访问时间等。

    fileowner:获得文件的所有者
    filectime:获取文件的创建时间
    filemtime:获取文件的修改时间
    fileatime:获取文件的访问时间

    其中最常用的是文件的修改时间,通过文件的修改时间,可以判断文件的时效性,经常用在静态文件或者缓存数据的更新。

    $mtime = filemtime($filename);
    echo '修改时间:'.date('Y-m-d H:i:s', filemtime($filename));


    查看全部
  • 一般情况下在对文件进行操作的时候需要先判断文件是否存在,PHP中常用来判断文件存在的函数有两个is_filefile_exists.

    $filename = './test.txt';
    if (file_exists($filename)) {
        echo file_get_contents($filename);
    }

    如果只是判断文件存在,使用file_exists就行,file_exists不仅可以判断文件是否存在,同时也可以判断目录是否存在,从函数名可以看出,is_file是确切的判断给定的路径是否是一个文件

    $filename = './test.txt';
    if (is_file($filename)) {
        echo file_get_contents($filename);
    }

    更加精确的可以使用is_readableis_writeable在文件是否存在的基础上,判断文件是否可读与可写

    $filename = './test.txt';
    if (is_writeable($filename)) {
        file_put_contents($filename, 'test');
    }
    if (is_readable($filename)) {
        echo file_get_contents($filename);
    }



    PHP的file_exists = is_dir + is_file。
    * 如果要判断目录是否存在,请优先考虑函数 is_dir(directory)
    * 如果要判断文件是否存在,请优先考虑函数 is_file(filepath)

    查看全部
  • PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,可以将整个文件全部读取到一个字符串中。

    $content = file_get_contents('./test.txt');

    file_get_contents也可以通过参数控制读取内容的开始点以及长度。

    $content = file_get_contents('./test.txt', null, null, 100, 500);

    PHP也提供类似于C语言操作文件的方法,使用fopen,fgets,fread等方法,fgets可以从文件指针中读取一行,freads可以读取指定长度的字符串。

    $fp = fopen('./text.txt', 'rb');
    while(!feof($fp)) {
        echo fgets($fp); //读取一行
    }
    fclose($fp);

     

    $fp = fopen('./text.txt', 'rb');
    $contents = '';
    while(!feof($fp)) {
        $contents .= fread($fp, 4096); //一次读取4096个字符
    }
    fclose($fp);

    使用fopen打开的文件,最好使用fclose关闭文件指针,以避免文件句柄被占用。


    查看全部
  • session可以用来存储多种类型的数据,因此具有很多的用途,常用来存储用户的登录信息,购物车数据,或者一些临时使用的暂存数据等。

    用户在登录成功以后,通常可以将用户的信息存储在session中,一般的会单独的将一些重要的字段单独存储,然后所有的用户信息独立存储。

    $_SESSION['uid'] = $userinfo['uid'];
    $_SESSION['userinfo'] = $userinfo;

    一般来说,登录信息既可以存储在sessioin中,也可以存储在cookie中,他们之间的差别在于session可以方便的存取多种数据类型,而cookie只支持字符串类型,同时对于一些安全性比较高的数据,cookie需要进行格式化与加密存储,而session存储在服务端则安全性较高


    查看全部
  • 删除某个session值可以使用PHP的unset函数,删除后就会从全局变量$_SESSION中去除,无法访问。

    session_start();
    $_SESSION['name'] = 'jobs';
    
    echo $_SESSION['name']; //提示name不存在

    如果要删除所有的session,可以使用session_destroy函数销毁当前session,session_destroy会删除所有数据,但是session_id仍然存在。

    session_start();
    $_SESSION['name'] = 'jobs';
    $_SESSION['time'] = time();

    值得注意的是,session_destroy并不会立即的销毁全局变量$_SESSION中的值,只有当下次再访问的时候,$_SESSION才为空,因此如果需要立即销毁$_SESSION,可以使用unset函数。

    session_start();
    $_SESSION['name'] = 'jobs';
    $_SESSION['time'] = time();
    unset($_SESSION);
    session_destroy(); 
    var_dump($_SESSION); //此时已为空

    如果需要同时销毁cookie中的session_id,通常在用户退出的时候可能会用到,则还需要显式的调用setcookie方法删除session_id的cookie值。


    查看全部
  • 在PHP中使用session非常简单,先执行session_start方法开启session,然后通过全局变量$_SESSION进行session的读写。

    session_start();
    $_SESSION['test'] = time();
    var_dump($_SESSION);

    session会自动的对要设置的值进行encode与decode,因此session可以支持任意数据类型,包括数据与对象等。

    session_start();
    $_SESSION['ary'] = array('name' => 'jobs');
    $_SESSION['obj'] = new stdClass();
    var_dump($_SESSION);

    默认情况下,session是以文件形式存储在服务器上的,因此当一个页面开启了session之后,会独占这个session文件,这样会导致当前用户的其他并发访问无法执行而等待。可以采用缓存或者数据库的形式存储来解决这个问题,这个我们会在一些高级的课程中讲到。


    查看全部
    0 采集 收起 来源:使用session

    2018-12-27

举报

0/150
提交
取消
课程须知
需要有一定的网页基础知识如HTML、CSS样式等,并且已经学习完成《PHP入门篇》对PHP已经有了简单的了解,如变量、常量、数据类型等。
老师告诉你能学到什么?
全面的掌握PHP的理论知识与实践中的应用方法,提高编程能力与掌握网页开发技能。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!