php7实践指南-ch13目录文件文件操作

13.2 文件操作

文件操作是PHP编程中经常使用到的,本节介绍与文件操作有关的函数。

13.2.1 打开文件

要对文件进行操作,首先要打开文件。在PHP中使用fopen()函数打开文件,语法如下:

function fopen ($filename, $mode, $use_include_path = null, $context = null) false|resource

参数filename是被打开的文件路径,mode是打开文件的模式。fopen中打开文件的mode可选值如表13-1所示。

如果需要在include_path中搜寻文件,可以将可选的第三个参数use_include_path设为’1’或true。该函数执行成功时返回文件指针资源,如果打开失败,本函数返回false。

fopen()使用示例如下:

<?php
$handle = fopen('1.jpg',r);
$handle = fopen('2.jpg',w);
$handle = fopen('3.png',r);

var_dump($handle);

resource(5) of type (stream)

13.2.2 读取文件

打开文件后可以使用一些函数读取文件。

1. fgets()

fgets()是从文件指针中读取一行,语法如下:

function fgets ($handle, $length = null) false|string

handle是用fopen()打开的文件句柄,length表示从handle指向的文件中读取一行并返回长度最多为length -1字节的字符串。碰到换行符(包括在返回值中)、EOF或者已经读取了length -1字节后停止(看先碰到哪一种情况)。如果没有指定length,那么默认为1KB,或者说1024字节。

假设fgets.php和test.txt在同一目录下。fgets.php里的代码如下:

<?php
$handle=fopen('test.txt','r');
if($handle){
    while(($buffer=fgets($handle,4096)) !== false){
        echo $buffer;
    }
    if(! feof($handle)){
        echo "Error:unexpected fgets() fail\n";
    }
    fclose($handle);
}

test.txt里的内容如下:

abcdef
ghijk
lmn
opqrst
uvwxyz

执行以上代码,打印出来的结果为:

abcdef ghijk lmn opqrst uvwxyz

2. fgetc()

fgetc()可从文件指针中读取字符,语法如下:

function fgetc ($handle) false|string

handle文件指针必须是有效的,必须指向由fopen()或fsockopen()成功打开的文件(还未由fclose()关闭)。该函数返回一个包含有一个字符的字符串,这个字符从handle指向的文件中得到。碰到EOF则返回false。

用fgetc()读取test.txt里的内容,示例如下:

<?php
$fp=fopen('test.txt',r);
if(!$fp){
    echo 'Could not open file somefile.txt';
}
while (false !==($char=fgetc($fp))){
    echo "$char\n";
}

执行以上代码,在浏览器中的打印结果为:

a b c d e f g h i j k l m n o p q r s t u v w x y z

13.2.3 获得文件属性

文件的属性包括文件的上次访问修改时间、文件大小类型等信息。

1. fileatime()

fileatime()可取得文件上次访问的时间,失败时返回false,返回的是UNIX时间戳。语法如下:

function fileatime ($filename) false|int

使用示例如下:

<?php
$filename='test.txt';
if(file_exists($filename)){
    echo "$filename was last accessed:".date("Y m d H:i:s.",fileatime($filename));
}

执行以上程序,输出结果为:

test.txt was last accessed:2021 01 20 08:16:42.

2. filemtime()

filemtime()可取得文件修改的时间,成功时返回文件上次被修改的时间,失败时则返回false。时间以UNIX时间戳的方式返回。语法如下:

function filemtime ($filename) false|int

使用示例如下:

<?php
$filename='test.txt';
if(file_exists($filename)){
    echo "$filename was last modified:".date("Y m d H:i:s.",filemtime($filename));
}

执行以上程序的输出结果为:

test.txt was last modified:2021 01 20 08:01:05.

3. filesize()

filesize()可获得文件的大小,成功时返回文件大小的字节数,失败时返回false生成一条E_WARNING级的错误。语法如下:

function filesize ($filename) false|int

使用示例如下:

<?php
$filename = 'test.txt';
echo $filename.':'.filesize($filename).'bytes';

执行以上程序的输出结果为:

test.txt:34bytes

4. filetype()

filetype()可获得文件的类型,可能返回的值有fifo、char、dir、block、link、file和unknown。

5. stat()

stat()可给出文件的信息,能返回上次访问、修改时间以及文件大小等各种信息。语法如下:

function stat ($filename) array|false

使用示例如下:

<?php
echo "<pre>";
print_r(stat('1.jpg'));

执行以上程序的输出结果为:

Array
(
    [0] => 3
    [1] => 0
    [2] => 33206
    [3] => 1
    [4] => 0
    [5] => 0
    [6] => 3
    [7] => 258229
    [8] => 1611035364
    [9] => 1571918824
    [10] => 1611035364
    [11] => -1
    [12] => -1
    [dev] => 3
    [ino] => 0
    [mode] => 33206
    [nlink] => 1
    [uid] => 0
    [gid] => 0
    [rdev] => 3
    [size] => 258229
    [atime] => 1611035364
    [mtime] => 1571918824
    [ctime] => 1611035364
    [blksize] => -1
    [blocks] => -1
)

13.2.4 复制/删除/移动/重命名文件

1.复制文件

在PHP中使用copy()函数复制文件,语法如下:

function copy ($source, $dest, $context = null) bool

该函数实现将文件从source复制到dest的功能。执行成功时返回true,失败时返回false。

使用示例如下:

<?php
$file = 'test.txt';
$newfile = 'test.txt.bak';
if(! copy($file,$newfile)){
    echo "failed to copy $file..\n";
}else{
    echo "copy successfull";
}

执行以上程序后将会复制test.txt文件并重命名为test.txt.bak。如果原来已经存在test.txt.bak,那么该文件将会被覆盖。执行程序后在浏览器中的输出结果为:

copy successfull

2.删除文件

在PHP中使用unlink删除文件,语法如下:

function unlink ($filename, $context = null) bool

filename是要被删除的文件名称,执行成功时返回true,失败时返回false。

使用示例如下:

<?php
$file = 'test.txt.bak';
if(!unlink($file)){
    echo "failed to delete $file..\n";
}else {
    echo "delete successfuly";
}

执行以上程序后将会删除test.txt.bak文件,并且在浏览器中显示结果:.

delete successfuly

3.移动/重命名文件

rename可重命名一个文件,也可移动文件。语法如下:

function rename ($oldname, $newname, $context = null) bool

 

<?php
if(rename('test.txt','test.rename.txt')){
    echo "success";
}else{
    echo "failed";
}

if(rename('test.rename.txt','depth1/depth2/test.txt')){
    echo "success";
}else{
    echo "failed";
}

oldname是原文件的名字,newname是重命名后的名字。函数执行成功时返回true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值