PHP的文件操做經常使用函數

PHP文件操做

1 得到文件名:
basename — 返回路徑中的文件名部分php

給出一個包含有指向一個文件的全路徑的字符串,本函數返回基本的文件名。若是文件名是以 suffix 結束的,那這一部分也會被去掉。 html

string basename ( string $path [, string $suffix ] )node

$path = "/home/cate/index/index2.php";
$file = basename($path);
echo $file.'<br>'; //index2.php

$file2 = basename($path,'.php');
echo $file2;    //index2

$file3 = basename($path,'2.php');
echo $file2;    //index程序員

2 得到目錄名json

dirname — 返回路徑中的目錄部分數組

string dirname ( string $path )安全

給出一個包含有指向一個文件的全路徑的字符串,本函數返回去掉文件名後的目錄名。服務器

echo dirname(__FILE__);函數

__FILE__指向當前文件所在的路徑 等同於 getcwd();測試

3 獲得路徑關聯數組

pathinfo — 返回文件路徑的信息

pathinfo() 返回一個關聯數組包含有 path 的信息。包括如下的數組單元:dirnamebasename  extension

能夠經過參數 options 指定要返回哪些單元。它們包括:PATHINFO_DIRNAMEPATHINFO_BASENAME  PATHINFO_EXTENSION。默認是返回所有的單元。若是不是要求取得全部單元,則本函數返回字符串。

 

 

<?php
$path_parts = pathinfo("/home/cate/index.action.html");

// /home/cate   文件目錄
echo $path_parts["dirname"] . "<br/>";          

//  index.action.html  文件名
echo $path_parts["basename"] . "<br/>";         

//  html        擴展名
echo $path_parts["extension"] . "<br/>";

//直接獲取擴展名       
echo pathinfo("/home/cate/index.action.html", PATHINFO_EXTENSION);  

4 fopen — 打開文件或者 URL

resource fopen ( string $filename , string $mode [, bool $use_include_path [, resource $zcontext ]] )

'r'

只讀方式打開,將文件指針指向文件頭。

'r+'

讀寫方式打開,將文件指針指向文件頭。

'w'

寫入方式打開,將文件指針指向文件頭並將文件大小截爲零。若是文件不存在則嘗試建立之。

'w+'

讀寫方式打開,將文件指針指向文件頭並將文件大小截爲零。若是文件不存在則嘗試建立之。

'a'

寫入方式打開,將文件指針指向文件末尾。若是文件不存在則嘗試建立之。

'a+'

讀寫方式打開,將文件指針指向文件末尾。若是文件不存在則嘗試建立之。

'x'

建立並以寫入方式打開,將文件指針指向文件頭。若是文件已存在,則 fopen() 調用失敗並返回 FALSE,並生成一條 E_WARNING 級別的錯誤信息。若是文件不存在則嘗試建立之。這和給 底層的 open(2) 系統調用指定 O_EXCL|O_CREAT 標記是等價的。此選項被 PHP 4.3.2 以及之後的版本所支持,僅能用於本地文件。

'x+'

建立並以讀寫方式打開,將文件指針指向文件頭。若是文件已存在,則 fopen() 調用失敗並返回 FALSE,並生成一條 E_WARNING 級別的錯誤信息。若是文件不存在則嘗試建立之。這和給 底層的 open(2) 系統調用指定 O_EXCL|O_CREAT 標記是等價的。此選項被 PHP 4.3.2 以及之後的版本所支持,僅能用於本地文件。

<?php
    $handle = fopen("doc.txt", "r");
    var_dump($handle);

D:\wamp\www\test\jsontest.php:3:resource(3stream)

<?php
    $file = fopen('newtxt.txt','w')or die('沒法打開文件');//不存在則自動建立
    $data = 'you are a coder!';
    fwrite($file,$data);
    $data = 'you are a MAN!';
    fwrite($file,$data);
    fclose($file);

 

 

 

5  fstat — 經過已打開的文件指針取得文件信息

array fstat ( resource $handle )

獲取由文件指針 handle 所打開文件的統計信息。本函數和 stat() 函數類似,除了它是做用於已打開的文件指針而不是文件名。

返回一個數組具備該文件的統計信息,該數組的格式詳細說明於手冊中 stat() 頁面裏。

<?php

// 打開文件
$fp = fopen("doc.txt", "r");

// 取得統計信息
$fstat = fstat($fp);

// 關閉文件
fclose($fp);
// 只顯示關聯數組部分
//print_r(array_slice($fstat, 13)); 


print_r($fstat); //獲取一個文件信息數組包括索引和關聯數組

array_slice — 從數組中取出一段 返回數組

array array_slice ( array $array , int $offset [, int $length [, bool $preserve_keys ]] )

array_slice() 返回根據 offset 和 length 參數所指定的 array 數組中的一段序列。

若是 offset 非負,則序列將從 array 中的此偏移量開始。若是 offset 爲負,則序列將從 array 中距離末端這麼遠的地方開始。

若是給出了 length 而且爲正,則序列中將具備這麼多的單元。若是給出了 length 而且爲負,則序列將終止在距離數組末端這麼遠的地方。若是省略,則序列將從 offset 開始一直到 array 的末端。

<?php
$input = array("a", "b", "c", "d", "e");

$output = array_slice($input, 2);      // returns "c", "d", and "e"
$output = array_slice($input, -2, 1);  // returns "d"
$output = array_slice($input, 0, 3);   // returns "a", "b", and "c"

// note the differences in the array keys
print_r(array_slice($input, 2, -1));
print_r(array_slice($input, 2, -1, true));

 

Array

 

(

 

[0] => c

 

[1] => d

 

)

 

Array

 

(

 

[2] => c

 

[3] => d

 

)

 

 

 

6 filesize — 取得文件大小

int filesize ( string $filename )

返回文件大小的字節數,若是出錯返回 FALSE 並生成一條 E_WARNING 級的錯誤。

<?php
$filename = 'doc.txt';
echo $filename.':'.filesize($filename).'bytes';

doc.txt:46bytes

7.disk_free_space — 返回目錄中的可用空間

float disk_free_space ( string $directory )

給出一個包含有一個目錄的字符串,本函數將根據相應的文件系統或磁盤分區返回可用的字節數。

<?php
echo disk_free_space("C:").'<br/>';
echo disk_free_space("D:").'<br/>';
echo disk_free_space("/");

71001600000
186459181056

disk_total_space — 返回一個目錄的磁盤總大小

8 fileatime — 取得文件的上次訪問時間

filectime — 取得文件的 inode 修改時間

filemtime — 取得文件修改時間

9 file — 把整個文件讀入一個數組中

<?php
$myfile = 'doc.txt';
$lines = file($myfile);

for($i=0,$len = count($lines);$i<$len;$i++){
    echo mb_convert_encoding($lines[$i], "UTF-8", "GBK").'<br/>';
}

我是一個新手程序員,須要慢慢努力纔能有所收穫1! 
我是一個新手程序員,須要慢慢努力纔能有所收穫2! 
我是一個新手程序員,須要慢慢努力纔能有所收穫3! 
我是一個新手程序員,須要慢慢努力纔能有所收穫4! 
我是一個新手程序員,須要慢慢努力纔能有所收穫5! 
我是一個新手程序員,須要慢慢努力纔能有所收穫6!

mb_convert_encoding($lines[$i], "UTF-8", "GBK")

將每一行原來的WINDOWS下GBK格式的數據$lines[$i]轉換爲UTF-8格式

string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] )

<?php
$myfile = 'doc.txt';
$encoding = mb_detect_encoding($myfile, array('GBK','UTF-16','UCS-2','UTF-8','BIG5','ASCII'));
echo $encoding;

CP936 GBK

mb_detect_encoding — 偵測字符集  第一個爲文件或者路徑 第二個爲可能的字符集

10 fgets — 從文件指針中讀取一行

string fgets ( int $handle [, int $length ] )

handle 指向的文件中讀取一行並返回長度最多爲 length - 1 字節的字符串。碰到換行符(包括在返回值中)、EOF 或者已經讀取了 length - 1 字節後中止(看先碰到那一種狀況)。若是沒有指定 length,則默認爲 1K,或者說 1024 字節。

出錯時返回 FALSE

<?php
$handle = fopen('doc.txt','r');
if ($handle){
    while (!feof($handle)){
        $data[] = fgets($handle,1024);
    }
    print_r($data);
    fclose($handle);
}

 

Array

(

    [0] => 我是一個新手程序員,須要慢慢努力纔能有所收穫1!

 

    [1] => 我是一個新手程序員,須要慢慢努力纔能有所收穫2!

 

    [2] => 我是一個新手程序員,須要慢慢努力纔能有所收穫3!

 

    [3] => 我是一個新手程序員,須要慢慢努力纔能有所收穫4!

 

    [4] => 我是一個新手程序員,須要慢慢努力纔能有所收穫5!

 

    [5] => 我是一個新手程序員,須要慢慢努力纔能有所收穫6!

)

feof — 測試文件指針是否到了文件結束的位置

若是服務器沒有關閉由 fsockopen() 所打開的鏈接,feof() 會一直等待直到超時而返回 TRUE。默認的超時限制是 60 秒,能夠使用 stream_set_timeout() 來改變這個值。

fclose — 關閉一個已打開的文件指針

14 fgetss -- 從文件指針中讀取一行並過濾掉 HTML 標記
fgets() 相同,只除了 fgetss 嘗試從讀取的文本中去掉任何 HTML 和 PHP 標記。

   能夠用可選的第三個參數指定哪些標記不被去掉

file_exists — 檢查文件或目錄是否存在

bool file_exists ( string $filename )

若是由 filename 指定的文件或目錄存在則返回 TRUE,不然返回 FALSE

 15 file_put_contents — 將一個字符串寫入文件

int file_put_contents ( string $filename , string $data [, int $flags [, resource $context ]] )

和依次調用 fopen()fwrite() 以及 fclose() 功能同樣。

filename 要寫入數據的文件名
data  要寫入的數據。類型能夠是 stringarray(但不能爲多維數組),或者是 stream 資源
flags  可選,規定如何打開/寫入文件。可能的值:
FILE_USE_INCLUDE_PATH:檢查 filename 副本的內置路徑
FILE_APPEND:在文件末尾以追加的方式寫入數據
LOCK_EX:對文件上鎖
context  可選,Context是一組選項,能夠經過它修改文本屬性

<?php
echo file_put_contents('doc.txt','你是一個程序員7',FILE_APPEND);

返回字節數22

若是文件不存在,則建立文件,至關於fopen()函數行爲。

若是文件存在,默認將清空文件內的內容,可設置 flags 參數值爲 FILE_APPEND 以免。

file_put_contents 函數可安全用於二進制對象。

若是對於肯定已經存在的文件,最好進行一個判斷

if (file_exists('test.txt')) {    file_put_contents('test.txt','contents' );}

相關文章
相關標籤/搜索