zoukankan      html  css  js  c++  java
  • PHP 常用函数总结(二)

    4、PHP处理数据库的常用函数。

    汇总表

    PHP 5 MySQLi 函数

    函数描述
    mysqli_affected_rows() 返回前一个 Mysql 操作的受影响行数。
    mysqli_autocommit() 打开或关闭自动提交数据库修改功能。
    mysqli_change_user() 更改指定数据库连接的用户。
    mysqli_character_set_name() 返回数据库连接的默认字符集。
    mysqli_close() 关闭先前打开的数据库连接。
    mysqli_commit() 提交当前事务。
    mysqli_connect_errno() 返回最后一次连接调用的错误代码。
    mysqli_connect_error() 返回上一次连接错误的错误描述。
    mysqli_connect() 打开到 Mysql 服务器的新连接。
    mysqli_data_seek() 调整结果指针到结果集中的一个任意行。
    mysqli_debug() 执行调试操作。
    mysqli_dump_debug_info() 转储调试信息到日志中。
    mysqli_errno() 返回最近的函数调用产生的错误代码。
    mysqli_error_list() 返回最近的函数调用产生的错误列表。
    mysqli_error() 返回字符串描述的最近一次函数调用产生的错误代码。
    mysqli_fetch_all() 抓取所有的结果行并且以关联数据,数值索引数组,或者两者皆有的方式返回结果集。
    mysqli_fetch_array() 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果。
    mysqli_fetch_assoc() 以一个关联数组方式抓取一行结果。
    mysqli_fetch_field_direct() 以对象返回结果集中单字段的元数据。
    mysqli_fetch_field() 以对象返回结果集中的下一个字段。
    mysqli_fetch_fields() 返回代表结果集中字段的对象数组。
    mysqli_fetch_lengths() 返回结果集中当前行的列长度。
    mysqli_fetch_object() 以对象返回结果集的当前行。
    mysqli_fetch_row() 从结果集中抓取一行并以枚举数组的形式返回它。
    mysqli_field_count() 返回最近一次查询获取到的列的数目。
    mysqli_field_seek() 设置字段指针到特定的字段开始位置。
    mysqli_field_tell() 返回字段指针的位置。
    mysqli_free_result() 释放与某个结果集相关的内存。
    mysqli_get_charset() 返回字符集对象。
    mysqli_get_client_info() 返回字符串类型的 Mysql 客户端版本信息。
    mysqli_get_client_stats() 返回每个客户端进程的统计信息。
    mysqli_get_client_version() 返回整型的 Mysql 客户端版本信息。
    mysqli_get_connection_stats() 返回客户端连接的统计信息。
    mysqli_get_host_info() 返回 MySQL 服务器主机名和连接类型。
    mysqli_get_proto_info() 返回 MySQL 协议版本。
    mysqli_get_server_info() 返回 MySQL 服务器版本。
    mysqli_get_server_version() 返回整型的 MySQL 服务器版本信息。
    mysqli_info() 返回最近一次执行的查询的检索信息。
    mysqli_init() 初始化 mysqli 并且返回一个由 mysqli_real_connect() 使用的资源类型。
    mysqli_insert_id() 返回最后一次查询中使用的自动生成 id。
    mysql_kill() 请求服务器终结某个 MySQL 线程。
    mysqli_more_results() 检查一个多语句查询是否还有其他查询结果集。
    mysqli_multi_query() 在数据库上执行一个或多个查询。
    mysqli_next_result() 从 mysqli_multi_query() 中准备下一个结果集。
    mysqli_num_fields() 返回结果集中的字段数。
    mysqli_num_rows() 返回结果集中的行数。
    mysqli_options() 设置选项。
    mysqli_ping() Ping 一个服务器连接,或者如果那个连接断了尝试重连。
    mysqli_prepare() 准备一条用于执行的 SQL 语句。
    mysqli_query() 在数据库上执行查询。
    mysqli_real_connect() 打开一个到 Mysql 服务端的新连接。
    mysqli_real_escape_string() 转义在 SQL 语句中使用的字符串中的特殊字符。
    mysqli_real_query() 执行 SQL 查询。
    mysqli_reap_async_query() 返回异步查询的结果。
    mysqli_refresh() 刷新表或缓存,或者重置复制服务器信息。
    mysqli_rollback() 回滚当前事务。
    mysqli_select_db() 改变连接的默认数据库。
    mysqli_set_charset() 设置默认客户端字符集。
    mysqli_set_local_infile_default() 清除用户为 load local infile 命令定义的处理程序。
    mysqli_set_local_infile_handler() 设置 LOAD DATA LOCAL INFILE 命令执行的回调函数。
    mysqli_sqlstate() 返回前一个 Mysql 操作的 SQLSTATE 错误代码。
    mysqli_ssl_set() 使用 SSL 建立安装连接。
    mysqli_stat() 返回当前系统状态。
    mysqli_stmt_init() 初始化一条语句并返回一个由 mysqli_stmt_prepare() 使用的对象。
    mysqli_store_result() 传输最后一个查询的结果集。
    mysqli_thread_id() 返回当前连接的线程 ID。
    mysqli_thread_safe() 返回是否设定了线程安全。
    mysqli_use_result() 初始化一个结果集的取回。
    mysqli_warning_count() 返回连接中最后一次查询的警告数量。
     
    $servername = "localhost";
    
    $username = "username";
    
    $password = "password";
    
    $dbname ="dbname";

    Mysqli:

    面向对象:

    • 连接数据库
      //语法mysqli(host,username,password,dbname,port,socket);
      
          $conn = new mysqli($servername, $username, $password, $dbname);
      
          //检查连接
      
          if ($conn->connect_error) {
      
            die('连接失败' . $conn->connect_error);
      
          }
      
          注意:$connect_error 是从PHP 5.2.9开始添加的,要兼容之前的 版本请用以下代码代替:
      
          //检查连接
      
          if (mysqli_connect_error()) {
      
            die('连接失败' . mysqli_connect_error());
      
          }
    • 创建数据库
      $sql = "CREATE DATABASE table_name";
      if ($conn->query $sql) === true) {
          echo "数据库创建成功";
      } else {
          echo "Error creating database: " . $conn->error();
      }
    • 创建表
      $sql  = "CREATE TABLE table_name (
              id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
              user varchar(30)   NOT NULL,
              username varchar(30) ,
              email    varchar(50),
              reg_date  timestamp
              ) engine=Innodb default charset=utf8 ";  
      
      if ($conn->query($sql) === TRUE) {
          echo "Table MyGuests created successfully";
      } else {
          echo "创建数据表错误: " . $conn->error;
      }
    • 插入数据
      //插入一条
      $sql = "INSERT INTO table_name (`user`, `username`, `reg_date`) VALUES ('user_access', 'user_nickname', NOW())";
      if($conn->query($sql)===true){
          echo " inserted ok";
      }
      //插入多条
      //关闭自动提交
      $conn->autocommit(FALSE);
      try { 
      $sql = "INSERT INTO table_name (`user`, `username`, `reg_date`) VALUES ('user_access1', 'user_nickname1', NOW())";
      $sql .= "INSERT INTO table_name (`user`, `username`, `reg_date`) VALUES ('user_access2', 'user_nickname2', NOW())"; 
      $sql .= "INSERT INTO table_name (`user`, `username`, `reg_date`) VALUES ('user_access3', 'user_nickname3', NOW())";
      
      if ($conn->multi_query($sql===true)) {
          $conn->commit();
      }else{
        $conn->rollback();
      }
      //开启自动提交 $conn->autocommit(TRUE);
    • 更新数据 
      $sql = "update  table_name set username='newname' where user='user_access1'";
      $conn->query($sql);
    • 查询数据
      /**
          *获取用户信息
          *@access public
          *@param int $userId [用户的id]
          *@return array $data
          */
          public function getUserInfo($userId)
          {    
              $data = array();
              $sql = "select `user`.id,`user`.user,`user`.username,`user`.sex from `user` where  `user`.id={$userId}";
              //mysqli_result类
              $result = $this->db->query($sql);
              if ($result->num_rows>0) {
                  //返回一条记录
                  $data = $result->fetch_assoc();
              }
              //释放资源free()或free_result()或close()
              $result->free();
              return $data;
          }
      
      /**
          *获取用户信息
          *@access public
          *@param int $preId [上一次获取的用户中最后一名用户的id]
          *@param int $size [页码]
          *@return array $data
          */
          public function getAllUser($preId=0, $size=15)
          {    
              $data = array();
              
              $sql = "select `user`.id,`user`.user,`user`.username,`user`.sex from `user` where  `user`.id>{$preId} limit {$size}";
              $result = $this->db->query($sql);
              if ($result->num_rows>0) {
                  //返回所有记录
                  $data = $result->fetch_all();
              }
              
              return $data;
          }
    • 删除数据
      $sql = "delete from table_name where user='user_access1'";
      $conn->query($sql);
    • 事务处理(上锁操作)
    • 预处理(防SQL注入,查询语句一般不要用)
      $sql ="insert into table_name ('user', 'username', 'reg_date') values (?, ?, ?)";
      
      //预处理和绑定参数
      $stmt = $conn->prepare($sql);
      //第一个参数表明变量类型,有i(int),d(double),s(string),b(blob)
      $stmt->bind_param('sss', $user, $username, $reg_date);
      
      //设置参数并执行
      $user = 'user1'$username = 'username1'$reg_date = date('Y-m-d H:i:s', time());
      $stmt->execute();
      
      $user = 'user2'$username = 'username2'$reg_date = date('Y-m-d H:i:s', time());
      $stmt->execute();
      
      $user = 'user3'$username = 'username3'$reg_date = date('Y-m-d H:i:s', time());
      $stmt->execute();
      $stmt->close();
    • 关闭连接

      $conn->close();

    面向过程:

    • 连接数据库
       //语法mysqli_connect(host,username,password,dbname,port,socket);
        $conn = mysqli_connect($servername,%username, $password, $dbname );
    
        if (!$conn) {
          die('Connection failed:' . mysqli_connect_error());
        }
    • 创建数据库
      $sql = "CREATE DATABASE table_name";
      if (mysqli_query($conn, $sql)) {
          echo "数据库创建成功";
      } else {
          echo "Error creating database: " . mysqli_error($conn);
      }
    • 创建表
      $sql  = "CREATE TABLE table_name (
              id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
              user varchar(30)   NOT NULL,
              username varchar(30) ,
              email    varchar(50),
              reg_date  timestamp
              ) engine=Innodb default charset=utf8 ";  
      
      if (mysqli_query($conn, $sql) === TRUE) {
          echo "Table MyGuests created successfully";
      } else {
          echo "创建数据表错误: " . mysqli_error($conn);
      }
    • 插入数据
      //插入一条
      $sql = "INSERT INTO table_name (`user`, `username`, `reg_date`) VALUES ('user_access', 'user_nickname', NOW())";
      if(mysqli_query($conn, $sql)===true){
          echo " inserted ok";
      }
      //插入多条
      //关闭自动提交
      mysqli_autocommit($conn, FALSE);
      try { 
      $sql = "INSERT INTO table_name (`user`, `username`, `reg_date`) VALUES ('user_access1', 'user_nickname1', NOW())";
      $sql .= "INSERT INTO table_name (`user`, `username`, `reg_date`) VALUES ('user_access2', 'user_nickname2', NOW())"; 
      $sql .= "INSERT INTO table_name (`user`, `username`, `reg_date`) VALUES ('user_access3', 'user_nickname3', NOW())";
      
      if (mysqli_multi_query($conn, $sql)) {
          mysqli_commit($conn);
      } else {
      mysqli_rollback($conn);
      }
      //开启自动提交 mysqli_autocommit($conn, TRUE);
    • 更新数据
      $sql = "update  table_name set username='newname' where user='user_access1'";
      mysqli_query($conn, $sql);
    • 查询数据
      $data = array();
      $sql = "select * from `user` ";
      $result = mysqli_query($conn, $mysql);
      if (mysqli_num_rows($result)>0) {
              $data = mysqli_fetch_all($result);
      }
      mysqli_free_result($result);
    • 删除数据
      $sql = "delete from table_name where user='user_access1'";
      mysqli_query($conn, $sql);
    • 事务处理(上锁操作)
    • 预处理(防SQL注入,查询语句一般不要用)
      $sql ="insert into table_name ('user', 'username', 'reg_date') values (?, ?, ?)";
        
      // 为 mysqli_stmt_prepare() 初始化 statement 对象
      $stmt = mysqli_stmt_init($conn);
      //预处理和绑定参数
      if (mysqli_stmt_prepare($stmt, $sql)) {
          //绑定参数,变量类型有i(int),d(double),s(string),b(blob)
          mysqli_stmt_bind_param($stmt, 'sss', $user, $username, $reg_date);   
          //设置参数并执行
         $user = 'user1'$username = 'username1'$reg_date = date('Y-m-d H:i:s', time());
         mysqli_stmt_execute($stmt);
      
         $user = 'user2'$username = 'username2'$reg_date = date('Y-m-d H:i:s', time());
         mysqli_stmt_execute($stmt);
      
          $user = 'user3'$username = 'username3'$reg_date = date('Y-m-d H:i:s', time());
          mysqli_stmt_execute($stmt);
          mysqli_stmt_close($stmt);
      
      }
    • 关闭连接

      mysqli_close($conn);

    PDO(面向对象):

      提示: 使用 PDO 的最大好处是在数据库查询过程出现问题时可以使用异常类来 处理问题。如果 try{ } 代码块出现异常,脚本会停止执行并会跳到第一个 catch(){ } 代码块执行代码。

      如果PDO::找不到PDO类的话,需要在前面加入反斜杠表示空间根目录,如PDO::

    • 连接数据库
    /*语法PDO($dsn,$username,$password,$opts);
    
      $opts = array(PDO::ATTR_AUTOCOMMIT=>0, PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION, PDO::ATTR_AUTOCOMMIT=>0 #关闭自动提交, PDO::ATTR_TIMEOUT => 3 #设置超时时间);
    
      $dsn = "mysql:host=localhost;port=3307;dbname=db";
    
      或者$dsn = "mysql:unix_socket=/tmp/mysql.sock;dbname=db";
    
      echo $pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);//setAttribute 可以设置属性
    
      $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);  #设置获取的方式
      
    
      执行sql语句: exec() 、query()、 perpare();
    
      1、query用来处理有结果集的,如select, 返回 PDOStatement 对象,失败返回false(当为 PDO::ERRMODE_SILENT,这也是默认的值)
      2、exec用来处理有返回影响行数的(int),如  insert(插入的行数)、 delete(删除的行数) 、update(和原数值不等才算), 失败返回false (当为 PDO::ERRMODE_SILENT,这也是默认的值)
    
      3、prepare 执行所有sql,可以完全替代 query,exec的功能
    
      错误报告是针对执行的sql出错时
    
      PDO::ERRMODE_SILENT :默认 不提示任何错误 ,连接时无论如何都会提示,只有在执行后面的方法时才会起作用
      PDO::ERRMODE_WARNING : 警告
      PDO::ERRMODE_EXCEPTION:异常(推荐使用) 用try catch捕获,也可以手动抛出异常 new PDOException($message, $code, $previous)
    
      */
    
      try {
    
        $conn = new PDO("mysql:host={$servername};dbname={$dbname}", $username, $password);
    
        $conn -> setAttribute(PDO::ERRMODE, PDO::ERRMODE_EXCEPTION);  #设置获取的方式
      }
    
      catch(PDOException $e)
    
      {
    
        echo $e->getMessage();
    
      }
    
      注意PDO 连接数据库时必须指明需要连接的数据库名,否则会报异常。
    • 创建数据库
      $sql = "CREATE DATABASE dbname";
      //使用exec(),返回受影响的行数。因为没有结果集返回。
      //注意与execute()区分,execute函数用于执行预处理语句,execute函数需要与prepare函数配合使用。
      $conn->exec($sql);
    • 创建表
      $sql  = "CREATE TABLE table_name (
              id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
              user varchar(30)   NOT NULL,
              username varchar(30) ,
              email    varchar(50),
              reg_date  timestamp
              ) engine=Innodb default charset=utf8 ";    
      //提示:mysql 5种时间格式根据实际需求选择
      $conn->exec($sql);
    • 插入数据
      //插入一条
      $sql = "INSERT INTO table_name (`user`, `username`, `reg_date`) VALUES ('user_access', 'user_nickname', NOW())";
      $conn->exec($sql);
      //插入多条
      //关闭自动提交
      $conn->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
      try { 
      $sql1 = "INSERT INTO table_name (`user`, `username`, `reg_date`) VALUES ('user_access1', 'user_nickname1', NOW())";
      $sql2 = "INSERT INTO table_name (`user`, `username`, `reg_date`) VALUES ('user_access2', 'user_nickname2', NOW())";
      $sql3 = "INSERT INTO table_name (`user`, `username`, `reg_date`) VALUES ('user_access3', 'user_nickname3', NOW())";
      //开启事务 $conn->beginTransaction(); $conn->exec($sql1); $conn->exec($sql2); $conn->exec($sql3); //提交事务 $conn->commit(); } catch(PDOException $e) { //事务执行失败,回滚到执行之前状态 $conn->rollback(); }
      //还原自动提交
      $conn->setAttribute(PDO::ATTR_AUTOCOMMIT,1);
       

      提示:PDO::lastinsertId([column])可用于获取最后插入行的id号或指定 列的字符串。

    • 更新数据
      $sql = "update table_name set username='newname' where user='user_access1'";
      $conn->exec($sql);
    • 查询数据
      $sql = "select * from table_name";
      $stmt = $conn->query($sql);
      //受影响的行数
      $rowCount = $stmt->rowCount();
      $data = array();
      if ($rowCount>0) {
          //如果不想在fetch()或fetchAll()中重复写入参数,可以直接设置
          //$stmt->setFetchMode(PDO::FETCH_ASSOC);
          //方法1,通过fetch()一条一条遍历输出
          while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
              $data[] = $row;
          }
          //方法2,通过fetchAll() 直接返回一个二维数组集合
          //$data = $stmt->fetchAll(PDO::FETCH_ASSOC) ;           
      }
      
      提示:$stmt->fetchAll(PDO::FETCH_COLUMN,$n) 可直接从结果集中获取第$n+1  列的所有值。     
    • 删除数据
      $sql = "delete from table_name where user='user_access1'";
      $conn->exec($sql);
    • 事务处理(上锁操作)
    • 预处理(防SQL注入)
      //预处理语句并绑定参数
      $sql = "INSERT INTO table_name (`user`, `username`, `reg_date`) VALUES (:user, :username, :reg_date)";
      $stmt = $conn->prepare($sql);
      $stmt ->bindParam(':user', $user, PDO::PARAM_STR);
      $stmt ->bindParam(':username', $username, PDO::PARAM_STR);
      $stmt ->bindParam(':reg_date', $reg_date);
      
      
      $user = 'newuser1';
      $username = 'newusername1';
      $reg_date = date('Y-m-d H:i:s',time());
      $stmt->execute();
      
      $user = 'newuser2';
      $username = 'newusername2;
      $reg_date = date('Y-m-d H:i:s',time());
      $stmt->execute();
      
      $user = 'newuser3';
      $username = 'newusername3';
      $reg_date = date('Y-m-d H:i:s',time());
      $stmt->execute();
      $rowCount = $stmt->rowCount();
      注意:rowCount(),只能用于返回更新,插入,删除操作的影响数,select 不能正确显示受影响的数量

        

      /*绑定参数支持的数据类型
      PDO:PARAM_BOOL:表示boolean数据类型
      PDO:PARAM_NULL:表示NULL数据类型
      PDO:PARAM_INT:表示INT数据类型
      PDO:PARAM_STR:表示字符串数据类型
      PDO:PARAM_LOB:表示大对象数据类型
      */



      //预处理语句并绑定参数
      $sql = "select * from table_name  limit size=:size";
      $stmt = $conn->prepare($sql);
      $stmt ->bindParam(':size', $size,PDO::PARAM_INT);
      
      $rowCount = $stmt->execute();
      $data = array();
      if ($rowCount>0) {
          $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
      }
      return $data;

      提示:fetch()用于返回一条记录(一维数组),fetchAll()用于返回1条或多条记录(二维数组)。
    • 关闭连接

      $conn = null;

      

    PDO用法参考  https://www.cnblogs.com/siqi/p/3774871.html

    5、PHP处理文件和目录的常用函数。

    重点关注:

    • 打开操作
    • 读取操作
    • 修改操作
    • 关闭操作
    • 创建操作
    • 删除操作
    • 权限设置

     #EXAMPLE 

    实现不常变动数据缓存的读写操作

    <?php
    /**
    *@author  zwesy <zwesy@qq.com>
    *@date 2018/07/20
    *@time 17:41
    *@description static cache data to html
    */
    
    namespace cache;
    
    class CacheData
    {
        private $dir_default;//定义一个默认路径
        const EXT = '.txt';//定义一个缓存文件的文件名后缀常量
        
        function __construct()
        {
            $this->dir_default = dirname(__FILE__).'/cahcefiles/shtml/';//定义默认目录为当前文件夹下的cachefiles文件夹
        
        }
        
        /**
        *把生成/获取、删除缓存这三个操作封装在cache方法中
        *@access public
        *@param String $key [缓存的文件名]
        *@paran json $value [需要缓存的数据,json格式的字符串]
        *@param integer $cacheTime [缓存的生命周期(秒),0表示永久有效]
        */
        public function cache($key, $value = '', $cacheTime = 0)
        {
            $filename = $this->dir_default . $key . self::EXT;
            //将value值写入缓存
            if ($value !== '') {
                if (is_null($value)) {
                    return @unlink($filename);//unlin删除文件,@忽略警告
                }
                $dir = dirname($filename);
                if (!is_dir($dir)) {
                    //如果目录不存在就创建目录
                    mkdir($dir, 0777, true);
                }
                $cacheTime = sprintf('%011d', $cacheTime);//规定缓存时间格式,不足11位,则在前面补0,方便时间截取
                $cacheValue = $cacheTime .$value;
                return file_put_contents($filename, $cacheValue);
            }
            //获取缓存
            if (!is_file($filename)) {
                return FALSE;
            }
            $contents = file_get_contents($filename);
            $cacheTime = (int)substr($contents, 0, 11);
            $value = substr($contents, 11);
            if ($cacheTime !=0 && ($cacheTime + fileatime($filename) < time())) {
                //判断文件上次访问到现在是否过期
                @unlink($filename);
                return FALSE;
            }
            return json_decode($value, true);//解析成数组,返回
        }
        
        
        /*
        ##要点:
        fileatime()    返回文件的上次访问时间。    
        filectime()    返回文件的上次改变时间。
        filemtime()    返回文件的上次修改时间。
        */
        
    }
    
    
    #############################################
    
    use 
    dbDBMysqli;
    use thinkController;
    use cacheCacheData;
    
    class Test extends Controller
    {
    /**
    *cache数据的写入与读取
    *@access public 
    *@param String $fname [文件名称]
    *@param json $contents [缓存内容,json格式的字符串]
    *@param integer $lifeTime [生命周期(秒),0表示无期限]
    */
    public function myCache($fname, $contents='', $lifeTime=0)
    {
        $cache = new CacheData();
        $result = $cache->cache($fname, $contents, $lifeTime);
        //返回值 FALSE/写入的字节数/返回的缓存数组数据
        return $result;
    }
    
    /**
    *数据库数据测试
    */
    public function testmysql()
    {    
        $db_mysqli = new DBMysqli();
        $result = $db_mysqli->getAllUser(0,10);
        
        //把不经常变动的数据写入缓存文件
        if (!$this->myCache('user_cache')) {
            //如果缓存文件不存在或失效了,则重新写入新缓存数据
            $res = $this->myCache('user_cache',json_encode($result),10);
            if($res>0){
                echo "写入缓存成功";
            } else {
                echo "无数据写入";
            }
        }
        
    }
    
    
    }

    PHP Filesystem 函数 http://www.w3school.com.cn/php/php_ref_filesystem.asp

    重要的:

    
    
    basename(path,suffix)  函数返回路径中的文件名部分。

    clearstatcache
    () 函数清除文件状态缓存。 受 clearstatcache() 函数影响的函数: stat() lstat() file_exists() is_writable() is_readable() is_executable() is_file() is_dir() is_link() filectime() fileatime() filemtime() fileinode() filegroup() fileowner() filesize() filetype() fileperms()

    #
    chmod(file,mode) 变文件模式(权限)【mode 参数可选由 4 个数字组成:
    • 第一个数字永远是 0
    • 第二个数字规定所有者的权限
    • 第三个数字规定所有者所属的用户组的权限
    • 第四个数字规定其他所有人的权限
    • 可能的值(如需设置多个权限,请对下面的数字进行总计):

      • 0 - 无权限
      • 1 - 执行权限
      • 2 - 写权限
      • 4 - 读权限
      • 5 - 读和执行权限
      • 6 - 读写权限
      • 7 - 所有权限
    •   如chmod('a.sh', 0700);//所有者拥有全部权限,其他人无任何权限
    chown(file,owner) 改变指定文件的所有者。【只有超级用户可以改变文件的所有者】
    copy(source,destination) 将文件从 source 拷贝到 destination。如果成功则返回 TRUE,否则返回 FALSE。
    dirname(path) 返回路径中的目录部分。
    rename(oldname,newname,context) 移动文件并重命名文件或目录
    disk_free_space(directory) 返回目录中的可用空间【返回可用的字节数】
    disk_total_space(directory) 返回指定目录的磁盘总大小。【返回字节数】
    fclose(file) 关闭一个打开文件。【文件指针必须有效,并且是通过 fopen() 或 fsockopen() 成功打开的。】
    unlink(filename,context)删除文件。若成功,则返回 true,失败则返回 false。
    feof(file) 检测是否已到达文件末尾 (eof)。【如果文件指针到了 EOF 或者出错时则返回 TRUE,否则返回一个错误(包括 socket 超时),其它情况则返回 FALSE。文件指针必须有效,并且必须指向一个由 fopen() 或 fsockopen() 成功打开(但还没有被 fclose() 关闭)的文件】
    fgetcsv(file,length,separator,enclosure) 从文件指针中读入一行并解析 CSV 字段。然后返回一个包含这些字段的数组。【用于读取特定的缓存文件】
    如:
    <?php
    $file = fopen("contacts.csv","r");
    while(! feof($file))
    {
        print_r(fgetcsv($file));
    }
    fclose($file);
    ?> 
    CSV 文件:
    George, John, Thomas, USA
    James, Adrew, Martin, USA
    输出:
    Array 
    ( 
    [0] => George
    [1] => John 
    [2] => Thomas
    [3] => USA
    
    Array
    (
    [0] => James
    [1] => Adrew
    [2] => Martin
    [3] => USA
    )

    fgets(file,length) 从文件指针中读取一行。【length 可选。规定要读取的字节数。默认是 1024 字节。从 PHP 4.3 开始,忽略掉 length将继续从流中读取数据直到行结束。】
    fgetss(file,length,tags) 从打开的文件中读取一行并过滤掉 HTML 和 PHP 标记。【tags 可选,规定不会被删除的标签。】
    file(path,include_path,context) 把整个文件读入一个数组中。【数组中的每个单元都是文件中相应的一行,包括换行符在内。】
    file_exists(path) 检查文件或目录是否存在。【当文件或目录不存在时,效率比is_file()/is_dir()高,反之,则比后2者低】
    fileperms(filename) 返回文件或目录的权限。【本函数的结果会被缓存。请使用 clearstatcache() 来清除缓存。】
    fileatime(filename) 回指定文件的上次访问时间。【以 Unix 时间戳的方式返回】
    fileatime(filename) 返回指定文件的上次 inode 修改时间。【以 Unix 时间戳的方式返回】
    filemtime(filename) 返回文件内容上次的修改时间。【以 Unix 时间戳的方式返回】
    filesize(filename) 返回指定文件的大小。【返回文件大小的字节数】
    filetype(filename) 返回指定文件或目录的类型。【

      若成功,则返回 7 种可能的值。若失败,则返回 false。

      可能的值:

    • fifo
    • char
    • dir
    • block
    • link
    • file
    • unknown
    flock(file,lock,block) 锁定或释放文件。【详情http://www.w3school.com.cn/php/func_filesystem_flock.asp】
    fopen(filename,mode,include_path,context) 打开文件或者 URL【

      详情参考 http://www.w3school.com.cn/php/func_filesystem_fopen.asp

      mode参数:

    • "r" 只读方式打开,将文件指针指向文件头。
    • "r+" 读写方式打开,将文件指针指向文件头。
    • "w" 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
    • "w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
    • "a" 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
    • "a+" 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

    fputs(file,string,length) 或  fwrite()  写入文件。把 string 的内容写入文件指针 file 处。【fputs() 函数是 fwrite() 函数的别名。】
    is_link(file) 判断指定文件名是否为一个符号连接。
    is_readable(file) 判断指定文件名是否可读。
    is_writeable(file) 判断指定的文件是否可写。【该函数是 is_writable() 函数的别名】
    mkdir(path,mode,recursive,context) 创建目录。【注意权限mode】
    is_uploaded_file(file) 判断指定的文件是否是通过 HTTP POST 上传的。【用于判断用户上传文件的合法性】
    move_uploaded_file(file,newloc) 将上传的文件移动到新位置。【本函数仅用于通过 HTTP POST 上传的文件。】
    
    
    parse_ini_file(file,process_sections)解析一个配置文件,并以数组的形式返回其中的设置。【ini 文件的结构和 php.ini 的相似,通常用来解析自定义配置文件】
    
    
    pathinfo(path,options) 以数组的形式返回文件路径的信息。【通常用来解析文件,可以与parse_url()结合解析URL文件
    process_sections

      可选。规定要返回的数组元素。默认是 all。

      可能的值:

    • PATHINFO_DIRNAME - 只返回 dirname
    • PATHINFO_BASENAME - 只返回 basename
    • PATHINFO_EXTENSION - 只返回 extension

      包括以下的数组元素:

    • [dirname]
    • [basename]
    • [extension]


    readfile(filename,include_path,context) 读入一个文件并写入到输出缓冲。
    file_get_contents(path,include_path,context,start,max_length) 函数把整个文件读入一个字符串中。
    file_put_contents(file,data,mode,context) 把一个字符串写入文件中。【
    mode

      可选。规定如何打开/写入文件。可能的值:

    • FILE_USE_INCLUDE_PATH
    • FILE_APPEND
    • LOCK_EX


    readlink(linkpath) 返回绝对路径。
    fseek(file,offset,whence) 把文件指针从当前位置向前或向后移动到新的位置,新位置从文件头开始以字节数度量。
    rewind(file) 将文件指针的位置倒回文件的开头。
    rmdir(dir,context) 删除空的目录。【删除 dir 所指定的目录。 该目录必须是空的,而且要有相应的权限。】
    
    
    set_file_buffer(file,buffer) 设置打开文件的缓冲大小。
    fstat(file) 返回关于文件的信息。
    tempnam(dir,prefix) 创建一个具有唯一文件名的临时文件。返回新的临时文件名。
    touch(filename,time,atime) 设置指定文件的访问和修改时间。

    PHP Directory

    chdir(path) 改变当前目录到指定的目录
    getcwd() 获取当前工作目录【网站一般返回的是入口文件所在的目录,而非当前文件的目录】
    dir(directory,context);返回一个Directory 类的实例。用于读取一个目录。【类对象有三个方法:read()、rewind() 和 close()】
    opendir(path,context);打开目录句柄。
    readdir(dir_handle);返回目录中下一个文件的文件名。
    rewinddir(dir_handle);重置由 opendir() 创建的目录句柄。
    closedir(dir_handle);关闭目录句柄。
    scandir(directory,sorting_order,context);返回指定目录中的文件和目录的数组。
    如:列出$dir 目录下所有文件和文件夹
    print_f(array_slice(scandir($dir,0),2));//删除掉前2个 .和.. 目录
    //递归列出目录下所有文件和文件夹
    public function listdir($dir){
      if (is_dir($dir)) {
    $dir_list = scandir($dir);
        if ($count=count($dir_list)>2) {
    //判断是否为非空目录
    echo '<ul>';
    for($i=2;$i<$count;$++){
           echo '<li>' .$dir_list[$i];
    if(is_dir($dir_list[$i])){
    listdir($dir_list[$i]);
    }
    echo '</li>';
    }
    echo '</ul>';
        }
    }
    }


    6、PHP处理HTTP的常用函数。

    重点:

    熟记常见HTTP状态码和了解其他不常见的状态码(编写API文档时需要更新HTTP状态码来进行变形设置状态参数,如400状态情况下,设置rcode=400401)

    详情介绍请参考 我另一个随笔《API的HTTP Status Code》中有较为详细的介绍

    超全局变量

    $_SERVER超全局变量保存关于报头、路径和脚本位置的信息

    元素/代码描述
    $_SERVER['PHP_SELF'] 返回当前执行脚本的文件名。
    $_SERVER['GATEWAY_INTERFACE'] 返回服务器使用的 CGI 规范的版本。
    $_SERVER['SERVER_ADDR'] 返回当前运行脚本所在的服务器的 IP 地址。
    $_SERVER['SERVER_NAME'] 返回当前运行脚本所在的服务器的主机名(比如 www.w3school.com.cn)。
    $_SERVER['SERVER_SOFTWARE'] 返回服务器标识字符串(比如 Apache/2.2.24)。
    $_SERVER['SERVER_PROTOCOL'] 返回请求页面时通信协议的名称和版本(例如,“HTTP/1.0”)。
    $_SERVER['REQUEST_METHOD'] 返回访问页面使用的请求方法(例如 POST)。
    $_SERVER['REQUEST_TIME'] 返回请求开始时的时间戳(例如 1577687494)。
    $_SERVER['QUERY_STRING'] 返回查询字符串,如果是通过查询字符串访问此页面。
    $_SERVER['HTTP_ACCEPT'] 返回来自当前请求的请求头。
    $_SERVER['HTTP_ACCEPT_CHARSET'] 返回来自当前请求的 Accept_Charset 头( 例如 utf-8,ISO-8859-1)
    $_SERVER['HTTP_HOST'] 返回来自当前请求的 Host 头。
    $_SERVER['HTTP_REFERER'] 返回当前页面的完整 URL(不可靠,因为不是所有用户代理都支持)。
    $_SERVER['HTTPS'] 是否通过安全 HTTP 协议查询脚本。
    $_SERVER['REMOTE_ADDR'] 返回浏览当前页面的用户的 IP 地址。
    $_SERVER['REMOTE_HOST'] 返回浏览当前页面的用户的主机名。
    $_SERVER['REMOTE_PORT'] 返回用户机器上连接到 Web 服务器所使用的端口号。
    $_SERVER['SCRIPT_FILENAME'] 返回当前执行脚本的绝对路径。
    $_SERVER['SERVER_ADMIN'] 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。
    $_SERVER['SERVER_PORT'] Web 服务器使用的端口。默认值为 “80”。
    $_SERVER['SERVER_SIGNATURE'] 返回服务器版本和虚拟主机名。
    $_SERVER['PATH_TRANSLATED'] 当前脚本所在文件系统(非文档根目录)的基本路径。
    $_SERVER['SCRIPT_NAME'] 返回当前脚本的路径。
    $_SERVER['SCRIPT_URI'] 返回当前页面的 URI。

    $_REQUEST超全局变量用于收集 HTML 表单提交的数据。

    如:$name = $_REQUEST['fname'];

    $_POST 广泛用于收集提交 method="post" 的 HTML 表单后的表单数据。$_POST 也常用于传递变量。

    如:$name = $_POST['fname'];

    $_GET 也可用于收集提交 HTML 表单 (method="get") 之后的表单数据。$_GET 也可以收集 URL 中的发送的数据。

    如:$name = $_GET['fname'];

    $_COOKIE和$_SESSION 保存了会话服务的一些参数设置

    对于URL的处理

    PHP CURL扩展相关函数

    URLs 基本扩展函数

    CURL 预定义常量

    以下常量是为了与 parse_url()使用 在PHP 5.1.2版本。

    URL 函数

    • base64_decode — 对使用 MIME base64 编码的数据进行解码
    • base64_encode — 使用 MIME base64 对数据进行编码
    • get_headers — 取得服务器响应一个 HTTP 请求所发送的所有标头
    • get_meta_tags — 从一个文件中提取所有的 meta 标签 content 属性,返回一个数组
    • http_build_query — 生成 URL-encode 之后的请求字符串
    • parse_url — 解析 URL,返回其组成部分
    • rawurldecode — 对已编码的 URL 字符串进行解码
    • rawurlencode — 按照 RFC 3986 对 URL 进行编码
    • urldecode — 解码已编码的 URL 字符串
    • urlencode — 编码 URL 字符串

    parse_url ( string $url [, int $component = -1 ] )

    解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分。

    参数

    url

    要解析的 URL。无效字符将使用 _ 来替换。

    component

    指定 PHP_URL_SCHEME、 PHP_URL_HOST、 PHP_URL_PORT、 PHP_URL_USER、 PHP_URL_PASS、 PHP_URL_PATH、 PHP_URL_QUERY 或 PHP_URL_FRAGMENT 的其中一个来获取 URL 中指定的部分的 string。 (除了指定为 PHP_URL_PORT 后,将返回一个 integer 的值)。

    返回值

    对严重不合格的 URL,parse_url() 可能会返回 FALSE

    如果省略了 component 参数,将返回一个关联数组 array,在目前至少会有一个元素在该数组中。数组中可能的键有以下几种:

    • scheme - 如 http
    • host
    • port
    • user
    • pass
    • path
    • query - 在问号 ? 之后
    • fragment - 在散列符号 # 之后

    如果指定了 component 参数, parse_url() 返回一个 string (或在指定为 PHP_URL_PORT 时返回一个 integer)而不是 array。如果 URL 中指定的组成部分不存在,将会返回 NULL

    验证URL合法性

    //使用自定义正则匹配验证
    function
    CheckURL($url) { if (!preg_match('/http[s]://[w.]+[w/]*[w.]*??[w=&+\%]*/is',$url)) { return false; } return true; }

    //使用PHP 内置过滤器来验证验证邮箱、URL、IP

       PHP Filter

     if (filter_var($url, FILTER_VALIDATE_URL)){
    return 'url is valid';
    } else {
        return 'url is not valid'; 
     }
    
    

    PHP Filters

    ID 名称描述
    FILTER_CALLBACK 调用用户自定义函数来过滤数据。
    FILTER_SANITIZE_STRING 去除标签,去除或编码特殊字符。
    FILTER_SANITIZE_STRIPPED "string" 过滤器的别名。
    FILTER_SANITIZE_ENCODED URL-encode 字符串,去除或编码特殊字符。
    FILTER_SANITIZE_SPECIAL_CHARS HTML 转义字符 '"<>& 以及 ASCII 值小于 32 的字符。
    FILTER_SANITIZE_EMAIL 删除所有字符,除了字母、数字以及 !#$%&'*+-/=?^_`{|}~@.[]
    FILTER_SANITIZE_URL 删除所有字符,除了字母、数字以及 $-_.+!*'(),{}|\^~[]`<>#%";/?:@&=
    FILTER_SANITIZE_NUMBER_INT 删除所有字符,除了数字和 +-
    FILTER_SANITIZE_NUMBER_FLOAT 删除所有字符,除了数字、+- 以及 .,eE。
    FILTER_SANITIZE_MAGIC_QUOTES 应用 addslashes()。
    FILTER_UNSAFE_RAW 不进行任何过滤,去除或编码特殊字符。
    FILTER_VALIDATE_INT 在指定的范围以整数验证值。
    FILTER_VALIDATE_BOOLEAN 如果是 "1", "true", "on" 以及 "yes",则返回 true,如果是 "0", "false", "off", "no" 以及 "",则返回 false。否则返回 NULL。
    FILTER_VALIDATE_FLOAT 以浮点数验证值。
    FILTER_VALIDATE_REGEXP 根据 regexp,兼容 Perl 的正则表达式来验证值。
    FILTER_VALIDATE_URL 把值作为 URL 来验证。
    FILTER_VALIDATE_EMAIL 把值作为 e-mail 来验证。
    FILTER_VALIDATE_IP 把值作为 IP 地址来验证。

     

  • 相关阅读:
    Notes for Advanced Linux Programming 2. Writing Good GNU/Linux Software
    GIT 子模块温习
    Memcached 源码分析——从 main 函数说起
    Zookeeper 初体验之——JAVA实例
    如何使用 indent 美化你的代码
    PGF/TIKZ 资源汇总
    Zookeeper 进阶之——Zookeeper编程示例(如何使用Zookeeper实现屏障Barriers和队列Queues)
    Zookeeper 进阶之——典型应用场景(二)
    如何将 Linux 内核实现的红黑树 rbtree 运用到你的 C 程序中?
    三行代码实现C语言单元测试框架
  • 原文地址:https://www.cnblogs.com/zwesy/p/9339428.html
Copyright © 2011-2022 走看看