php檔案 修改,php如何修改php檔案內容

php如何修改php檔案內容2020-10-19 16:04:08

f4dc96e2240924b2649b764f9ae9526b.png

php修改檔案內容的方法:首先透過file_put_contents函式寫入檔案;然後使fwrite配合fopen進行寫入並修改的操作;最後透過file_exists等函式檢測檔案屬性即可。

推薦:《PHP影片教學》file_put_contents寫入檔案

我們先來學習第一種寫入檔案的方式:int file_put_contents ( string $檔案路徑, string $寫入資料])

功能:向指定的檔案當中寫入一個字串(會清空原有的內容),如果檔案不存在則建立檔案。回傳的是寫入的位元組長度

$data = "在PHP中文網學好PHP,妹子票子不再話下!";

$numbytes = file_put_contents('binggege.txt', $data); //如果檔案不存在建立檔案,並寫入內容

if($numbytes){

echo '寫入成功,我們讀取看看結果試試:';

echo file_get_contents('binggege.txt');

}else{

echo '寫入失敗或者沒有許可權,注意檢查';

}

?>fwrite配合fopen進行寫入操作int fwrite ( resource $檔案資源變數, string $寫入的字串 [, int 長度])

$filename = 'test.txt';

$fp= fopen($filename, "w"); //w是寫入模式,檔案不存在則建立檔案寫入。

$len = fwrite($fp, '我是一隻來自北方的狼,卻在南方凍成了狗');

fclose($fp);

print $len .'位元組被寫入了
';

?>

總結:

1.不論有沒有新建都會開啟檔案重新寫入

2.原有的檔案內容會被覆蓋掉

3.檔案不存在會建立

那我們來對比一下以下幾個模式的不同:模式說明r只能讀不能使用fwrite寫r+可操作讀、寫w只可以寫功能w+即可讀又可以寫a模式和w模式的不同

同樣是下面的這段程式碼,我們改為a模式。

$filename = 'test.txt';

$fp= fopen($filename, "a");

$len = fwrite($fp,'讀大學迷茫了,PHP中文網學PHP給你希望');

echo $len .'位元組被寫入了
';

?>

開啟網頁執行這段程式碼,你會發現:每重新整理一次,檔案中就會多一段

:讀大學迷茫了,PHP中文網學PHP給你希望。

總結:模式總結x每次寫入會幹掉原有檔案的內容,檔案不存在都會建立a每次寫入都會向檔案的尾端新增內容x模式和w模式的不同

這段程式碼我們再實驗一次,改為x模式:

$filename = 'test.txt';

$fp= fopen($filename, "x");

$len = fwrite($fp,'讀大學迷茫了,PHP中文網學PHP給你希望');

echo $len .'位元組被寫入了
';

?>

我們會發現:1.檔案存在的時候會報錯

2.如果把$filename 改成其他的檔名,就可以了。但是,再次重新整理的時候又報錯了

3.x+ 是增強的x模式。讀取時也可以使用。php 建立臨時檔案

我們來學習一下這個函式:resource tmpfile ( )

功能:建立一個臨時檔案,回傳資源型別。關閉檔案即被刪除。php移動、拷貝和刪除檔案

重命名檔案bool rename($舊名,$新名);

這個函式回傳一個bool值,將舊的名字改為新的名字。

//舊檔名

$filename = 'test.txt';

//新檔名

$filename2 = 'reName.txt.';

//修改名稱

rename($filename, $filename2);

?>

複製檔案

複製檔案,就相當於是克隆技術,將一個原來的東西再克隆成一個新的東西。兩個長得一模一樣。bool copy(源檔案,目標檔案)

功能:將指定路徑的源檔案,複製一份到目標檔案的位置。

//舊檔名

$filename = 'copy.txt';

//新檔名

$filename2 = 'copy2.txt';

//修改名字。

copy($filename, $filename2);

?>

註:

1·複製的檔名不能和源檔案同名,否則無法複製;

2.複製檔名如果已經存在的話,會把源檔案的內容copy一份取代複製檔案的內容。

刪除檔案

刪除檔案就是將指定路徑的一個檔案刪除,不過這個刪除是直接刪除。使用的是windows電腦,你在資源回收筒看不到這個檔案。

你只會發現,這個檔案消失了。bool unlink(指定路徑的檔案)

$filename = 'test.txt';

if (unlink($filename)) {

echo "刪除檔案成功 $filename!
";

} else {

echo "刪除 $filename 失敗!
";

}

?>php檢測檔案屬性函式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檔案是否存在。

if(file_exists('install.lock')){

echo '已安裝,請不要再次進行安裝';

exit;

}

?>php 檔案常用函式和常數平台分割符windows類unix/

我們會使用到一個常數:DIRECTORY_SEPARATOR //代表反斜線

由於FILE是PHP的預設常數,所以沒辦法改變,如果需要讓FILE也自適應作業系統。

那麼就是不要用FILE,可以用自定義的常數,並且把FILE處理一下,如下:

//取得檔案路勁,然後用DIRECTORY_SEPARATOR取代路勁中的'/'、'\';

$_current_file = str_replace(array('/', '\'), DIRECTORY_SEPARATOR, __FILE__);

//重新字定義常數,輸出格式化後的檔案路勁

define('__CUR_FILE__', $_current_file);

echo __CUR_FILE__; // D:myphp estinidex.php

?>

檔案指標操作函式rewind ( resource handle)

功能:指標回到開始處

fseek ( resource handle, int offset [, int from_where])

功能:檔案指標向後移動指定字元

> demo2.txt

> aaaaa

> bbbbb

> 11111

> 22222

$fp = fopen('demo2.txt', 'r+');

//讀取10個字元, //讀取前十個位元組(空白算一個,換行算兩個位元組)

echo fread($fp,10);

//指標設定回到開始處

rewind($fp); // aaaaa bbb

//再讀取10次看看輸出的是什麼

echo '
';

echo fread($fp,10); // aaaaa bbb

echo '
';

//檔案指標向後移動10個字元,(當前指標在最開始的位置)

echo fseek($fp,10); // fseek的回傳值為0

echo '
';

//再看看檔案中輸出的是什麼

echo fread($fp,10); // bb 11111

echo '
';

fclose($fp);

?>filesize 檢測檔案的大小

$filename = 'demo.txt';

echo $filename . '檔案大小為: ' . filesize($filename) . ' bytes';

?>

其它操作檔案的函式

其實還有一些其他操作檔案的函式,讀取檔案函式名功能file把整個檔案讀入一個陣列中fgets從檔案指標中讀取一行,讀到最後回傳falsefgetc從檔案指標中讀取一個字元,讀到最後回傳falseftruncate將檔案截斷到給定的長度

fgetc//以增加的r模式開啟

$fp = fopen('demo2.txt','r+');

//你會發現每次唯讀一個字元

echo fgetc($fp) .'
'; //唯讀取一個字元

//我要全部讀取可以,讀取一次將結果賦值一次給$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); //讀取不到回傳false

ftruncate回傳值為1 intftruncate($file , len);擷取的長度大於檔案內容長度,會用空字元填補//開啟我們上面的demo.txt檔案

$file = fopen("demo.txt", "a+");

//你可以數數20個字有多長,看看是不是達到效果了

echo ftruncate($file,20);

fclose($file);檔案的時間函式函式功能說明filectime檔案建立時間filemtime檔案修改時間fileatime檔案上次訪問時間

$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在寫入或者讀取這個檔案的時候,將檔案加上共享所。我可以讀,其他人也可以讀。

但是,我如果這與的時候。我使用獨佔鎖。這個檔案歸我了,你們都別動,除非我將檔案鎖進行釋放。

注意:不論加上了檔案鎖後要注意釋放。

我們來看看這個函式: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, "檔案這個時候被我獨佔了喲
");

// 釋放鎖定

flock($fp, LOCK_UN);

} else {

echo "鎖失敗,可能有人在操作,這個時候不能將檔案上鎖";

}

fclose($fp);

說明:

1.上例中我為了寫入檔案,把檔案加上了獨佔鎖。

2.如果我操作完成,寫入完成後,解除掉了獨佔鎖。

3.如果是在讀取檔案的時候,大家可加按照同樣的處理思路加上共享鎖。

特別申明:本文內容來源網路,版權歸原作者所有,如有侵權請立即與我們聯繫([email protected]),我們將及時處理。

Tags 標籤