本篇文章主要介紹如何建立和修改檔案內容,感興趣的朋友參考下,希望可以對大家有所協助。
file_put_contents寫入檔案
我們先來學習第一種寫入檔案的方式:
int file_put_contents ( string $檔案路徑, string $寫入資料])
功能:向指定的檔案當中寫入一個字串(會清空原有的內容),如果檔案不存在則建立檔案。返回的是寫入的位元組長度
<?php $data = "在topic.alibabacloud.com學好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 長度])
<?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模式和w模式的不同
同樣是下面的這段代碼,我們改為a模式。
<?php $filename = 'test.txt'; $fp= fopen($filename, "a"); $len = fwrite($fp,'讀大學迷茫了,topic.alibabacloud.com學PHP給你希望'); echo $len .'位元組被寫入了\n';?>
開啟網頁執行這段代碼,你會發現:每重新整理一次,檔案中就會多一段:讀大學迷茫了,topic.alibabacloud.com學PHP給你希望。
總結:
| 模式 |
總結 |
| x |
每次寫入會幹掉原有檔案的內容,檔案不存在都會建立 |
| a |
每次寫入都會向檔案的尾端追加內容 |
x模式和w模式的不同
這段代碼我們再實驗一次,改為x模式:
<?php $filename = 'test.txt'; $fp= fopen($filename, "x"); $len = fwrite($fp,'讀大學迷茫了,topic.alibabacloud.com學PHP給你希望'); echo $len .'位元組被寫入了\n';?>
我們會發現:
1.檔案存在的時候會報錯2.如果把$filename 改成其他的檔案名稱,就可以了。但是,再次重新整理的時候又報錯了3.x+ 是增強x模式。讀取時也可以使用。
php 建立臨時檔案
我們來學習一下這個函數:
resource tmpfile ( )
功能:建立一個臨時檔案,返回資源類型。關閉檔案即被刪除。
php移動、拷貝和刪除檔案
重新命名檔案
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"; }?>
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檔案是否存在。
<?phpif(file_exists('install.lock')){ echo '已安裝,請不要再次進行安裝'; exit;}?>
php 檔案常用函數和常量
|平台 |分割符|--|--||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 bbbecho '<br>';//檔案指標向後移動10個字元,(當前指標在最開始的位置)echo fseek($fp,10); // fseek的傳回值為0echo '<br>';//再看看檔案中輸出的是什麼echo fread($fp,10); // bb 11111 echo '<br>';fclose($fp);?>
filesize 檢測檔案的大小
<?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 />'; //唯讀取一個字元//我要全部讀取可以,讀取一次將結果賦值一次給$stringwhile($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 int
ftruncate($file , len);截取的長度大於檔案內容長度,會用Null 字元填補
//開啟我們上面的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));} ?>
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, "檔案這個時候被我獨佔了喲\n"); // 釋放鎖定 flock($fp, LOCK_UN); } else { echo "鎖失敗,可能有人在操作,這個時候不能將檔案上鎖"; } fclose($fp);
說明:
1.上例中我為了寫入檔案,把檔案加上了獨佔鎖。
2.如果我操作完成,寫入完成後,解除掉了獨佔鎖。
3.如果是在讀取檔案的時候,大家可加按照同樣的處理思路加上共用鎖定。