這篇文章主要介紹了php修改php文件內容的方法,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

php修改文件內容的方法:首先通過file_put_contents函數寫入文件;然后使fwrite配合fopen進行寫入并修改的操作;最后通過file_exists等函數檢測文件屬性即可。
我們先來學習第一種寫入文件的方式:
int file_put_contents ( string $文件路徑, string $寫入數據])
功能:向指定的文件當中寫入一個字符串(會清空原有的內容),如果文件不存在則創建文件。返回的是寫入的字節長度
<?php
$data = "在創新互聯學好PHP,妹子票子不再話下!";
$numbytes = file_put_contents('binggege.txt', $data); //如果文件不存在創建文件,并寫入內容
if($numbytes){
echo '寫入成功,我們讀取看看結果試試:';
echo file_get_contents('binggege.txt');
}else{
echo '寫入失敗或者沒有權限,注意檢查';
}
?>int fwrite ( resource $文件資源變量, string $寫入的字符串 [, int 長度])
<?php $filename = 'test.txt'; $fp= fopen($filename, "w"); //w是寫入模式,文件不存在則創建文件寫入。 $len = fwrite($fp, '我是一只來自北方的狼,卻在南方凍成了狗'); fclose($fp); print $len .'字節被寫入了\n'; ?>
總結:
1.不論有沒有新建都會打開文件重新寫入
2.原有的文件內容會被覆蓋掉
3.文件不存在會創建
那我們來對比一下以下幾個模式的不同:
| 模式 | 說明 |
|---|---|
| r | 只能讀不能使用fwrite寫 |
| r+ | 可操作讀、寫 |
| w | 只可以寫功能 |
| w+ | 即可讀又可以寫 |
同樣是下面的這段代碼,我們改為a模式。
<?php $filename = 'test.txt'; $fp= fopen($filename, "a"); $len = fwrite($fp,'讀大學迷茫了,創新互聯學PHP給你希望'); echo $len .'字節被寫入了\n'; ?>
打開網頁執行這段代碼,你會發現:每刷新一次,文件中就會多一段
:讀大學迷茫了,創新互聯學PHP給你希望。
總結:
| 模式 | 總結 |
|---|---|
| x | 每次寫入會干掉原有文件的內容,文件不存在都會創建 |
| a | 每次寫入都會向文件的尾端追加內容 |
這段代碼我們再實驗一次,改為x模式:
<?php $filename = 'test.txt'; $fp= fopen($filename, "x"); $len = fwrite($fp,'讀大學迷茫了,創新互聯學PHP給你希望'); echo $len .'字節被寫入了\n'; ?>
我們會發現:
1.文件存在的時候會報錯 2.如果把$filename 改成其他的文件名,就可以了。但是,再次刷新的時候又報錯了 3.x+ 是增強的x模式。讀取時也可以使用。
我們來學習一下這個函數:
resource tmpfile ( )
功能:創建一個臨時文件,返回資源類型。關閉文件即被刪除。
重命名文件
bool rename($舊名,$新名);
這個函數返回一個bool值,將舊的名字改為新的名字。
<?php //舊文件名 $filename = 'test.txt'; //新文件名 $filename2 = 'reName.txt.'; //修改名稱 rename($filename, $filename2); ?>
復制文件
復制文件,就相當于是克隆技術,將一個原來的東西再克隆成一個新的東西。兩個長得一模一樣。
bool copy(源文件,目標文件)
功能:將指定路徑的源文件,復制一份到目標文件的位置。
<?php
//舊文件名
$filename = 'copy.txt';
//新文件名
$filename2 = 'copy2.txt';
//修改名字。
copy($filename, $filename2);
?>注:
1·復制的文件名不能和源文件同名,否則無法復制;
2.復制文件名如果已經存在的話,會把源文件的內容copy一份替換復制文件的內容。
刪除文件
刪除文件就是將指定路徑的一個文件刪除,不過這個刪除是直接刪除。使用的是windows電腦,你在回收站看不到這個文件。
你只會發現,這個文件消失了。
bool unlink(指定路徑的文件)
<?php
$filename = 'test.txt';
if (unlink($filename)) {
echo "刪除文件成功 $filename!\n";
} else {
echo "刪除 $filename 失敗!\n";
}
?>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文件是否存在。
<?php
if(file_exists('install.lock')){
echo '已安裝,請不要再次進行安裝';
exit;
}
?>| 平臺 | 分割符 |
|---|---|
| windows | \ |
| 類unix | / |
我們會使用到一個常量:
DIRECTORY_SEPARATOR //代表反斜杠
由于FILE是PHP的預定義常量,所以沒辦法改變,如果需要讓FILE也自適應操作系統。
那么就是不要用FILE,可以用自定義的常量,并且把FILE處理一下,如下:
<?php
//獲取文件路勁,然后用DIRECTORY_SEPARATOR替換路勁中的'/'、'\\';
$_current_file = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, __FILE__);
//重新字定義常量,輸出格式化后的文件路勁
define('__CUR_FILE__', $_current_file);
echo __CUR_FILE__; // D:\myphp\test\inidex.php
?>文件指針操作函數
rewind ( resource handle) 功能:指針回到開始處 fseek ( resource handle, int offset [, int from_where]) 功能:文件指針向后移動指定字符
<?php
> demo2.txt
> aaaaa
> bbbbb
> 11111
> 22222
$fp = fopen('demo2.txt', 'r+');
//讀取10個字符, //讀取前十個字節(空格算一個,換行算兩個字節)
echo fread($fp,10);
//指針設置回到開始處
rewind($fp); // aaaaa bbb
//再讀取10次看看輸出的是什么
echo '<br>';
echo fread($fp,10); // aaaaa bbb
echo '<br>';
//文件指針向后移動10個字符,(當前指針在最開始的位置)
echo fseek($fp,10); // fseek的返回值為0
echo '<br>';
//再看看文件中輸出的是什么
echo fread($fp,10); // bb 11111
echo '<br>';
fclose($fp);
?><?php $filename = 'demo.txt'; echo $filename . '文件大小為: ' . filesize($filename) . ' bytes'; ?>
其它操作文件的函數
其實還有一些其他操作文件的函數,讀取文件
| 函數名 | 功能 |
|---|---|
| file | 把整個文件讀入一個數組中 |
| fgets | 從文件指針中讀取一行,讀到最后返回false |
| fgetc | 從文件指針中讀取一個字符,讀到最后返回false |
| ftruncate | 將文件截斷到給定的長度 |
fgetc
//以增加的r模式打開
$fp = fopen('demo2.txt','r+');
//你會發現每次只讀一個字符
echo fgetc($fp) .'<br />'; //只讀取一個字符
//我要全部讀取可以,讀取一次將結果賦值一次給$string
while($string = fgetc($fp)){
echo $string;
//讀取不到返回false
}fgets
//以增加的r模式打開
$fp = fopen('demo.txt','r+');
//你會發現每次讀取一次打開一行
echo fgets($fp);
echo fgets($fp);
echo fgets($fp);
echo fgets($fp); //讀取不到返回falseftruncate返回值為1 int
ftruncate($file , len);截取的長度大于文件內容長度,會用空字符填補
//打開我們上面的demo.txt文件
$file = fopen("demo.txt", "a+");
//你可以數數20個字有多長,看看是不是達到效果了
echo ftruncate($file,20);
fclose($file);| 函數 | 功能說明 |
|---|---|
| filectime | 文件創建時間 |
| filemtime | 文件修改時間 |
| fileatime | 文件上次訪問時間 |
<?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));}
?>文件鎖的用途:
若一個人在寫入一個文件,另外一個人同時也打個了這個文件進行寫入文件。
這情況下,如果遇到一定的碰撞概率的話,不知道到底誰的操作為準。
因此,這個時候我們引入鎖機制。
若用戶A在寫入或者讀取這個文件的時候,將文件加上共享所。我可以讀,其他人也可以讀。
但是,我如果這與的時候。我使用獨占鎖。這個文件歸我了,你們都別動,除非我將文件鎖進行釋放。
注意:加上了文件鎖后要注意釋放。
php 文件鎖處機制
文件鎖機制一般在單一打開文件的時候根本看不到效果。這一塊的學習有一點點抽象。
大家不要去思考怎么實現的呀?
為什么看不到效果呀?
答:因為電腦的操作太快了,基本上是毫秒級的。所以這個實驗其實是看不到效果的。
這一章了解文件鎖的基本概念即可,熟悉文件鎖函數和鎖機制。
文件鎖的用途:
若一個人在寫入一個文件,另外一個人同時也打個了這個文件進行寫入文件。
這情況下,如果遇到一定的碰撞概率的話,不知道到底誰的操作為準。
因此,這個時候我們引入鎖機制。
若用戶A在寫入或者讀取這個文件的時候,將文件加上共享所。我可以讀,其他人也可以讀。
但是,我如果這與的時候。我使用獨占鎖。這個文件歸我了,你們都別動,除非我將文件鎖進行釋放。
注意:不論加上了文件鎖后要注意釋放。
我們來看看這個函數:
bool flock ( resource $handleFile , int $operation)
我們來看看鎖類型:
| 鎖類型 | 說明 |
|---|---|
| LOCK_SH | 取得共享鎖定(讀取的程序) |
| LOCK_EX | 取得獨占鎖定(寫入的程序) |
| LOCK_UN | 釋放鎖定(無論共享或獨占) |
我們接下來把demo2.txt加上一個獨占鎖,進行寫入操作。
$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修改php文件內容的方法-創新互聯
網頁地址:http://www.yijiale78.com/article34/cspdpe.html
成都網站建設公司_創新互聯,為您提供品牌網站設計、品牌網站建設、關鍵詞優化、網站維護、服務器托管、App設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯