PHP商城笔记(操作函数1) —— 文件操作函数

1、文件内容的读取

/*
要求:把a.txt的内容读出来,赋给$str变量

file_get_contents()
1、可以获取一个文件的内容或一个网络资源的内容
2、是读文件/读网络比较快捷的一个函数
帮我们封装了打开/关闭等操作.

但是要注意,这个函数一次性把文件的内容全部读出来放在内存里.
因此在工作中,处理上百M的大文件要慎用此函数.
*/

$file = './a.txt';
$str =  file_get_contents($file);

$url = 'https://www.baidu.com/';
echo file_get_contents($url);




2、文件内容的写入

/*
要求:把读出来的内容,写到另一个文件中去

file_put_contents()
1、该函数可用于把内容写入到文件
2、这个函数帮我们封装打开写入关闭的细节

注:如果指定的文件不存在,则会自动创建
*/

file_put_contents('./b.txt',$str);




写一个最简单的小偷程序
$url = 'https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_9411642769955254670%22%7D&n_type=0&p_from=1';
$html = file_get_contents($url);

if(file_put_contents('beauty.html',$html)) { // 自己重命名偷来的html
    echo '偷来了';
} else {
    echo '被抓了';
}




3、文件的开关读写

/*
文件操作之
fopen
fread
fwrite
fclose
*/
/*
fopen()
打开一个文件,返回一个句柄资源

格式:fopen($filename,mode);
第二个参数是模式,如只读模式r,读写模式,追加模式
返回值:资源
*/

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



举一个栗子

$file = 'beauty.html';
$fh = fopen($file,'r');


// 沿着上面返回的$fh这个资源通道来读文件
echo fread($fh,10),'<br >';


// 返回int(0),说明没有成功写入
// 原因:在于第2个mode参数选的r,即只读打开
var_dump(fwrite($fh,'我来了!!!!!!!!!'));


// 关闭资源
fclose($fh);

简单介绍另外三种模式
/*
r+读写模式,并把指针指向文件头

写入成功
但注意:从文件头开始,写入时覆盖相等字节的字符.
*/

$fh = fopen($file,'r+');
echo fwrite($fh,'hello')?'成功':'失败','<br >'; // 写入成功

/*
w写入模式(fread读不了)
并把文件大小截为0(文件被清空了)
指针停于开头处
*/

$fh = fopen('./modlw','w');
fclose($fh);
echo 'OK';

/*
a追加模式打开
能写,并把指针停在文件的最后
*/

$fh = fopen('modea.txt','a');
//echo fwrite($fh,'白云一片'); //输出12,表示12字节
echo fwrite($fh,'黄河远上')?'OK modea':'false'; //OK
fclose($fh);




用文件操作函数,来批量处理客户名单

/*
有一客户名单,每行是一个用户名
要求你把1000多个用户名,输入到数据库去
customer.txt
*/

有以下三种方法

第一种办法,简单快捷暴力的方法
/*
file_get_contents获取内容
再用换行符切成数组

但注意:各操作系统下,换行符并不一致
win: \r\n
unix:\n
mac: \r

如果数据太多这个程序会出问题
*/

$file = './customer.txt';

echo '<pre >';
$cont = file_get_contents($file);
// 下面这个用\n区分,通用性不好
print_r(explode("\n",$cont));
/*
explode字符串分割函数,以数组形式返回
explode(separator,string,limit) 
separator必需。规定在哪里分割字符串。
string必需。要分割的字符串串。
limit可选。规定所返回的数组元素的数目。
*/

第二种方法,打开,每次读一行
/*
fget() 每次读一行
*/

// 模式里面可以加b,表示以2进制来处理,不受编码的干扰
$file = './customer.txt';
$fh = fopen($file,'rb');

echo fgets($fh),'<br >'; //zhangsan 
echo fgets($fh),'<br >'; //lisi
echo fgets($fh),'<br >'; //wangwu
// 一行一行取出数据

// 让文件指针一直向右移动
// feof,end of file
// 专门用来判断指针是否已经走到结尾
$file = './customer.txt';
$fh = fopen($file,'rb');
while(!feof($fh)) {
    echo fgets($fh),'<br >';
}
/*
zhangsan
lisi
wangwu
zhaoliu
zhengqi
wangba
zhangsan
lisi
wangwu
zhaoliu
zhengqi
wangba
*/

第三种,也是暴力方法
/*
file函数直接读取文件内容,并按行强行拆成数组
返回该数组

和file_get_contents的相同之处:
一次性读入,大文件慎用!
*/

echo '<pre >';
$arr = file($file);
print_r($arr);
/*
Array
(
    [0] => zhangsan
    [1] => lisi
    [2] => wangwu
    [3] => zhaoliu
    [4] => zhengqi
    [5] => wangba
    [6] => zhangsan
    [7] => lisi
    [8] => wangwu
    [9] => zhaoliu
    [10] => zhengqi
    [11] => wangba
)
*/




4、判断文件是否存在
获取文件的创建时间/修改时间
$file = 'customer.txt';
if(file_exists($file)) {
    echo $file,'存在<br >';
    echo '上次修改时间是',date('Y-m-d H:i:s',filemtime($file));
} else {
    echo '不存在';
}
//customer.txt存在
//上次修改时间是2018-04-15 12:42:46
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟敛寒林o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值