日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

詳談PHP文件目錄基礎(chǔ)操作(2)_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:PHP獲取數(shù)組中重復最多的元素的實現(xiàn)方法
本文實例講述了PHP獲取數(shù)組中重復最多的元素的實現(xiàn)方法。分享給大家供大家參考。具體方法如下: 代碼如下:?php /** * * Created on 2014-4-1 * @param array $array * @param int [optional] $length * @return array */ function mostRepeatedValues($array,$length=0

 

代碼如下:
<?php
// 目錄的讀取
$dir = 'F:/';
echo 'details in '.$dir.'<br>';
if(is_dir($dir)){
if(($handle = opendir($dir)) == false){ // 獲取目錄句柄
echo 'open dir failed';
return;
}
while(($name = readdir($handle)) != false){ // 循環(huán)讀取該目錄下內(nèi)容
$filepath = $dir.'/'.$name;
echo 'name: '.$name.' type: '.filetype($filepath).'<br>';
}
closedir($handle); // 關(guān)閉目錄句柄
}
else{
echo $dir.' is not a directory<r>';
}

 

效果如下:

詳談PHP文件目錄基礎(chǔ)操作 模板無憂

可以看到實際上,系統(tǒng)給目錄中內(nèi)容進行了忽略大小寫的字典排序。

目錄的大小計算,我們知道文件的大小可以由filesize取得,但是php中沒有專門計算目錄大小的函數(shù)。當然php中有計算硬盤大小的函數(shù)disk_total_space(計算硬盤總空間)、disk_free_space(計算硬盤可用空間),但是我試了下disk_free_space,貌似計算得不對。正因為有filesize計算文件的大小,因此,需要用到遞歸,當是目錄時,進去繼續(xù)計算子目錄的大小,如果是文件,獲取到文件大小并加上返回,代碼如下:

 

代碼如下:
<?php
// 目錄大小計算
function getDirSize($dirpath){
$size = 0;
if(false != ($handle = opendir($dirpath))){
while(false != ($file = readdir($handle))){
if($file == '.' || $file == '..') //注意過濾目錄中自帶的點和點點
continue;
$filepath = $dirpath.'/'.$file; // 前面要接上路徑
if(is_file($filepath)){ // 是文件計算大小
$size += filesize($filepath);
}
else if(is_dir($filepath)){ // 是目錄繼續(xù)計算該目錄下的文件
$size += getDirSize($filepath);
}
else{
$size += 0;
}
}
closedir($handle);
}
return $size;
}
$dirsize = 'F:/size';
$size = getDirSize($dirsize);
echo 'dir size: '.getSize(null, $size).'<br><br>'; // 調(diào)用前面的數(shù)據(jù)處理函數(shù)

 

我在F盤建了個size文件,隨便弄了點子目錄和文檔,效果如下,左邊是程序求得,右邊是右鍵查看文件夾屬性得到的,用以對比。

詳談PHP文件目錄基礎(chǔ)操作 詳談PHP文件目錄基礎(chǔ)操作

目錄的新建和刪除,主要用到,mkdir:新建一個目錄,rmdir:刪除一個非空目錄,注意只能是非空,代碼如下:

 

代碼如下:
<?php
// 目錄的新建和刪除
$newDirPath = 'F:/newDir';
if(true == @mkdir($newDirPath, 0777, true)){ // 加@是因為文件已存在時php本身可能會拋出一個warning
echo 'create directory '.$newDirPath.' successfully<br>';
}
else{
if(file_exists($newDirPath))
echo 'directory '.$newDirPath.' has existed<br>';
else
echo 'create directory '.$newDirPath.' failed<br>';
}
if(true == @rmdir('F:/aaa')) //只能刪除非空目錄,如果刪除不存在的目錄自動拋出warning
echo 'remove successfully<br>';

 

那么問題來了,如果要刪除一個非空目錄咋辦,又得自己寫了,思想仍然是遞歸,因為php只提供了刪除文件函數(shù)unlink,所以在刪除一個目錄時,先opendir,再進入,如果是文件直接刪除,如果是目錄,繼續(xù)進入使用該方法處理,當然還可已返回一個bool變量表示刪除是否成功,代碼如下:

 

代碼如下:
<?php
// 刪除文件 unlink
// 刪除目錄中的內(nèi)容,然后刪除該目錄
function clearDir($dirpath){
if(file_exists($dirpath)){
if(false != ($handle = opendir($dirpath))){
while(false != ($name = readdir($handle))){
if($name == '.' || $name == '..')
continue;
$filename = $dirpath.'/'.$name;
if(is_dir($filename))
clearDir($filename);
if(is_file($filename))
@unlink($filename);
}
closedir($handle);
rmdir($dirpath);
}
else{
return false;
}
}
else{
return false;
}
return true;
}

 

在這里不得不說遇到的一個大坑,就是 . 和 .. 這兩個鬼玩意兒(點和點點),在操作系統(tǒng)中的每一個文件夾下邊,都會有 . 和 .. ,它們表示當前目錄和當前目錄的上級目錄,可惡的是前面在讀取目錄時居然沒顯示,導致遞歸函數(shù)成了死循環(huán),因為 . 和 .. 在每一個目錄的最前面,必然會先讀到它倆,若不過濾,首先讀到 . ,它表示本目錄,然后又遞歸進入本目錄...這倆是操作系統(tǒng)下面的默認有的,它們是本目錄與上級目錄的連接符。

通過計算目錄的大小和刪除非空目錄的代碼,寫復制和剪切目錄就非常容易,非常相似的遞歸思想,需要用到復制文件函數(shù)copy,文件移動函數(shù)rename,這個挺有趣,rename,字面上是重命名,但是重命名到另一個目錄中不就是剪切了么-_-

3.文件讀寫

php的某些文件讀取操作跟C語言非常像,所以也比較簡單,步驟就是先打開文件獲取句柄,檢查錯誤,然后讀寫處理,然后關(guān)閉,養(yǎng)成打開處理完后就關(guān)閉的好習慣,記得在C語言中的文件不關(guān)閉的話,打開兩次是會報錯滴,不知道記錯沒,所以嚴格點的程序都有非常多的處理,比如先驗證文件存在,然后驗證可讀可寫性,然后先關(guān)閉一下,然后再打開,打開時還得再檢查打開錯了沒......在打開文件時,就要選擇打開文件的模式,它決定了我們讀還是寫文件,當然是對需要這樣操作的函數(shù)有用。

分享:php的curl封裝類用法實例
使用函數(shù)之前我們要需要把php curl模塊打開(libeay32.dll, ssleay32.dll, php5ts.dll, php_curl.dll) 開啟php curl函數(shù)庫的步驟 1).去掉windows/php.ini 文件里;extension=php_curl.dll前面的; /*用 echo phpinfo();查看php.ini的路徑*/ 2).把php5/libeay32.dll,sslea

來源:模板無憂//所屬分類:PHP教程/更新時間:2014-11-13
相關(guān)PHP教程