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

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

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

推薦:PHP獲取數(shù)組中重復(fù)最多的元素的實(shí)現(xiàn)方法
本文實(shí)例講述了PHP獲取數(shù)組中重復(fù)最多的元素的實(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ǔ)操作 模板無憂

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

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

 

代碼如下:
<?php
// 目錄大小計(jì)算
function getDirSize($dirpath){
$size = 0;
if(false != ($handle = opendir($dirpath))){
while(false != ($file = readdir($handle))){
if($file == '.' || $file == '..') //注意過濾目錄中自帶的點(diǎn)和點(diǎn)點(diǎn)
continue;
$filepath = $dirpath.'/'.$file; // 前面要接上路徑
if(is_file($filepath)){ // 是文件計(jì)算大小
$size += filesize($filepath);
}
else if(is_dir($filepath)){ // 是目錄繼續(xù)計(jì)算該目錄下的文件
$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盤建了個(gè)size文件,隨便弄了點(diǎn)子目錄和文檔,效果如下,左邊是程序求得,右邊是右鍵查看文件夾屬性得到的,用以對比。

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

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

 

代碼如下:
<?php
// 目錄的新建和刪除
$newDirPath = 'F:/newDir';
if(true == @mkdir($newDirPath, 0777, true)){ // 加@是因?yàn)槲募汛嬖跁r(shí)php本身可能會拋出一個(gè)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>';

 

那么問題來了,如果要刪除一個(gè)非空目錄咋辦,又得自己寫了,思想仍然是遞歸,因?yàn)閜hp只提供了刪除文件函數(shù)unlink,所以在刪除一個(gè)目錄時(shí),先opendir,再進(jìn)入,如果是文件直接刪除,如果是目錄,繼續(xù)進(jìn)入使用該方法處理,當(dāng)然還可已返回一個(gè)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;
}

 

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

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

3.文件讀寫

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

分享:php的curl封裝類用法實(shí)例
使用函數(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教程/更新時(shí)間:2014-11-13
相關(guān)PHP教程