php 檔案常用函數和常數
檔案運算的常數
下面這一個常數是最常用的。是檔案目錄的分割符的常數。
我們來看看格式:
平台 | #分割符號 |
---|---|
windows | \ |
類別unix | / |
windows 的路徑格式為d:\xxx\xxx 注意:windows支援d:/xxx/xxx
linux 的路徑格式為/home/xxx/xxx 注意:如果\home\xxx\xxx 在linux上是錯誤的
所以當你開啟轉義之類的話,轉義字元\ 用一起的話d:\xxx\xxx 是一樣的。判斷時候有兩個 \ 有的話 再轉成一個\ 再把 \ 替換成 /當路徑分割,這樣在linux上或者windos上的路徑就能保持統一了。
我們會使用到一個常數:
DIRECTORY_SEPARATOR
我們來寫一個小的實例,定義目前檔案所在的路徑:
由於FILE是PHP的預先定義常數,所以沒辦法改變,如果需要讓FILE也自適應作業系統。
那麼就是不要用FILE,可以用自訂的常數,並且把FILE處理一下,如下:
<?php $_current_file = str_replace(array('/', '\'), DIRECTORY_SEPARATOR, __FILE__); define('__CUR_FILE__', $_current_file); echo __CUR_FILE__; ?>
文件指標運算函數
rewind ( resource handle)
功能:指標回到開始處
fseek ( resource handle, int offset [, int from_where])
功能:檔案指標向後移動指定字元
我們在先前的讀取當中我們發現fread指定長度的資料在先前讀取。讀取指定長度的內容,下次再讀取的時候從原始位置開始再接著向後讀取。
如上圖,我們可以想像:
1.檔案剛打開的時候讀到的是紅色的圖示
2 .文件假色從A讀取到了C
3.下次開啟的時候可再從C綠色箭頭處開始讀取。
我們在demo.txt檔案中寫入一批檔案:
abcdeefghijklk
opqrst
uvwxyz
12345678
我們可開始來實驗一次。
<?php $fp = fopen('demo2.txt', 'r+'); //读取10个字符 echo fread($fp,10); //指针设置回到开始处 rewind($fp); //再读取10次看看输出的是什么 echo '<br>'; echo fread($fp,10); echo '<br>'; //文件指针向后移动10个字符 echo fseek($fp,10); echo '<br>'; //再看看文件中输出的是什么 echo fread($fp,10); echo '<br>'; fclose($fp); ?>
上面的例子,你會發現fseek指定多長就移動多少個位元組。而rewind每次都是回到文件的起點。
那要如何移動到最末端呢?我們可以統計位元組數。在fseek的時候直接移到回後。
下面我們來講filesize統計位元組數。
filesize 偵測檔案的大小
<?php $filename = 'demo.txt'; echo $filename . '文件大小为: ' . filesize($filename) . ' bytes'; ?>
其實它操作檔的函數
其實還有一些其他操作檔的函數,讀取檔案
函數名稱 | 功能 |
---|---|
#file | 把整個檔案讀入一個陣列中 |
fgets | 從檔案指標中讀取一行,讀到最後回傳false |
fgetc | 從檔案指標讀取一個字符,讀到最後回傳false |
#ftruncate | 將檔案截斷到給定的長度 |
我們透過一個實例來把上面幾個函數都用到。
我們在demo.txt檔案中寫入一批檔案:
abcdeefghijklk
opqrst
uvwxyz
12345678
<?php //以增加的r模式打开 $fp = fopen('demo.txt','r+'); //你分发现每次只读一个字符 echo fgetc($fp); //我要全部读取可以,读取一次将结果赋值一次给$string while($string = fgetc($fp)){ echo $string; } ?>
fgets每次打開一行:
<?php //以增加的r模式打开 $fp = fopen('demo.txt','r+'); //你分发现每次只读一个字符 echo fgets($fp); echo fgets($fp); echo fgets($fp); echo fgets($fp); ?>
上面的程式碼,你會發現每次讀取一次都打開一行。讀取最後回傳的是false。
我們接下來看檔案截取函數:
<?php //打开我们上面的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));} ?>