搜索
首页后端开发php教程PHP中文件读写操作_PHP教程
PHP中文件读写操作_PHP教程Jul 13, 2016 am 10:59 AM
php函数实现我们提供操作文件读写

PHP中文件读写操作


  PHP中提供了一系列的I/O函数,能简捷地实现我们所需要的功能,包括文件系统操作和目录操作(如“复制[copy]”)。下面给大家介绍的是基本的文件读写操作:(1)读文件;(2)写文件;(3)追加到文件。

  以下是一篇关于文件基本读写操作的文章,我曾经就是看了这篇文章后学会文件基本操作的,在这里发出来与大家共享:
读文件:
PHP代码:
1.     2.     
3.    $file_name = "data.dat"; 
4.    // 要读取的文件的绝对路径: homedata.dat 
5.     
6.    $file_pointer = fopen($file_name, "r"); 
7.    // 打开文件,8.    "r" 是一种模式,9.    或者说我们要进行的操作方法,10.    详见本文后面的介绍
11.     
12.    $file_read = fread($file_pointer, filesize($file_name)); 
13.    // 通过文件指14.    针读取文件内容
15.     
16.    fclose($file_pointer); 
17.    // 关闭文件
18.     
19.    print "读取到的文件内容是: $file_read"; 
20.    // 显示文件内容
21.    ?> 
22.     

写文件:
PHP代码:
1.     2.     
3.    $file_name = "data.dat"; 
4.    // 绝对路径: homedata.dat 
5.     
6.    $file_pointer = fopen($file_name, "w"); 
7.    // "w"是一种模式,8.    详见后面
9.     
10.    fwrite($file_pointer, "what you wanna write"); 
11.    // 先把文件剪切12.    为0字节大小,13.     然后写入
14.     
15.    fclose($file_pointer); 
16.    // 结束
17.     
18.    print "数据成功写入文件"; 
19.     
20.    ?> 
21.     

追加到文件后面:
PHP代码:
1.     2.     
3.    $file_name = "data.dat"; 
4.    // 绝对路径: homedata.dat 
5.     
6.    $file_pointer = fopen($file_name, "a"); 
7.    // "w"模式
8.     
9.    fwrite($file_pointer, "what you wanna append"); 
10.    // 不11.    把文件剪切12.    成0字节,13.     把数据追加到文件最后
14.     
15.    fclose($file_pointer); 
16.    // 结束
17.     
18.    print "数据成功追加到文件"; 
19.     
20.    ?> 
21.     

以上只是简单介绍,下面我们要讨论一些更深层的。

有时候会发生多人写入的情况(最常见是在流量较大的网站),会产生无用的数据写入文件, 例如:

info.file文件内容如下 -> 

|1|Mukul|15|Male|India (n) 
|2|Linus|31|Male|Finland (n) 

现在两个人同时注册,引起文件破坏-> 

info.file -> 

|1|Mukul|15|Male|India 
|2|Linus|31|Male|Finland 
|3|Rob|27|Male|USA| 
Bill|29|Male|USA 

上例中当PHP写入Rob的信息到文件的时候,Bill正好也开始写入,这时候正好需要写入Rob纪录的'n',引起文件破坏。

我们当然不希望发生这样的情况, 所以让我们看看文件锁定:
PHP代码:
1.     2.     
3.    $file_name = "data.dat"; 
4.     
5.    $file_pointer = fopen($file_name, "r"); 
6.     
7.    $lock = flock($file_pointer, LOCK_SH); 
8.    // 我使用4.0.2,9.    所以用LOCK_SH,10.    你可能需要直接写成 1. 
11.     
12.    if ($lock) { 
13.     
14.    $file_read = fread($file_pointer, filesize($file_name)); 
15.    $lock = flock($file_pointer, LOCK_UN); 
16.    // 如果版本小于PHP4.0.2,17.     用 3 代替 LOCK_UN
18.     
19.    } 
20.     
21.    fclose($file_pointer); 
22.     
23.    print "文件内容为 $file_read"; 
24.     
25.    ?> 
26.     

上例中,如果两个文件read.php和read2.php都要存取该文件,那么它们都可以读取,但是当一个程序需要写入的时候,它必须等待,直到读操作完成,文件所释放。
PHP代码:
1.     2.     
3.    $file_name = "data.dat"; 
4.     
5.    $file_pointer = fopen($file_name, "w"); 
6.     
7.    $lock = flock($file_pointer, LOCK_EX); 
8.    // 如果版本低于PHP4.0.2,9.     用 2 代替 LOCK_EX
10.     
11.    if ($lock) { 
12.     
13.    fwrite($file_pointer, "what u wanna write"); 
14.    flock($file_pointer, LOCK_UN); 
15.    // 如果版本低于PHP4.0.2,16.     用 3 代替 LOCK_UN
17.     
18.    } 
19.     
20.    fclose($file_pointer); 
21.     
22.    print "数据成功写入文件"; 
23.     
24.    ?> 
25.     

虽然"w"模式用来覆盖文件, 单我觉得不适用。
PHP代码:
1.     2.     
3.    $file_name = "data.dat"; 
4.     
5.    $file_pointer = fopen($file_name, "a"); 
6.     
7.    $lock = flock($file_pointer, LOCK_EX); 
8.    // 如果版本低于PHP4.0.2,9.     用 2 代替 LOCK_EX
10.     
11.    if ($lock) { 
12.     
13.    fseek($file_pointer, 0, SEEK_END); 
14.    // 如果版本小于PHP4.0RC1,15.     使用 fseek($file_pointer, filsize($file_name)); 
16.     
17.    fwrite($file_pointer, "what u wanna write"); 
18.    flock($file_pointer, LOCK_UN); 
19.    // 如果版本低于PHP4.0.2,20.     用 3 代替 LOCK_UN
21.     
22.    } 
23.     
24.    fclose($file_pointer); 
25.     
26.    print "数据成功写入文件"; 
27.     
28.    ?> 
29.     

Hmmm..., 对于追加数据与其他操作有点不同,就是FSEEK! 确认文件指针在文件尾部总是一个好习惯。

如果是在Windows系统下, 上面的文件中文件名前面需要加上''. 

FLOCK杂谈: 

Flock()只在文件打开后才锁定。 在上列中文件打开后才获得锁定,现在文件的内容只是在当时的内容, 而不反映出别的程序操作的结果,因此不只是在文件追加操作,就是对读取操作也应该使用fseek。
(此处翻译可能不是很确切, 但我想意思到了)。

关于模式:

'r' - 只读方式打开, 文件指针置于文件头

'r+' - 读写方式打开,文件指针置于文件头

'w' - 只写打开,文件指针置于文件头, 文件被剪切为0字节, 如果文件不存在, 尝试建立文件

'w+' - 读写打开,文件指针置于文件头, 文件大小被剪切为0字节,如果文件不存在, 尝试建立文件

'a' - 只写方式打开,文件指针置于文件尾,如果文件不存在,尝试建立文件

'a+' - 读写打开,文件指针置于文件尾,如果文件不存在, 尝试建立文件

顺便说一下创建文件目录的代码

//创建类似"../../../xxx/xxx.txt"的目录

function createdirs($path, $mode = 0777) //mode 077

$dirs = explode('/',$path); 
$pos = strrpos($path, "."); 
if ($pos === false) { // note: three equal signs 
// not found, means path ends in a dir not file 
$subamount=0; 

else { 
$subamount=1; 


for ($c=0;$c  $thispath=""; 
for ($cc=0; $cc  $thispath.=$dirs[$cc].'/'; 

if (!file_exists($thispath)) { 
//print "$thispath
"; 
mkdir($thispath,$mode); //mkdir函数创建目录


}
//调用如createdirs("xxx/xxxx/xxxx",);

//原函数中使用$GLOBALS["dirseparator"]我改成了'/' 

function recur_mkdirs($path, $mode = 0777) //mode 0777

//$GLOBALS["dirseparator"] 
$dirs = explode($GLOBALS["dirseparator"],$path); 
$pos = strrpos($path, "."); 
if ($pos === false) { // note: three equal signs 
// not found, means path ends in a dir not file 
$subamount=0; 

else { 
$subamount=1; 


这些只是一些基本的关于文件的操作代码,相信对初学者很有用,在此贴出来,希望有抛砖引玉之功能!

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/631860.htmlTechArticlePHP中文件读写操作 PHP中提供了一系列的I/O函数,能简捷地实现我们所需要的功能,包括文件系统操作和目录操作(如复制[copy])。下面给大...
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具