# 第六章 目錄與文件
一.目錄操作
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
```
2020
```
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
```
- 介紹
- HTML/CSS 教程
- 第 1 章 HTML5 概述
- 第 2 章 基本格式
- 第 3 章 文本元素
- 第 4 章 超鏈接和路徑
- 第 5 章 分組元素
- 第 6 章 表格元素
- 第 7 章 文檔元素
- 第 8 章 嵌入元素
- 第 9 章 音頻和視頻
- 第 10 章 表單元素[上]
- 第 10 章 表單元素[中]
- 第 10 章 表單元素[下]
- 第 11 章 全局屬性和其他
- 第 12 章 CSS 入門
- 第 13 章 CSS 選擇器[上]
- 第 14 章 CSS 顏色與度量單位
- 第 15 章 CSS 文本樣式[上]
- 第 15 章 CSS 文本樣式[下]
- 第 16 章 CSS 盒模型[上]
- 第 16 章 CSS 盒模型[下]
- 第 17 章 CSS 邊框與背景[上]
- 第 17 章 CSS 邊框與背景[下]
- 第 18 章 CSS 表格與列表
- 第 19 章 CSS 其他樣式
- 第 20 章 CSS3 前綴和 rem
- 第 21 章 CSS3 文本效果
- 第 21 章 CSS3 文本效果
- 第 23 章 CSS3 邊框圖片效果
- 第 24 章 CSS3 變形效果[下]
- 第 25 章 CSS3 過渡效果
- 第 26 章 CSS3 動畫效果
- 第 27 章 CSS 傳統布局[上]
- 第 27 章 CSS 傳統布局[下]
- 第 28 章 CSS3 多列布局
- 第 29 章 CSS3 彈性伸縮布局[上]
- 第 29 章 CSS3 彈性伸縮布局[中]
- 第 29 章 CSS3 彈性伸縮布局[下]
- 第 30 章 使用 Emmet 插件
- Bootstrap 教程
- 第 1 章 Bootstrap 介紹
- 第 2 章 排版樣式
- 第 3 章 表格和按鈕
- 第 4 章 表單和圖片
- 第 5 章 柵格系統
- 第 6 章 輔組類和響應式工具
- 第 7 章 圖標菜單按鈕組件
- 第 8 章 輸入框和導航組件
- 第 9 章 路徑分頁標簽和徽章組件
- 第 10 章 巨幕頁頭縮略圖和警告框組件
- 第 11 章 進度條媒體對象和 Well 組件
- 第 12 章 列表組面板和嵌入組件
- 第 13 章 模態框插件
- 第 14 章 下拉菜單和滾動監聽插件
- 第 15 章 標簽頁和工具提示插件
- 第 16 章 彈出框和警告框插件
- 第 17 章 按鈕和折疊插件
- 第 18 章 輪播插件
- 第 19 章 附加導航插件
- 第 20 章 項目實戰--響應式導航[1]
- 第 20 章 項目實戰--響應式輪播圖[2]
- 第 20 章 項目實戰--首頁內容介紹[上][3]
- 第 20 章 項目實戰--首頁內容介紹[下][4]
- 第 20 章 項目實戰--資訊內容[5,6]
- 第 20 章 項目實戰--案例和關于[7]
- javaScript 教程
- javascript快速入門1--JavaScript前世今生,HelloWorld與開發環境
- javascript快速入門2--變量,小學生數學與簡單的交互
- javascript快速入門3--分支判斷與循環
- javascript快速入門4--函數與內置對象
- javascript快速入門5--數組與對象
- javascript快速入門6--Script標簽與訪問HTML頁面
- javascript快速入門7--ECMAScript語法基礎
- javascript快速入門8--值,類型與類型轉換
- javascript快速入門9--引用類型
- javascript快速入門10--運算符,語句
- javascript快速入門11--正則表達式
- javascript快速入門12--函數式與面向對象
- javascript快速入門13--BOM——瀏覽器對象模型(Browser Object Model)
- javascript快速入門14--DOM基礎
- javascript快速入門15--節點
- javascript快速入門15--表單
- javascript快速入門16--表格
- javascript快速入門17--事件
- javascript快速入門18--樣式
- javascript快速入門19--定位
- javascript快速入門20--Cookie
- javascript快速入門21--DOM總結
- javascript快速入門22--Ajax簡介
- javascript快速入門23--XHR—XMLHttpRequest對象
- javascript快速入門24--XML基礎
- javascript快速入門25--瀏覽器中的XML
- javascript快速入門26--XPath
- javascript快速入門27--XSLT基礎
- PHP 教程
- 第一章 如何加載運行已發布的PHP項目
- 第二章 PHP基礎
- 第三章 操作符與控制結構
- 第四章 數學運算
- 第五章 數組
- 第六章 目錄與文件
- 第七章 自定義函數
- 第八章 字符串處理
- 第九章 正則表達式
- 第十章 日期與時間
- 第十一章 表單與驗證
- 第十二章 會話控制
- 第十三章 上傳文件
- 第十四章 處理圖像
- 第十五章 MySQL 數據庫
- 第十六章 PHP 操作MySQL
- 第十七章 面向對象基礎
- 第十八章 面向對象的特性
- 第十九章 面向對象的工具