[PHP從小白到大牛]-019 PHP文件IO

文件相關函數/文件IO

文件信息相關

filetype()

filetype($filepath);獲取文件的類型;返回的是文件的類型

  • 返回文件的類型
  • 參數:filepath 文件的路徑
  • 可能的值有 fifochardirblocklinkfileunknown
  • 若是出錯則返回 FALSE
<?php

$file_path = 'sort.php';
$dir_path = '../0809';

var_dump(filetype($file_path)); // file
var_dump(filetype($dir_path)); // dir
複製代碼
D:\php20190701\php_code\0810\filetype.php:6:string 'file' (length=4)
D:\php20190701\php_code\0810\filetype.php:7:string 'dir' (length=3)
複製代碼

filesize()

filesize($filename);獲取文件的大小;返回的是字節數;

  • 返回文件大小的字節數,若是出錯返回 FALSE 並生成一條 E_WARNING 級的錯誤
  • 注意: 由於 PHP 的整數類型是有符號整型並且不少平臺使用 32 位整型,對 2GB 以上的文件,一些文件系統函數可能返回沒法預期的結果
  • 參數:filename 文件的路徑
<?php

$file_path = 'sort.php';

var_dump(filesize($file_path)); // 101字節
複製代碼

filectime()

filectime($filename);獲取文件的建立時間;返回的是時間戳;

  • 返回文件建立的時間, 或者在失敗時返回 FALSE
  • 時間以 Unix 時間戳的方式返回
  • 因爲返回的是時間戳,可使用date()函數修改日期和時區;
    • 修改時區:date_default_timezone_set('PRC');
    • 修改爲可見日期:date('Y-m-d H:i:s',filectime($filename));
  • 參數:filename 文件的路徑

filemtime()

filemtime($filename);獲取文件的修改時間;返回的是時間戳;

  • 返回文件上次被修改的時間, 或者在失敗時返回 FALSE
  • 時間以 Unix 時間戳的方式返回,可用於 date()
  • (date()函數如上)
  • 參數:filename 文件的路徑

fileatime()

fileatime($filename);獲取文件的最後訪問時間;返回的是時間戳;

  • 返回文件上次被訪問的時間, 或者在失敗時返回 FALSE
  • 時間以 Unix 時間戳的方式返回
  • 因爲返回的是時間戳,可使用date()函數修改日期和時區;
    • date()函數如上;修改時區和修改爲可見日期;
  • 參數:filename 文件的路徑
<?php

$file_path = 'sort.php';

var_dump(date('Y-m-d H:i:s',filectime($file_path))); 
var_dump(date('Y-m-d H:i:s',filemtime($file_path))); 
var_dump(date('Y-m-d H:i:s',fileatime($file_path))); 
複製代碼
D:\php20190701\php_code\0810\filetype.php:5:string '2019-08-10 10:52:53' (length=19)
D:\php20190701\php_code\0810\filetype.php:6:string '2019-08-10 11:15:33' (length=19)
D:\php20190701\php_code\0810\filetype.php:7:string '2019-08-10 10:52:53' (length=19)
複製代碼

is_readable()

is_readable($filename);檢測文件是否可讀;返回布爾值;

  • 若是由 filename 指定的文件或目錄存在而且可讀則返回 TRUE,不然返回 FALSE
  • 參數:filename 文件的路徑

is_writable()/is_writeable()

is_writable($filename)/is_writeable($filename);檢測文件是否可寫;返回布爾值;

  • 若是文件 filename 存在而且可寫則返回 TRUE
  • filename 參數能夠是一個容許進行是否可寫檢查的目錄名
  • is_writeable() 是 is_writable() 的別名
  • 參數:filename 要檢查的文件名稱
<?php

$file_path = 'sort.php';

var_dump(is_readable($file_path));
var_dump(is_writable($file_path));
var_dump(is_writeable($file_path));
複製代碼
D:\php20190701\php_code\0810\filetype.php:5:boolean true
D:\php20190701\php_code\0810\filetype.php:6:boolean true
D:\php20190701\php_code\0810\filetype.php:7:boolean true
複製代碼

is_executable()

is_executable($filename);檢測文件是否可執行;返回布爾值;

  • 判斷給定文件名是否可執行
  • 若是文件存在且可執行則返回 TRUE,錯誤時返回FALSE
  • FALSE表示文件不可執行;
  • 參數:filename 文件的路徑
<?php

$file_path = "C:\Users\Administrator\AppData\Local\Programs\Microsoft VS Code\Code.exe";

var_dump(is_executable($file_path)); // true
複製代碼

is_file()

is_file($filename);檢測是否爲文件;返回布爾值;

  • 判斷給定文件名是否爲一個正常的文件
  • 若是文件存在且爲正常的文件則返回 TRUE,不然返回 FALSE
  • 注意: 由於 PHP 的整數類型是有符號整型並且不少平臺使用 32 位整型,對 2GB 以上的文件,一些文件系統函數可能返回沒法預期的結果
  • 參數:filename 文件的路徑
<?php

$file_path = 'sort.php';
$dir_path = '../0809';

var_dump(is_file($file_path)); // true
var_dump(is_file($dir_path)); // false
var_dump(is_dir($dir_path)); // true
複製代碼

pathinfo()

pathinfo($filename);獲取文件路徑相關信息;返回一個關聯數組;

  • 參數爲文件路徑
  • 返回一個關聯數組包含有 path 的信息
  • 返回關聯數組仍是字符串取決於 options
  • 若是沒有傳入 options ,將會返回包括如下單元的數組 array:dirname,basename 和 extension(若是有),以 及filename
  • options例子:
    • echo pathinfo($filename,PATHINFO_EXTENSION);-------獲取文件擴展名
  • options 若是指定了,將會返回指定元素;它們包括:
    • PATHINFO_DIRNAME
    • PATHINFO_BASENAME
    • PATHINFO_EXTENSION
    • PATHINFO_FILENAME
  • 若是沒有指定 options 默認是返回所有的單元
  • __FILE__表示文件的完整路徑和文件名
<?php

$file_path = 'sort.php';

var_dump(pathinfo($file_path)); // true
複製代碼
D:\php20190701\php_code\0810\filetype.php:5:
array (size=4)
  'dirname' => string '.' (length=1)
  'basename' => string 'sort.php' (length=8)
  'extension' => string 'php' (length=3)
  'filename' => string 'sort' (length=4)
複製代碼

dirname()

dirname($path);返回文件中的路徑部分;

  • 給出一個包含有指向一個文件的全路徑的字符串,本函數返回去掉文件名後的目錄名
  • 返回值:返回 path 的父目錄
  • 參數:path 一個路徑
  • 在 Windows 中,斜線(/)和反斜線(\)均可以用做目錄分隔符
  • 在其它環境下是斜線(/)
<?php

$file_path = 'C:\Users\Administrator\Downloads\Firefox Setup 69.0b11.exe';
$file_path2 = 'C:/Users/Administrator/Downloads/Firefox Setup 69.0b11.exe';

var_dump(dirname($file_path)); 
var_dump(dirname($file_path2));
複製代碼
D:\php20190701\php_code\0810\filetype.php:6:string 'C:\Users\Administrator\Downloads' (length=32)
D:\php20190701\php_code\0810\filetype.php:7:string 'C:/Users/Administrator/Downloads' (length=32)
複製代碼

basename()

basename($filename,$suffix);返回路徑中文件名部分;

  • 給出一個包含有指向一個文件的全路徑的字符串,本函數返回基本的文件名
  • 參數:path 一個路徑
  • 在 Windows 中,斜線(/)和反斜線(\)均可以用做目錄分隔符
  • 在其它環境下是斜線(/)
  • 第二個參數可選。規定文件擴展名。若是文件有 suffix,則不會輸出這個擴展名。
<?php

$file_path = 'C:\Users\Administrator\Downloads\Firefox Setup 69.0b11.exe';

var_dump(basename($file_path));
複製代碼
D:\php20190701\php_code\0810\filetype.php:6:string 'Firefox Setup 69.0b11.exe' (length=25)
複製代碼
<?php

$file_path = 'C:\Users\Administrator\Downloads\Firefox Setup 69.0b11.exe';

var_dump(basename($file_path,".exe")); // 'Firefox Setup 69.0b11'

複製代碼

file_exists()

file_exists($filename);檢測文件或者目錄是否存在;返回布爾值;

  • 返回值:若是由 filename 指定的文件或目錄存在則返回 TRUE,不然返回 FALSE
  • 參數:filename 文件或目錄的路徑
<?php

$file_path = "sort.php";
$dir_path = "../0809";
$dir_path2 = "../080911";

var_dump(file_exists($file_path)); // true
var_dump(file_exists($dir_path)); // true
var_dump(file_exists($dir_path2)); // false
複製代碼

文件操做相關

touch()

touch($filename,$time,$atime); 設定文件的訪問和修改時間,若是文件不存在,則會建立文件;返回布爾值

  • 參數:filename要設定的文件名
  • 若是文件不存在,則會被建立
  • 返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE
  • time要設定的時間, 若是沒有提供參數 time 則會使用當前系統的時間
  • atime若是給出了這個參數,則給定文件的訪問時間會被設爲 atime,不然會設置 爲time
  • 若是沒有給出這兩個參數,則使用當前系統時間
  • 第二個參數: 設置修改時間
  • 第三個參數: 設置訪問時間

unlink()

unlink($filename,$context);刪除文件;返回布爾值;

  • 刪除 filename
  • 參數:filename文件的路徑
  • 發生錯誤時會產生一個 E_WARNING 級別的錯誤
  • 返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE
<?php

$file_path = "sort.php";


var_dump(unlink($file_path)); // true
複製代碼

rename()

rename($oldname,$newname,$path);重命名或者剪切一個文件或目錄;返回布爾值;

  • 嘗試把 oldname 重命名爲 newname
  • 返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE
  • path 剪切一個文件或者目錄的路徑
  • 同一個路徑, 通常是重命名
<?php

$old_name = "sort.php";
$new_name = "sort2.php";

var_dump(rename($old_name,$new_name)); // true, 會把sort.php刪掉, 新增一個sort2.php
複製代碼
  • 若是路徑不同, 能夠實現剪切的效果
<?php

$old_name = "sort2.php";
$new_name = "../sort2.php";

var_dump(rename($old_name,$new_name)); // true, 實現剪切的效果
複製代碼

copy()

copy($filename,$path);拷貝一個文件;返回布爾值;

  • $filename, 文件名
  • $path, 拷貝到的路徑
  • 返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE
  • 注意: 拷貝遠程文件須要開啓PHP配置選項中的allow_url_fopen=On
  • 遠程copy, 至關於下載
<?php

$old_name = "sort.php";
$new_name = "sort2.php";

var_dump(copy($old_name,$new_name)); // true
複製代碼
<?php

$old_name = "http://pic68.nipic.com/file/20150601/2692994_151045402000_2.jpg";
$new_name = "1.jpg";

var_dump(copy($old_name,$new_name)); // 下載
複製代碼

文件內容操做相關

fopen()

fopen(filename,mode)php

  • fopen() 函數打開一個文件或 URL。
  • 若是 fopen() 失敗,它將返回 FALSE 並附帶錯誤信息。
  • 能夠經過在函數名前面添加一個 '@' 來隱藏錯誤輸出。
  • 返回一個文件句柄(handle), 是一個資源類型, 須要配合其餘函數使用
  • 第二個參數: 如何打開, 打開方式
    • "r" (只讀方式打開,將文件指針指向文件頭)
    • "r+" (讀寫方式打開,將文件指針指向文件頭)
    • "w" (寫入方式打開,清除文件內容,若是文件不存在則嘗試建立之)
    • "w+" (讀寫方式打開,清除文件內容,若是文件不存在則嘗試建立之)
    • "a" (寫入方式打開,將文件指針指向文件末尾進行寫入,若是文件不存在則嘗試建立之)
    • "a+" (讀寫方式打開,經過將文件指針指向文件末尾進行寫入來保存文件內容)
    • 若是找不到文件, r是會報錯的, 可是a和w會建立一個新的文件
<?php

$file_path = "test.txt";


var_dump(fopen($file_path, 'r')); // resource
複製代碼

fread()

string fread ( resource handle , intlength )html

  • fread() 函數讀取打開的文件。數組

  • 函數會在到達指定長度或讀到文件末尾(EOF)時(以先到者爲準),中止運行。bash

  • 該函數返回讀取的字符串,若是失敗則返回 FALSE。函數

<?php

$file_path = "test.txt";


$file = fopen($file_path, 'r');

var_dump(fread($file,99)); // hello world !
複製代碼
<?php

$file_path = "test.txt";


$file = fopen($file_path, 'r');

var_dump(filesize($file_path));

var_dump(fread($file,filesize($file_path))); // hello world !
複製代碼

fwrite()|fput()

fwrite(file,string[,length])url

  • fwrite() 函數將內容寫入一個打開的文件中。
  • 函數會在到達指定長度或讀到文件末尾(EOF)時(以先到者爲準),中止運行。
  • 第二個參數, 可選, 最多能夠寫入多少個字符
  • 若是函數成功執行,則返回寫入的字節數。若是失敗,則返回 FALSE。
<?php
$file = fopen("test.txt","w");
echo fwrite($file,"Hello World. Testing!");
fclose($file);
複製代碼

fclose()

fclose($file)spa

  • fclose() 函數關閉打開的文件。debug

  • 該函數若是成功則返回 TRUE,若是失敗則返回 FALSE。指針

<?php
$file = fopen("test.txt","r");
//some code to be executed
fclose($file);
複製代碼

fgetc()

fgetc(file)code

  • 一次讀取一個字符
<?php


$file = fopen("test.txt","r");

for ($i=0; $i < filesize('test.txt'); $i++) { 
	echo fgetc($file);
}


while (!feof($file)) {
	echo fgetc($file);
}
複製代碼

fgets()

fgets(file[,length])
複製代碼
  • 一次讀取一行字符, 包括結尾的換行符
<?php

$file = fopen("test.txt","r");

while (!feof($file)) {
	echo fgets($file);
}
複製代碼

fgetss()

fgetss(file[,length[,tags]])
複製代碼
  • 一次讀取一行, 過濾html標籤

fgetcsv()

fgetcsv(file[,length[,separator[,enclosure]]])
複製代碼
  • 一次獲取csv文件的一行, 把這一行內容轉換成索引數組
<?php


$file = fopen("index.csv","r");

while ($arr = fgetcsv($file)) {
	var_dump($arr);
}

fclose($file);

複製代碼

fputcsv()

fputcsv(file,fields[,seperator[,enclosure]])
複製代碼
  • 數組轉csv
<?php


$file = fopen("index.csv","r+");

$arr = [
	'hello',
	'world',
	'!!!!'
];


var_dump(fputcsv($file, $arr));
複製代碼

file_get_contents()

  • 根據路徑, 把文件的內容, 保存到一個字符串中
  • 必選參數爲文件路徑, 不用指定打開方式, 若是參數是一個網址, 返回網址對應的html源代碼
  • 須要開啓php.ini裏面的openssl, extension=php_openssl.dll
<?php


$str = file_get_contents("index.csv");

var_dump($str);
複製代碼

file_put_contents()

  • 把字符串保存到文件
  • 把百度的源代碼保存到本地
<?php

file_put_contents('baidu.html', file_get_contents('https://www.baidu.com'));
複製代碼

file()

  • 函數把整個文件讀入一個數組中。
  • 根據換行, 一行是一個元素, 會保留後面的換行符

readfile()

  • 讀取文件內容, 保存到變量裏
  • 第一個參數: 文件路徑
<?php

$str = readfile('test.txt');
var_dump($str);
複製代碼

parse_ini_file()

  • 數解析一個配置文件,並以數組的形式返回其中的設置, 參數是一個路徑
<?php

var_dump(parse_ini_file("C:\phpStudy\PHPTutorial\php\php-7.2.1-nts\php.ini"));
複製代碼

parse_ini_string()

  • 把配置文件的字符串, 轉換成關聯數組, 參數是字符串
<?php

$ini_string = ' xdebug.profiler_output_dir="C:\phpStudy\PHPTutorial\tmp\xdebug" xdebug.trace_output_dir="C:\phpStudy\PHPTutorial\tmp\xdebug" zend_extension="C:\phpStudy\PHPTutorial\php\php-7.2.1-nts\ext\php_xdebug-2.8.0beta1-7.2-vc15-nts.dll" xdebug.remote_enable = 1 xdebug.remote_autostart = 1 ';


var_dump(parse_ini_string($ini_string));
複製代碼

highlight_string()

  • 把字符串中的php代碼高亮, 參數是字符串

highlight_file()

  • 把文件中的php代碼高亮, 參數是文件路徑
<?php

var_dump(highlight_file('test.php'));
複製代碼
相關文章
相關標籤/搜索