目錄與檔案的基本操作一 (44)

WBOY
發布: 2016-08-08 09:23:05
原創
946 人瀏覽過

解析目錄路徑

使用PHP腳本可以方便對目錄進行操作,例如建立目錄、遍歷目錄、複值目錄與刪除目錄等操作。
??常用的檔案目錄路徑格式:
??$unixPath="/var/www/html/index.php";
//在UNIX系統中的絕對路徑,必須使用"/"分隔
??$ winPath="C:\Appserv\www\index.php";
//在Windows系統的絕對路徑,預設使用""分隔
??$winPath2="C:/Appserv/www/index.php";
//在Windows系統中也可使用「/」分隔。
??注意使用絕對路徑與相對路徑。

PHP檔案路徑相關函數

??basename--返迴路徑中的檔案名稱部分

??語法:string basename( string path [, string suffix] )
??給出一個包含有指向一個檔案的全路徑的字串,本函數傳回基本的檔名。如果檔名是以suffix結束的,那麼這部分也會被去掉。
??dirname--返迴路徑中的目錄部分
??語法:string dirname( string path )
??給出一個包含有指向一個檔案的全路徑的字串,本函數傳回去掉檔名後的目錄名。
$path= "/home/httpd/html/index.php";
$file= basename($path);// $file值:"index.php"
$file= basename($path , ".php"); // $file值:"index "
$file= dirname($path); // $file值:"/home/httpd/html"
?>

pathinfo--回傳文件路徑的資訊
??語法:array pathinfo( string path [, intoptions] )
??pathinfo() 傳回一個聯合陣列包含有path的資訊。包括以下的陣列單元:dirname,basename和extension。
$path_parts= pathinfo("/www/htdocs/index.html");
echo $path_parts["dirname"] . "n"; // /www/htdocs
echo ] . "n"; // index.html
echo $path_parts["extension"] . "n"; // html
?>
??realpath--傳回規範化的絕對路徑名稱
??語法:string realpathpath ( string path )
??realpath() 擴展所有的符號連接並且處理輸入的path中的'/./', '/../' 以及多餘的'/' 並傳回規範化後的絕對路徑名。在返回的路徑中沒有符號連接,'/./' 或'/../' 成分。

遍歷目錄

opendir--開啟目錄句柄
??語法:resource opendir( string path [, resource context] )
??開啟目錄句柄,可用於之後的closedir(),readdir(??開啟目錄句柄,可用於之後的closedir(),readdir(??開啟一個目錄句柄,可用於之後的closedir(),readdir(??開啟目錄句柄,可用於之後的closedir(),readdir(??開啟目錄句柄,可用於之後的closedir(),readdir(??開啟目錄句柄,可用於之後的closedir(),readdir(??開啟目錄句柄,可用於之後的closedir(),readdir(??開啟目錄句柄,可用於之後的closedir(),readdir()和rewinddir() )調用中。
??readdir--從目錄句柄中讀取條目
??語法:string readdir( resource dir_handle)
??傳回目前目錄指標位置的檔案名,沒有回傳false,並將指標向下移動一位。檔案名稱以在檔案系統中的排序傳回。
??closedir--關閉目錄句柄
??語法:void closedir( resource dir_handle)
??關閉dir_handle指定的目錄流。流必須之前被opendir()所打開。
??rewinddir--倒回目錄句柄
??語法:void rewinddir( resource dir_handle)
??將dir_handle指定的目錄流重置到目錄的開頭。

統計目錄大小

??disk_free_space--返回目錄中的可用空間
??語法:float disk_free_space( string directory )
??給出一個包含有一個目錄的字串,本函數將根據對應的文件系統或磁碟分割區傳回可用的位元組數。
??disk_total_space--傳回一個目錄的磁碟總大小
??語法:float disk_total_space( string directory )
??給出一個包含有一個目錄的字串,本函數將根據對應的檔案系統或磁碟分割區傳回所有的位元組數。

範例

<?php<span>//</span><span>自定义一个函数dirSize(),统计传入参数的目录大小</span><span>function dirSize($directory) {
$dir_size</span>=<span>0</span>;<span>//</span><span>初值为0,用来累加各文件大小从而计算目录大小</span><span>if</span>($dir_handle=@opendir($directory)){ <span>//</span><span>打开目录并判断成功打开</span><span>while</span>($filename=readdir($dir_handle)) { <span>//</span><span>循环遍历目录</span><span>if</span>($filename!=<span>"</span><span>.</span><span>"</span> && $filename!=<span>"</span><span>..</span><span>"</span>) { <span>//</span><span>排除特殊的目录</span>$subFile=$directory.<span>"</span><span>/</span><span>"</span>.$filename; <span>//</span><span>将文件和目录相连</span><span>if</span>(is_dir($subFile)) <span>//</span><span>如果为目录</span>$dir_size+=dirSize($subFile); <span>//</span><span>求子目录的大小</span><span>if</span>(is_file($subFile)) <span>//</span><span>如果是文件</span>$dir_size+=filesize($subFile); <span>//</span><span>求出文件的大小并累加</span><span>}
}
closedir($dir_handle); </span><span>//</span><span>关闭文件资源</span><span>return</span> $dir_size; <span>//</span><span>返回计算后的目录大小</span><span>}
}
$dir_size</span>=dirSize(<span>"</span><span>phpMyAdmin</span><span>"</span>); <span>//</span><span>调函数计算目录大小,返回目录大小</span>echo round($dir_size/pow(<span>1024</span>,<span>1</span>),<span>2</span>).<span>"</span><span>KB</span><span>"</span>;<span>//</span><span>将目录字节换为&ldquo;KB&rdquo;单位</span>?>
登入後複製

建立與刪除目錄

mkdir--新目錄
??語法:boolmkdir(string pathname [,intmode])
??嘗試新建一個由pathname指定的目錄。
??rmdir--刪除目錄
??語法:boolrmdir( string dirname)
??嘗試刪除dirname所指定的目錄。該目錄必須是空的,而且要有對應的權限。如果成功則回傳TRUE,失敗則回傳FALSE。
??unlink--刪除檔案
??語法:boolunlink ( string filename )
??刪除filename。和Unix C 的unlink() 函數相似。如果成功則回傳TRUE,失敗則回傳FALSE

<?php<span>//</span><span>自定义函数递归的删除整个目录</span><span>function delDir($directory) {
</span><span>if</span>(file_exists($directory)) { <span>//</span><span>判断目录是否存在,如果存在则执行</span><span>if</span>($dir_handle=@opendir($directory)){ <span>//</span><span>打开返回目录资源,并判断</span><span>while</span>($filename=readdir($dir_handle)){ <span>//</span><span>遍历目录读出目录中信息</span><span>if</span>($filename!=<span>"</span><span>.</span><span>"</span> && $filename!=<span>"</span><span>..</span><span>"</span>) { <span>//</span><span>一定要排除两个特殊目录</span>$subFile=$directory.<span>"</span><span>/</span><span>"</span>.$filename;<span>//</span><span>将目录下文件和当前目录相连</span><span>if</span>(is_dir($subFile)) <span>//</span><span>如果是目录条件则成立</span>delDir($subFile); <span>//</span><span>递归调用自己删除子目录</span><span>if</span>(is_file($subFile)) <span>//</span><span>如果是文件条件则成立</span>unlink($subFile); <span>//</span><span>直接删除这个文件</span><span>}
}
closedir($dir_handle); </span><span>//</span><span>关闭目录资源</span>rmdir($directory); <span>//</span><span>删除空目录</span><span>}
}
}
delDir(</span><span>"</span><span>phpMyAdmin</span><span>"</span>); <span>//</span><span>调用函数,将程序所在目录中phpMyAdmin文件夹删除</span>?>
登入後複製

複製與移動目錄

copy--拷貝檔案
??語法:boolcopy ( string source, string dest)
??將檔案從source拷貝到將檔案從source。如果成功則回傳TRUE,失敗則回傳FALSE。
??PHP中沒有提供複製與行動目錄的相關函數。如需要,只要自訂函數了。

檔案的基本操作

檔案的開啟與關閉

fopen--打开文件或者URL
??语法:resource fopen( string filename, string mode [, booluse_include_path[, resource zcontext]] )
??fopen() 将filename指定的名字资源绑定到一个流上。如果filename是"scheme://..." 的格式,则被当成一个URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将filename当成一个普通的文件名继续执行下去。
??mode参数指定了所要求到该流的访问类型。
??如果也需要在include_path中搜寻文件的话,可以将可选的第三个参数use_include_path设为'1' 或TRUE。
??如果打开失败,本函数返回FALSE。
fclose--关闭一个已打开的文件指针

写入文件

fwrite--写入文件(可安全用于二进制文件)
??语法:intfwrite( resource handle, string string[, intlength] )
??fwrite() 把string的内容写入文件指针handle处。如果指定了length,当写入了length个字节或者写完了string以后,写入就会停止,视乎先碰到哪种情况。返回写入的字符数,出现错误时则返回FALSE

读取文件内容

??fread--读取文件(可安全用于二进制文件)
??string fread( inthandle, intlength )
??fread() 从文件指针handle读取最多length个字节。该函数在读取完length个字节数,或到达EOF 的时候,或(对于网络流)当一个包可用时就会停止读取文件,视乎先碰到哪种情况。

<?<span>php
$handle </span>= fopen(<span>"</span><span>http://www.example.com/</span><span>"</span>, <span>"</span><span>rb</span><span>"</span><span>);
$contents </span>= <span>""</span><span>;
</span><span>while</span> (!<span>feof($handle)) {
$contents .</span>= fread($handle, <span>8192</span><span>);
}
fclose($handle);
</span>?>
登入後複製

fgets--从文件指针中读取一行
??语法:string fgets( inthandle [,intlength])
??从handle指向的文件中读取一行并返回长度最多为length-1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了length -1 字节后停止(看先碰到那一种情况)。如果没有指定length,则默认为1K,或者说1024 字节。
??fgetc--从文件指针中读取字符
??语法:string fgetc( resource handle )
??返回一个包含有一个字符的字符串,该字符从handle指向的文件中得到。碰到EOF 则返回FALSE。

file--把整个文件读入一个数组中
??语法:array file ( string filename [, intuse_include_path[, resource context]] )
??和readfile()一样,只除了file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败file() 返回FALSE。
??readfile--输出一个文件
??语法:intreadfile( string filename [, booluse_include_path[, resource context]] )
??读入一个文件并写入到输出缓冲。
??返回从文件中读入的字节数。如果出错返回FALSE 并且除非是以@readfile() 形式调用,否则会显示错误信息。

以上就介绍了目录与文件的基本操作一 (44),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!