php修改文件内容的方法:首先通过file_put_contents函数写入文件;然后使fwrite配合fopen进行写入并修改的操作;最后通过file_exists等函数检测文件属性即可。

推荐:《PHP视频教程》
file_put_contents写入文件
我们先来学习第一种写入文件的方式:
1 | int file_put_contents ( string $文件路径, string $写入数据])
|
登入後複製
功能:向指定的文件当中写入一个字符串(会清空原有的内容),如果文件不存在则创建文件。返回的是写入的字节长度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php
$data = "在PHP中文网学好PHP,妹子票子不再话下!" ;
$numbytes = file_put_contents ('binggege.txt', $data );
if ( $numbytes ){
echo '写入成功,我们读取看看结果试试:';
echo file_get_contents ('binggege.txt');
} else {
echo '写入失败或者没有权限,注意检查';
}
?>
|
登入後複製
fwrite配合fopen进行写入操作
1 | int fwrite ( resource $文件资源变量, string $写入的字符串 [, int 长度])
|
登入後複製
1 2 3 4 5 6 7 | <?php
$filename = 'test.txt';
$fp = fopen ( $filename , "w" );
$len = fwrite( $fp , '我是一只来自北方的狼,却在南方冻成了狗');
fclose( $fp );
print $len .'字节被写入了\n';
?>
|
登入後複製
总结:
1.不论有没有新建都会打开文件重新写入
2.原有的文件内容会被覆盖掉
3.文件不存在会创建
那我们来对比一下以下几个模式的不同:
模式 |
说明 |
r |
只能读不能使用fwrite写 |
r+ |
可操作读、写 |
w |
只可以写功能 |
w+ |
即可读又可以写 |
a模式和w模式的不同
同样是下面的这段代码,我们改为a模式。
1 2 3 4 5 6 | <?php
$filename = 'test.txt';
$fp = fopen ( $filename , "a" );
$len = fwrite( $fp ,'读大学迷茫了,PHP中文网学PHP给你希望');
echo $len .'字节被写入了\n';
?>
|
登入後複製
打开网页执行这段代码,你会发现:每刷新一次,文件中就会多一段
:读大学迷茫了,PHP中文网学PHP给你希望。
总结:
模式 |
总结 |
x |
每次写入会干掉原有文件的内容,文件不存在都会创建 |
a |
每次写入都会向文件的尾端追加内容 |
x模式和w模式的不同
这段代码我们再实验一次,改为x模式:
1 2 3 4 5 6 | <?php
$filename = 'test.txt';
$fp = fopen ( $filename , "x" );
$len = fwrite( $fp ,'读大学迷茫了,PHP中文网学PHP给你希望');
echo $len .'字节被写入了\n';
?>
|
登入後複製
我们会发现:
1 2 3 4 5 | 1.文件存在的时候会报错
2.如果把 $filename 改成其他的文件名,就可以了。但是,再次刷新的时候又报错了
3.x+ 是增强的x模式。读取时也可以使用。
|
登入後複製
php 创建临时文件
我们来学习一下这个函数:
功能:创建一个临时文件,返回资源类型。关闭文件即被删除。
php移动、拷贝和删除文件
重命名文件
这个函数返回一个bool值,将旧的名字改为新的名字。
1 2 3 4 5 6 7 8 9 10 | <?php
$filename = 'test.txt';
$filename2 = 'reName.txt.';
rename( $filename , $filename2 );
?>
|
登入後複製
复制文件
复制文件,就相当于是克隆技术,将一个原来的东西再克隆成一个新的东西。两个长得一模一样。
功能:将指定路径的源文件,复制一份到目标文件的位置。
1 2 3 4 5 6 7 8 9 10 11 12 | <?php
$filename = ' copy .txt';
$filename2 = 'copy2.txt';
copy ( $filename , $filename2 );
?>
|
登入後複製
注:
1·复制的文件名不能和源文件同名,否则无法复制;
2.复制文件名如果已经存在的话,会把源文件的内容copy一份替换复制文件的内容。
删除文件
删除文件就是将指定路径的一个文件删除,不过这个删除是直接删除。使用的是windows电脑,你在回收站看不到这个文件。
你只会发现,这个文件消失了。
1 2 3 4 5 6 7 8 9 | <?php
$filename = 'test.txt';
if (unlink( $filename )) {
echo "删除文件成功 $filename!\n" ;
} else {
echo "删除 $filename 失败!\n" ;
}
?>
|
登入後複製
php检测文件属性函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | bool file_exists ( $指定文件名或者文件路径)
功能:文件是否存在。
bool is_readable ( $指定文件名或者文件路径)
功能:文件是否可读
bool is_writeable ( $指定文件名或者文件路径)
功能:文件是否可写
bool is_executable ( $指定文件名或者文件路径)
功能:文件是否可执行
bool is_file ( $指定文件名或者文件路径)
功能:是否是文件
bool is_dir ( $指定文件名或者文件路径)
功能:是否是目录
void clearstatcache ( void )
功能:清楚文件的状态缓存
|
登入後複製
我们来讲第一个例子,文件锁。如果已经安装了,存在安装锁就提示已安装,否则就继续安装。
我们假设安装界面的网址是:install.php,安装的锁文件是install.lock。我们就可以检测install.lock文件是否存在。
1 2 3 4 5 6 7 8 9 | <?php
if ( file_exists ('install.lock')){
echo '已安装,请不要再次进行安装';
exit ;
}
?>
|
登入後複製
php 文件常用函数和常量
我们会使用到一个常量:
由于FILE是PHP的预定义常量,所以没办法改变,如果需要让FILE也自适应操作系统。
那么就是不要用FILE,可以用自定义的常量,并且把FILE处理一下,如下:
1 2 3 4 5 6 7 8 9 10 | <?php
$_current_file = str_replace ( array ('/', '\\'), DIRECTORY_SEPARATOR, __FILE__ );
define('__CUR_FILE__', $_current_file );
echo __CUR_FILE__;
?>
|
登入後複製
文件指针操作函数
1 2 3 4 5 | rewind ( resource handle)
功能:指针回到开始处
fseek ( resource handle, int offset [, int from_where])
功能:文件指针向后移动指定字符
|
登入後複製
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php
> demo2.txt
> aaaaa
> bbbbb
> 11111
> 22222
$fp = fopen ( 'demo2.txt' , 'r+' );
echo fread ( $fp ,10);
rewind ( $fp );
echo '<br>' ;
echo fread ( $fp ,10);
echo '<br>' ;
echo fseek ( $fp ,10);
echo '<br>' ;
echo fread ( $fp ,10);
echo '<br>' ;
fclose( $fp );
?>
|
登入後複製
filesize 检测文件的大小
1 2 3 4 5 6 7 | <?php
$filename = 'demo.txt';
echo $filename . '文件大小为: ' . filesize ( $filename ) . ' bytes';
?>
|
登入後複製
其它操作文件的函数
其实还有一些其他操作文件的函数,读取文件
函数名 |
功能 |
file |
把整个文件读入一个数组中 |
fgets |
从文件指针中读取一行,读到最后返回false |
fgetc |
从文件指针中读取一个字符,读到最后返回false |
ftruncate |
将文件截断到给定的长度 |
fgetc
1 2 3 4 5 6 7 8 9 10 11 12 | $fp = fopen ( 'demo2.txt' , 'r+' );
echo fgetc ( $fp ) . '<br />' ;
while ( $string = fgetc ( $fp )){
echo $string ;
}
|
登入後複製
fgets
1 2 3 4 5 6 7 8 | $fp = fopen ( 'demo.txt' , 'r+' );
echo fgets ( $fp );
echo fgets ( $fp );
echo fgets ( $fp );
echo fgets ( $fp );
|
登入後複製
ftruncate返回值为1 int
1 | ftruncate( $file , len);截取的长度大于文件内容长度,会用空字符填补
|
登入後複製
1 2 3 4 5 6 | $file = fopen ( "demo.txt" , "a+" );
echo ftruncate( $file ,20);
fclose( $file );
|
登入後複製
文件的时间函数
函数 |
功能说明 |
filectime |
文件创建时间 |
filemtime |
文件修改时间 |
fileatime |
文件上次访问时间 |
1 2 3 4 5 6 7 8 9 10 | <?php
$filename = 'demo.txt';
if ( file_exists ( $filename )) {
echo ' $filename 文件的上次访问时间是:' . date ( "Y-m-d H:i:s" , fileatime ( $filename ));
echo ' $filename 文件的创建时间是: ' . date ( "Y-m-d H:i:s" , filectime ( $filename ));
echo ' $filename 文件的修改时间是: ' . date ( "Y-m-d H:i:s" , filemtime ( $filename ));}
?>
|
登入後複製
php 文件锁处机制
文件锁的用途:
若一个人在写入一个文件,另外一个人同时也打个了这个文件进行写入文件。
这情况下,如果遇到一定的碰撞概率的话,不知道到底谁的操作为准。
因此,这个时候我们引入锁机制。
若用户A在写入或者读取这个文件的时候,将文件加上共享所。我可以读,其他人也可以读。
但是,我如果这与的时候。我使用独占锁。这个文件归我了,你们都别动,除非我将文件锁进行释放。
注意:加上了文件锁后要注意释放。
php 文件锁处机制
文件锁机制一般在单一打开文件的时候根本看不到效果。这一块的学习有一点点抽象。
大家不要去思考怎么实现的呀?
为什么看不到效果呀?
答:因为电脑的操作太快了,基本上是毫秒级的。所以这个实验其实是看不到效果的。
这一章了解文件锁的基本概念即可,熟悉文件锁函数和锁机制。
文件锁的用途:
若一个人在写入一个文件,另外一个人同时也打个了这个文件进行写入文件。
这情况下,如果遇到一定的碰撞概率的话,不知道到底谁的操作为准。
因此,这个时候我们引入锁机制。
若用户A在写入或者读取这个文件的时候,将文件加上共享所。我可以读,其他人也可以读。
但是,我如果这与的时候。我使用独占锁。这个文件归我了,你们都别动,除非我将文件锁进行释放。
注意:不论加上了文件锁后要注意释放。
我们来看看这个函数:
1 | bool flock ( resource $handleFile , int $operation )
|
登入後複製
我们来看看锁类型:
锁类型 |
说明 |
LOCK_SH |
取得共享锁定(读取的程序) |
LOCK_EX |
取得独占锁定(写入的程序) |
LOCK_UN |
释放锁定(无论共享或独占) |
我们接下来把demo2.txt加上一个独占锁,进行写入操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $fp = fopen ( "demo2.txt" , "r+" );
if ( flock ( $fp , LOCK_EX)) {
echo '1' ;
fwrite( $fp , "文件这个时候被我独占了哟\n" );
flock ( $fp , LOCK_UN);
} else {
echo "锁失败,可能有人在操作,这个时候不能将文件上锁" ;
}
fclose( $fp );
|
登入後複製
说明:
1.上例中我为了写入文件,把文件加上了独占锁。
2.如果我操作完成,写入完成后,解除掉了独占锁。
3.如果是在读取文件的时候,大家可加按照同样的处理思路加上共享锁。
以上是php如何修改php檔案內容的詳細內容。更多資訊請關注PHP中文網其他相關文章!