1. 程式人生 > 其它 >PHP中目錄操作函式

PHP中目錄操作函式

PHP中目錄操作函式

1、是否是目錄

is_dir 判斷給定檔名是否是一個目錄

$path = dirname(__FILE___);
echo is_dir($path) ? '目錄' : '非目錄';

2、獲取當前的工作目錄

getcwd()

echo getcwd(); ///mnt/hgfs/study.com/file

3、相關魔術常量

  1. __FILE__
    檔案的完整路徑和檔名。如果用在被包含檔案中,則返回被包含的檔名。
    自 PHP 4.0.2 起,FILE 總是包含一個絕對路徑(如果是符號連線,則是解析後的絕對路徑),而在此之前的版本有時會包含一個相對路徑。
<?php
echo '該檔案位於 " '  . __FILE__ . ' " ';
//輸出E:\wamp\www\test\index.php 
?>
  1. __DIR__
    檔案所在的目錄。如果用在被包括檔案中,則返回被包括的檔案所在的目錄。
    它等價於 dirname(__FILE__)。除非是根目錄,否則目錄中名不包括末尾的斜槓。
<?php
echo '該檔案位於 " '  . __DIR__ . ' " ';
//輸出E:\wamp\www\test
?>

4、磁碟空間

只對磁碟根目錄起作用

  • 當前磁碟的總空間 disk_total_space($directory)
  • 當前磁碟的剩餘空間 disk_free_space($directory)

5、建立目錄

mkdir()

6、刪除空目錄

rmdir()

7、讀目錄控制代碼

$rHandle = opendir($path);
$filename = readdir($rHandle)

8、重置指標

$rHandle = opendir($path);

$filename = readdir($rHandle);
var_dump($filename);

$filename = readdir($rHandle);
var_dump($filename);

$filename = readdir($rHandle);
var_dump($filename);

rewinddir($rHandle); //指標初始化

$filename = readdir($rHandle);
var_dump($filename);

9、複製目錄

copy

剪下目錄

copy + rmdir

10、重新命名目錄

rename rmdir

11、關閉目錄控制代碼

closedir

12、chdir() 函式改變當前的目錄

13、basename()返回路徑中的檔名

14、diename()返回路徑中目錄部分


遞迴刪除目錄下的檔案

<?php
// $dir:要刪除的檔案的目錄
function recursiveDelete($dir)
{    
     // 開啟指定目錄
   if ($handle = @opendir($dir))
   {
     while (($file = readdir($handle)) !== false)
     {
         if (($file == ".") || ($file == ".."))
         {
           continue;
         }
         if (is_dir($dir . '/' . $file))
         {
           // 遞迴
           recursiveDelete($dir . '/' . $file);
         }
         else
         {
           unlink($dir . '/' . $file); // 刪除檔案
         }
     }
     @closedir($handle);
     rmdir ($dir); 
   }
}

遍歷資料夾下所有檔案

<?php
function read_all ($dir){
    if(!is_dir($dir)) return false;

    $handle = opendir($dir);

    if($handle){
        while(($fl = readdir($handle)) !== false){
            $temp = iconv('GBK','utf-8',$dir.DIRECTORY_SEPARATOR.$fl);//轉換成utf-8格式
            //如果不加  $fl!='.' && $fl != '..'  則會造成把$dir的父級目錄也讀取出來
            if(is_dir($temp) && $fl!='.' && $fl != '..'){
                echo '目錄:'.$temp.'<br>';
                read_all($temp);
            }else{
                if($fl!='.' && $fl != '..'){

                    echo '檔案:'.$temp.'<br>';
                }
            }
        }
    }
}
read_all('D:\wamp\www\test');
//另一種方法
tree("alipay");
function tree($directory)
{
  $mydir = dir($directory);
  echo "<ul>";
  while ($file = $mydir->read()) {
  if($file != "."&&$file != ".."){
  if (is_dir("$directory/$file")) {
  echo "<li style='color:blue'>$file</li>";
  tree("$directory/$file");
  } else{
  echo "<li>$file</li>";
  }
 } }  echo "</ul>";
  $mydir->close();
}
?>

獲得資料夾大小並格式化

$dir='CMS';
echo getRealSize(getDirSize($dir));
// 獲取資料夾大小
function getDirSize($dir)
{
  $sizeResult=0;
  $handle = opendir($dir);
  while (false!==($FolderOrFile = readdir($handle)))
 {  if($FolderOrFile != "." && $FolderOrFile != "..")
 {  if(is_dir("$dir/$FolderOrFile"))
 {  $sizeResult += getDirSize("$dir/$FolderOrFile");
  }
  else
  {
  $sizeResult += filesize("$dir/$FolderOrFile");
  }
 } } closedir($handle);
  return $sizeResult;
}
// 單位自動轉換函式
function getRealSize($size)
{
  $kb = 1024; // Kilobyte
  $mb = 1024 * $kb; // Megabyte
  $gb = 1024 * $mb; // Gigabyte
  $tb = 1024 * $gb; // Terabyte
  if($size < $kb)
 {  return $size." B";
  }
  else if($size < $mb)
 {  return round($size/$kb,2)." KB";
  }
  else if($size < $gb)
 {  return round($size/$mb,2)." MB";
  }
  else if($size < $tb)
 {  return round($size/$gb,2)." GB";
  }
  else
  {
  return round($size/$tb,2)." TB";
  }
}

function getFolderSize($dir)
{
  $count_size = 0;
  $dir_array = scandir($dir);
  foreach ($dir_array as $filename) {
  if ($filename != "." && $filename != "..") {
  if (is_dir($dir . "/" . $filename)) {
  $count_size+= getFolderSize($dir . "/" . $filename);
  } else{
  $count_size = $count_size + filesize($dir . "/" . $filename);
  }
 } }  return $count_size;
}


來自為知筆記(Wiz)