檔案常用函數的常數

下面這一個常數是最常用的。是檔案目錄的分割符的常數。

我們來看看格式:


QQ截图20161009110829.png


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讀取指定長度的資料。讀取指定長度的內容,下次再讀取的時候從原始位置開始再接著向後讀取。

       QQ截图20161009110843.png                                     中上對上時中讀取#1#12#.2#12#.

2 .     檔案假色從A讀取到了C

3.     下次開啟的時候可再從C綠色箭頭開始讀取。

我們在demo.txt檔案中寫入一批檔案:

abcdeefghijklk

opqrst

uvwxyz

12345678

#我們可開始來實驗一次。

<?php
$fp = fopen('output.txt', 'r+');
//读取10个字符
echo fread($fp,10);
 
//指针设置回到开始处
rewind($handle);
//再读取10次看看输出的是什么
echo fread($fp,10);
 
//文件指针向后移动10个字符
echo fseek($fp,10);
 
//再看看文件中输出的是什么
echo fread($fp,10);
 
fclose($handle);
?>

上面的例子,你會發現fseek指定多長就移動多少個位元組。而rewind每次都是回到文件的起點。

那要如何移動到最末端呢?我們可以統計位元組數。在fseek的時候直接移到回後。

下面我們來講filesize統計位元組數。

filesize 偵測檔案的大小

<?php
 
 
$filename = 'demo.txt';
echo $filename . '文件大小为: ' . filesize($filename) . ' bytes';
 
?>

其實它操作檔的函數

其實還有一些其他操作檔的函數,讀取檔案


   

QQ截图20161009110857.png

我們透過一個實例來把上面幾個函數都用到。

我們在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);
?>

上例我們發現,截取多長就能顯示多長的內容。

QQ截图20161009111024.png

   

<?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 $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)); } ?>