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 \ndb\DBMysqli;
use think\Controller;
use \cache\CacheData; 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 地址来验证。

PHP 常用函数总结(二)的更多相关文章

  1. Mysql常用函数总结(二)

    有的时候们需要了解当前的时间,这时候我们就可以调用时间函数了.下面就是一些常用的时间函数下面来说一下DATE_FORMAT(date,format):format可以有以下格式符:举个例子吧! mys ...

  2. JavaScript学习总结(11)——JS常用函数(二)

    37. getElementsByClassName ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function getElementsByClassName( ...

  3. lua堆栈操作常用函数学习二

    /* ** basic stack manipulation */ LUA_API int  <strong> (lua_gettop) (lua_State *L);  </str ...

  4. oracle中的常用函数、字符串函数、数值类型函数、日期函数,聚合函数。

    一.字符串的常用函数. --一.oracle 字符串常用函数 --1. concat 连接字符串的函数,只能连接[两个]字符串. 字符写在括号中,并用逗号隔开! --2."||"符 ...

  5. salesforce 零基础学习(六十六)VF页面应善于使用变量和函数(二)常用函数的使用

    上一篇介绍VF中常用的变量,此篇主要内容为VF页面可以直接使用的函数,主要包括Date相关函数,Text相关函数,Information相关函数以及logic相关函数,其他相关函数,比如math相关函 ...

  6. mysql进阶(二十九)常用函数

    mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...

  7. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  8. PHP常用函数总结(二)

    PHP常用函数总结 数学函数 1.abs(): 求绝对值 $abs = abs(-4.2); //4.2 数字绝对值数字 2.ceil(): 进一法取整 echo ceil(9.999); // 10 ...

  9. JxBrowser之二:常用函数addLoadListener

    1.常用函数addLoadListener,包含对页面加载状态的多种监控回调. browser.addLoadListener(new LoadAdapter() { @Override public ...

随机推荐

  1. 8 stark组件 展示数据

    1.编辑按钮构建完成 1.必备知识预习 2.mark_safe模块:将html标签安全传输 3.构造表单数据 4.反向解析 https://www.cnblogs.com/yuanchenqi/art ...

  2. Unity3d之Hash&Slash学习笔记之(二)--角色基础类的构建

    Hash&Slash学习笔记之(二)--角色基础类的构建 BaseStat类的构建 基本成员变量: _baseValue //基础属性值 _buffValue //增加的buff值 _expT ...

  3. vivado与modelsim的联合仿真

    转载: 一.在vivado中设置modelsim(即第三方仿真工具)的安装路径.在vivado菜单中选择“Tools”——>“Options...”,选择“General”选项卡,将滚动条拉倒最 ...

  4. 洛咕 P3306 [SDOI2013]随机数生成器

    洛咕 P3306 [SDOI2013]随机数生成器 大力推式子??? \(X_{i}=\underbrace{a(a(\cdots(a(a}_{i-1个a}X_1+b)))\cdots)\) \(=b ...

  5. noip2017 PJ AK记

    嗨小朋友们大家好,还记得我是谁吗?我就是为RE代言的蒟蒻--xzz day1 蛤?四楼只有一个考场???在逗我 然后解压 蛤?空军68年????我怎么不知道???huaji 蛤?T1这么sb?切掉 蛤 ...

  6. Linux新手常见问题

    yum与apt的区别 参考:https://blog.csdn.net/qq_26182553/article/details/79869666 ubuntu下su: Authentication f ...

  7. Flutter - Stateful(有状态) 和 stateless(无状态) widgets

    Stateful(有状态) 和 stateless(无状态) widgets 有些widgets是有状态的, 有些是无状态的 如果用户与widget交互,widget会发生变化,那么它就是有状态的. ...

  8. Cisco Packet Tracer中两台电脑通信设置

    Cisco Packet Tracer是网络初学者仿真模拟网络环境的必备工具.今天我们来模拟下两台电脑之间的通信. Cisco Packet Tracer版本6.2.0 一.添加设备 1.这里添加一个 ...

  9. flask中的简单的前端写入

    那么flask这个框架是web开发,那么肯定离不开前端的一些代码,那么python用的web开发框架 开发所用的前端模板就是jinja2模板.相对于jinja1比起来性能做到了很大的提升,那么Vue一 ...

  10. Ubuntu安装Oh My Zsh

    1. 安装ZSH sudo apt-get install zsh 安装完后需要注销或重启才能生效.注销或重启后打开终端,会出现ZSH的界面,选择(2) 2. 安装Oh My Zsh sh -c &q ...