zoukankan      html  css  js  c++  java
  • 前端PHP入门-030-文件函数API

    bool file_exists ( $指定文件名或者文件路径)
    功能:文件是否存在。

    bool is_readable ( $指定文件名或者文件路径)
    功能:文件是否可读

    bool is_writeable ( $指定文件名或者文件路径)
    功能:文件是否可写

    bool is_executable ( $指定文件名或者文件路径)
    功能:文件是否可执行

    bool is_file ( $指定文件名或者文件路径)
    功能:是否是文件

    bool is_dir ( $指定文件名或者文件路径)
    功能:是否是目录

    void clearstatcache ( void )
    功能:清楚文件的状态缓存

    文件操作的常量

    下面这一个常量是最常用的。是文件目录的分割符的常量。

    我们来看看格式:

    平台 分割符
    windows
    类unix /

    windows 的路径格式为 d:xxxxxx 注意:windows支持d:/xxx/xxx
    linux 的路径格式为/home/xxx/xxx 注意:如果homexxxxxx 在linux上是错误的,所以当你开启转义之类的话,转义字符用一起的话 d:xxxxxx 是一样的。判断时候有两个 有的话 再转成一个 再把 替换成 / 当路径分割,这样在linux上或者windos上的路径就能保持统一了。

    我们会使用到一个常量:

    DIRECTORY_SEPARATOR

    我们来写一个小的实例,定义当前文件所在的路径:

    由于FILE是PHP的预定义常量,所以没办法改变,如果需要让FILE也自适应操作系统。 那么就是不要用FILE,可以用自定义的常量,并且把FILE处理一下,如下:

    1. <?php
    2. $_current_file = str_replace(array('/', '\'), DIRECTORY_SEPARATOR, __FILE__);
    3. define('__CUR_FILE__', $_current_file);
    4. echo __CUR_FILE__;
    5. ?>

    文件指针操作函数

    rewind ( resource handle)

    功能:指针回到开始处

    fseek ( resource handle, int offset [, int from_where])
    功能:文件指针向后移动指定字符

    我们在之前的读取当中我们发现fread读取指定长度的数据。读取指定长度的内容,下次再读取的时候从原位置开始再接着向后读取。

    document/2015-09-08/55eecf3c2a7e0

    如上图,我们可以想象:

    1. 文件刚打开的时候读取到的是红色的图标
    2. 文件假色从A读取到了C
    3. 下次打开的时候可再从C绿色箭头处开始读取。

    我们在demo.txt文件中写入一批文件:

    abcdeefghijklk
    opqrst
    uvwxyz
    12345678

    我们可开始来实验一次。

    1. <?php
    2. $fp = fopen('output.txt', 'r+');
    3. //读取10个字符
    4. echo fread($fp,10);
    5. //指针设置回到开始处
    6. rewind($handle);
    7. //再读取10次看看输出的是什么
    8. echo fread($fp,10);
    9. //文件指针向后移动10个字符
    10. echo fseek($fp,10);
    11. //再看看文件中输出的是什么
    12. echo fread($fp,10);
    13. fclose($handle);
    14. ?>

    上面的例子,你会发现fseek指定多长就移动多少个字节。而rewind每次都是回到文件的开始处。

    那如何移动到最末尾呢?我们可以统计字节数。在fseek的时候直接移到回后。

    filesize 检测文件的大小

    1. <?php
    2. $filename = 'demo.txt';
    3. echo $filename . '文件大小为: ' . filesize($filename) . ' bytes';
    4. ?>

    其它操作文件的函数

    其实还有一些其他操作文件的函数,读取文件

    函数名 功能
    file 把整个文件读入一个数组中
    fgets 从文件指针中读取一行,读到最后返回false
    fgetc 从文件指针中读取一个字符,读到最后返回false
    ftruncate 将文件截断到给定的长度

    我们通过一个实例来把上面几个函数都用到。

    我们在demo.txt文件中写入一批文件:

    abcdeefghijklk
    opqrst
    uvwxyz
    12345678

    1. <?php
    2. //以增加的r模式打开
    3. $fp = fopen('demo.txt','r+');
    4. //你分发现每次只读一个字符
    5. echo fgetc($fp);
    6. //我要全部读取可以,读取一次将结果赋值一次给$string
    7. while($string = fgetc($fp)){
    8. echo $string;
    9. }
    10. ?>

    fgets每次打开一行:

    1. <?php
    2. //以增加的r模式打开
    3. $fp = fopen('demo.txt','r+');
    4. //你分发现每次只读一个字符
    5. echo fgets($fp);
    6. echo fgets($fp);
    7. echo fgets($fp);
    8. echo fgets($fp);
    9. ?>

    上面的代码,你会发现每次读取一次打开一行。读取最后返回的是false。

    我们接下来看文件截取函数:

    1. <?php
    2. //打开我们上面的demo.txt文件
    3. $file = fopen("demo.txt", "a+");
    4. //你可以数数20个字有多长,看看是不是达到效果了
    5. echo ftruncate($file,20);
    6. fclose($file);
    7. ?>

    上例中我们发现,截取多长就能显示多长的内容。

    文件的时间函数

    函数 功能说明
    filectime 文件创建时间
    filemtime 文件修改时间
    fileatime 文件上次访问时间
    1. <?php
    2. $filename = 'demo.txt';
    3. if (file_exists($filename)) {
    4. echo "$filename文件的上次访问时间是: " . date("Y-m-d H:i:s", fileatime($filename));
    5. echo "$filename文件的创建时间是: " . date("Y-m-d H:i:s", filectime($filename));
    6. echo "$filename文件的修改时间是: " . date("Y-m-d H:i:s", filemtime($filename));
    7. }
    8. ?>

    目录和文件夹怎么处理呢?

    我们就来学习目录或者称为文件夹的处理相关函数。

    处理文件夹的基本思想如下:

    1. 读取某个路径的时候判断是否是文件夹
      1. 是文件夹的话,打开指定文件夹,返回文件目录的资源变量
      2. 使用readdir读取一次目录中的文件,目录指针向后偏移一次
      3. 使用readdir读取到最后,没有可读的文件返回false
      4. 关闭文件目录

    我们来学习一比常用函数:

    函数名 功能
    opendir 打开文件夹,返回操作资源
    readdir 读取文件夹资源
    is_dir 判断是否是文件夹
    closedir 关闭文件夹操作资源
    filetype 显示是文件夹还是文件,文件显示file,文件夹显示dir
    1. <?php
    2. //设置打开的目录是D盘
    3. $dir = "d:/";
    4. //判断是否是文件夹,是文件夹
    5. if (is_dir($dir)) {
    6. if ($dh = opendir($dir)) {
    7. //读取一次向后移动一次文件夹指针
    8. echo readdir($dh).'<br />';
    9. echo readdir($dh).'<br />';
    10. echo readdir($dh).'<br />';
    11. echo readdir($dh).'<br />';
    12. //读取到最后返回false
    13. //关闭文件夹资源
    14. closedir($dh);
    15. }
    16. }
    17. ?>

    即然是读取一次向后移动一次,我们是不是可以

    1. <?php
    2. //设置打开的目录是D盘
    3. $dir = "d:/";
    4. //判断是否是文件夹,是文件夹
    5. if (is_dir($dir)) {
    6. if ($dh = opendir($dir)) {
    7. //读取到最后返回false,停止循环
    8. while (($file = readdir($dh)) !== false) {
    9. echo "文件名为: $file : 文件的类型是: " . filetype($dir . $file) . "<br />";
    10. }
    11. closedir($dh);
    12. }
    13. }
    14. ?>

    我们经常会遇到处理文件路径的情况。

    例如:

    1. 文件后缀需要取出来
    2. 路径需要取出名字不取目录
    3. 只需要取出路径名中的目录路径
    4. 或者把网址中的各个部份进行解析取得独立值
    5. 甚至是自己组成一个url出来

    很多地方都需要用路径处理类的函数。

    我们把常用的路径处理函数为大家做了标注,大家对着这个路径处理函数进行处理即可:

    函数名 功能
    pathinfo 返回文件的各个组成部份
    basename 返回文件名
    dirname 文件目录部份
    parse_url 网址拆解成各部份
    http_build_query 生成url 中的query字符串
    http_build_url 生成一个url

    pathinfo

    array pathinfo ( string $路径)
    功能:传入文件路径返回文件的各个组成部份

    我们用具体的示例来用一下:

    1. <?php
    2. $path_parts = pathinfo('d:/www/index.inc.php');
    3. echo '文件目录名:'.$path_parts['dirname']."<br />";
    4. echo '文件全名:'.$path_parts['basename']."<br />";
    5. echo '文件扩展名:'.$path_parts['extension']."<br />";
    6. echo '不包含扩展的文件名:'.$path_parts['filename']."<br />";
    7. ?>

    结果如下:

    文件目录名:d:/www
    文件全名:lib.inc.php
    文件扩展名:php
    不包含扩展的文件名:lib.inc

    basename

    string basename ( string [,stringsuffix ])
    功能:传入路径返回文件名
    第一个参数传入路径。
    第二个参数,指定我文件名到了指定字符停止。

    1. <?php
    2. echo "1: ".basename("d:/www/index.d", ".d").PHP_EOL;
    3. echo "2: ".basename("d:/www/index.php").PHP_EOL;
    4. echo "3: ".basename("d:/www/passwd").PHP_EOL;
    5. ?>

    执行结果如下

    1: index
    2: index.php
    3: passwd

    dirname

    dirname(string $路径)
    功能:返回文件路径的文件目录部份

    1. <?php
    2. dirname(__FILE__);
    3. ?>

    结论:你可以执行看看是不是返回了文件的目录部份。

    parse_url

    mixed parse_url ( string $路径 )
    功能:将网址拆解成各个部份

    1. <?php
    2. $url = 'http://username:password@hostname:9090/path?arg=value#anchor';
    3. var_dump(parse_url($url));
    4. ?>

    结果如下:

    array(8) {
    ["scheme"]=> string(4) "http"
    ["host"]=> string(8) "hostname"
    ["port"]=> int(9090)
    ["user"]=> string(8) "username"
    ["pass"]=> string(8) "password"
    ["path"]=> string(5) "/path"
    ["query"]=> string(9) "arg=value"
    ["fragment"]=> string(6) "anchor"
    }

    http_build_query

    string http_build_query ( mixed $需要处理的数据)

    功能:生成url 中的query字符串

    1. <?php
    2. //定义一个关联数组
    3. $data = [
    4. 'username'=>'wukong',
    5. 'area'=>'huaguoshan'
    6. ];
    7. //生成query内容
    8. echo http_build_query($data);
    9. ?>

    结果如下:

    username=wukong&area=huaguoshan

    http_build_url()

    功能: 生成一个url


    注:
    PHP_EOL 常量
    在windows平台相当于 echo " ";
    在unixlinux平台相当于 echo " ";
    在mac平台相当于 echo " ";





  • 相关阅读:
    python爬虫开发与项目实践-学习笔记(一)
    python之TypeError
    学习笔记-python
    python学习之Unable to locate element
    Chrome浏览器之 webdriver(Chrome version must be >= 63.0.3239.0)
    POJ 1830 开关问题 高斯消元
    HDU 4135 Co-prime 容斥原理
    HDU 1796 How many integers can you find 容斥原理
    卡特兰数,组合数,斯特林数,逆元模板
    HDU 6134 Killer Names 数学 斯特林数
  • 原文地址:https://www.cnblogs.com/pangxiansheng/p/a1e0925dea0ef00efc3b6c8f69768b16.html
Copyright © 2011-2022 走看看