程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 第六章 php目錄與文件操作

第六章 php目錄與文件操作

編輯:關於PHP編程

一.目錄操作
basename -- 返回路徑中的文件名部分
dirname -- 返回路徑中的目錄部分
pathinfo -- 返回文件路徑的信息
realpath -- 返回規范化的絕對路徑名
復制代碼 代碼如下:
<?php
$path = 'demo1.php';
$path = realpath($path);
echo basename($path);
echo '<br>';
echo dirname($path);
echo '<br>';
$array_path = pathinfo($path);
echo 'basename : '.$array_path['basename'].'<br>';
echo 'dirname : '.$array_path['dirname'].'<br>';
echo 'extension : '.$array_path['extension'].'<br>';
echo 'filename : '.$array_path['filename'].'<br>';
?>

Output:
demo1.php
D:\AppServ\www\Basic6
basename : demo1.php
dirname : D:\AppServ\www\Basic6
extension : php
filename : demo1

二.磁盤、目錄和文件計數
1.查看文件大小和磁盤空間
filesize -- 取得文件大小
disk_free_space -- 返回目錄中的可用空間
disk_total_space -- 返回一個目錄的磁盤總大小
復制代碼 代碼如下:
<?php
$path ='demo2.php';
$path = realpath($path);
$drive = 'c:';
echo round(filesize($path)/1024,2).'kb'.'<br/>';
echo round(disk_free_space($drive)/1024/1024/1024,2).'GB'.'<br/>';
echo round(disk_total_space($drive)/1024/1024/1024,2).'GB'.'<br/>';
?>

output
0.26kb
10.61GB
30.01GB

2.獲得文件的各種時間
fileatime -- 取得文件的上次訪問時間
filectime -- 取得文件的 inode 修改時間
filemtime -- 取得文件修改時間
復制代碼 代碼如下:
<?php
$file = realpath ( '../Basic5/demo3.php' );
$date_format = 'Y-m-d h:i:s';
echo 'lastest accessing time : '.date ( $date_format, fileatime ( $file ) ) . '<br>';
echo 'lastest change time : '.date ( $date_format, filectime ( $file ) ) . '<br>';
echo 'lastest modify time : '.date ( $date_format, filemtime ( $file ) ) . '<br>';
?>

output
lastest accessing time : 2011-12-18 04:26:49
lastest change time : 2011-12-18 04:26:49
lastest modify time : 2011-12-18 04:29:15

三.文件處理
文件讀寫的兩種方式:
1.php所有版本都支持的方法:
fopen -- 打開文件或者 URL
fclose -- 關閉一個已打開的文件指針
fwrite -- 寫入文件(可安全用於二進制文件)
表 1. fopen() 中 mode 的可能值列表

mode

說明

'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
$fp = fopen('file1.txt','w');
$outStr = "my name is anllin,\r\nmy age is 29.";
fwrite($fp,$outStr,strlen($outStr));
fclose($fp);
?>

output
my name is anllin,
my age is 29.
2.php5新加入的方法
file_put_contents -- 將一個字符串寫入文件
復制代碼 代碼如下:
<?php
file_put_contents('file2.txt',"my name is anllin,\r\nmy age is 29.");
?>

output
my name is anllin,
my age is 29.
讀出文件內容的方法:

函數

功能

Fgetc()

讀出一個字符,並將指針移到下一個字符

Fgets()

讀出一行字符,可以指定一行顯示的長度。

Fgetss()

從文件指針中讀取一行並過濾掉HTML標記

Fread()

讀取定量的字符

Fpassthru()

輸出文件到指定處的所有剩余數據

File()

將整個文件讀入數組中,以行分組

Readfile()

讀入一個文件並寫入到輸出緩沖

File_get_contents()

將整個文件讀入一個字符串

Feof()

判斷讀完文件函數

File_exists()

查看文件是否存在

示例文件file1.txt的內容如下:
my name is anllin,
my age is 29.
fgetc -- 從文件指針中讀取字符
Demo.php
復制代碼 代碼如下:
<?php
$fp = fopen('file1.txt','r');
echo fgetc($fp);
echo fgetc($fp);
fclose($fp);
?>

Output:
my
fgets -- 從文件指針中讀取一行
復制代碼 代碼如下:
<?php
$fp = fopen('file1.txt','r');
echo fgets($fp);
echo fgets($fp);
fclose($fp);
?>

output
my name is anllin, my age is 29.
fgetss -- 從文件指針中讀取一行並過濾掉 HTML 標記
復制代碼 代碼如下:
<?php
$fp = fopen('file3.txt','w');
$outStr = "my name is <b>anllin</b>";
fwrite($fp,$outStr,strlen($outStr));
fclose($fp);
$ftp = fopen('file3.txt','r');
echo fgetss($ftp);
fclose($ftp);
?>

Output
my name is anllin
fread -- 讀取文件(可安全用於二進制文件)
復制代碼 代碼如下:
<?php
$filename = 'file1.txt';
$fp = fopen($filename,'r');
$contents = fread($fp,filesize($filename));
echo $contents;
fclose($fp);
?>

Output
my name is anllin, my age is 29.
fpassthru -- 輸出文件指針處的所有剩余數據
復制代碼 代碼如下:
<?php
$filename = 'file1.txt';
$fp = fopen($filename,'rb');
$leftSize = fpassthru($fp);
echo $leftSize;
fclose($fp);
?>

output
my name is anllin, my age is 29. 33
file -- 把整個文件讀入一個數組中
復制代碼 代碼如下:
<?php
$lines = file('file1.txt');
foreach ($lines as $line_num => $line)
{
echo $line_num.' : '.$line.'<br>';
}
?>

output
0 : my name is anllin,
1 : my age is 29.
readfile -- 輸出一個文件
復制代碼 代碼如下:
<?php
$size = readfile('file1.txt');
echo $size;
?>

output
my name is anllin, my age is 29.33
file_get_contents -- 將整個文件讀入一個字符串(php5.0新增)
復制代碼 代碼如下:
<?php
$contents = file_get_contents('file1.txt');
echo $contents;
?>

output
my name is anllin, my age is 29.
feof -- 測試文件指針是否到了文件結束的位置
復制代碼 代碼如下:
<?php
$fp = fopen('file1.txt','r');
while(!feof($fp))
{
echo fgetc($fp);
}
fclose($fp);
?>

output
my name is anllin, my age is 29.
file_exists -- 檢查文件或目錄是否存在
復制代碼 代碼如下:
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<?php
$filename = 'file1.txt';
if(file_exists($filename))
{
echo '執行文件讀寫操作';
}
else
{
echo '你要找的文件不存在';
}
?>

output
執行文件讀寫操作
filesize -- 取得文件大小
復制代碼 代碼如下:
<?php
$file_size = filesize('file1.txt');
echo $file_size;
?>

output
33
unlink -- 刪除文件
復制代碼 代碼如下:
<?php
$isDeleted = unlink('file3.txt');
echo $isDeleted;
?>

output
1
rewind -- 倒回文件指針的位置
ftell -- 返回文件指針讀/寫的位置
fseek -- 在文件指針中定位
復制代碼 代碼如下:
<?php
$fp = fopen ( 'file1.txt', 'r' );
fgetc ( $fp );
fgetc ( $fp );
echo ftell ( $fp ) . '<br>';
rewind ( $fp );
echo ftell ( $fp ) . '<br>';
fgetc ( $fp );
fgetc ( $fp );
echo ftell ( $fp ) . '<br>';
fseek($fp,0);//same as rewind ($fp)
echo ftell ( $fp ) . '<br>';
?>

output
2
0
2
0
Flock的操作值

操作值

意義

LOCK_SH(以前為1)

讀寫鎖定。這意味著文件可以共享,其他人可以讀該文件

LOCK_EX(以前為2)

寫操作鎖定。這是互斥的,該文件不能被共享

LOCK_UN(以前為3)

釋放已有的鎖定

LOCK_NB(以前為4)

防止在請求加鎖時發生阻塞

flock -- 輕便的咨詢文件鎖定
復制代碼 代碼如下:
<?php
$filename = 'file1.txt';
$fp = fopen($filename,'rb');
flock($fp,LOCK_EX);//locked
$contents = fread($fp,filesize($filename));
flock($fp,LOCK_UN);//unlocked
echo $contents;
fclose($fp);
?>

output
my name is anllin, my age is 29.
目錄句柄操作
opendir -- 打開目錄句柄
readdir -- 從目錄句柄中讀取條目
closedir -- 關閉目錄句柄
復制代碼 代碼如下:
<?php
$dir= opendir('../Basic6');
while(!!$file = readdir($dir))
{
echo $file.'<br/>';
}
closedir($dir);
?>

output
.
..
.buildpath
.project
.settings
demo1.php
demo10.php
demo11.php
demo12.php
demo13.php
demo14.php
demo15.php
demo16.php
demo17.php
demo18.php
demo19.php
demo2.php
demo20.php
demo3.php
demo4.php
demo5.php
demo6.php
demo7.php
demo8.php
demo9.php
file1.txt
file2.txt
scandir -- 列出指定路徑中的文件和目錄
復制代碼 代碼如下:
<?php
$files = scandir('../Basic6');
foreach($files as $file)
{
echo $file.'<br>';
}
?>

output
.
..
.buildpath
.project
.settings
demo1.php
demo10.php
demo11.php
demo12.php
demo13.php
demo14.php
demo15.php
demo16.php
demo17.php
demo18.php
demo19.php
demo2.php
demo20.php
demo21.php
demo3.php
demo4.php
demo5.php
demo6.php
demo7.php
demo8.php
demo9.php
file1.txt
file2.txt
rename -- 重命名一個文件或目錄
復制代碼 代碼如下:
<?php
rename('demo1.php','demo01.php');
if(file_exists('demo01.php'))
{
echo 'file rename success';
}
else
{
echo 'file rename fail';
}
?>

output
file rename success
rmdir -- 刪除目錄
復制代碼 代碼如下:
<?php
rmdir('123');
if(file_exists('123'))
{
echo 'delete file fail';
}
{
echo 'delete file success';
}
?>

output
delete file success

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved