PHP遍曆目錄檔案的方法

來源:互聯網
上載者:User
這篇文章主要介紹了PHP遍曆目錄檔案的常用方法,結合執行個體形式總結分析了php針對檔案與目錄的常用遍曆技巧與運行效率,具有一定參考借鑒價值,需要的朋友可以參考下

具體如下:

測試演算法(原始碼經過本站工具http://tools.jb51.net/code/jb51_php_format進行格式化處理,以便於讀者閱讀)

演算法1.簡短系

foreach(glob('*.*') as $filename){  echo 'Filename:'.$filename.;}

演算法2.規矩系

if($handle = opendir('C:\\Inetpub\\wwwroot\\test\\')){  echo "Files:\n";  while (false !== ($file = readdir($handle))){    echo "$file\n";  }  closedir($handle);}

演算法3.函數系

function tree($directory){  $mydir=dir($directory);  while($file=$mydir->read()){    if((is_dir("$directory/$file")) AND ($file!=".") AND ($file!=".."))    {      echo "$file\n";      tree("$directory/$file");    } else    echo "$file\n";  }  echo "\n";  $mydir->close();}tree("C:\\Inetpub\\wwwroot\\test\\");

演算法4.函數系II

function listDir($dir){  if(is_dir($dir)){    if ($dh = opendir($dir)) {      while (($file= readdir($dh)) !== false){        if((is_dir($dir."/".$file)) && $file!="." && $file!=".."){          echo "檔案名稱:",$file;          listDir($dir."/".$file."/");        } else{          if($file!="." && $file!=".."){            echo $file;          }        }      }      closedir($dh);    }  }}listDir("C:\\Inetpub\\wwwroot\\test\\");

演算法5.遞迴系

function file_list($dir,$pattern=""){  $arr=array();  $dir_handle=opendir($dir);  if($dir_handle)  {    while(($file=readdir($dir_handle))!==false)    {      if($file==='.' || $file==='..')      {        continue;      }      $tmp=realpath($dir.'/'.$file);      if(is_dir($tmp))      {        $retArr=file_list($tmp,$pattern);        if(!emptyempty($retArr))        {          $arr[]=$retArr;        }      } else      {        if($pattern==="" || preg_match($pattern,$tmp))        {          $arr[]=$tmp;        }      }    }    closedir($dir_handle);  }  return $arr;}print_r(file_list("C:\\Inetpub\\wwwroot\\test\\"));

測試方法

我們採取在測試代碼的頭部和尾部添加如下的內容來檢測執行時間,並測試5次取平均結果作為最終成績。

$stime=microtime(true);//測試代碼//......//......$etime=microtime(true);$total=($etime-$stime)*1000;echo "{$total} Millisecond(s)";

測試結果:

演算法1

演算法1在瀏覽器能正確輸出所有項目,5次測驗耗費的時間分別是:

平均用時=3803.618621824 毫秒

演算法2

演算法2在瀏覽器也能正確輸出所有項目,但在開頭會給出“..”(上級目錄)的資訊。5次測驗耗費的時間分別是:

平均用時=381.0853481294 毫秒

演算法3

演算法3在瀏覽器能正確輸出所有項目,也仍會給出“..”(上級目錄)的資訊。5次測驗耗費的時間分別是:

平均用時=24299.2805485 毫秒

演算法4

演算法4和演算法3類似,在瀏覽器能正確輸出所有項目,5次測驗耗費的時間分別是:

平均用時=24020.66812516 毫秒

演算法5

演算法5曾一度讓我以為IIS又出問題了。雖說它在瀏覽器能正確輸出所有項目,但資料的結果預設為數組。5次測驗耗費的時間分別是:

平均用時=61411.31243706 毫秒

測試總結

根據測試結果,我們很容易得出下面的速度排名。

演算法2 > 演算法1 > 演算法4 > 演算法3 > 演算法5

為什麼演算法2要比其他演算法都高效一些呢?

實際上是因為演算法中只使用了php中內建用來讀取目錄內容的函數“readdir()” 。除了演算法1以外,其他演算法在引用readdir()的時候,為了彌補函數的先天不足,幹了很多其他的事情。

如果說,我們需要指定副檔名的列舉目錄內所有檔案的話。Rt推薦使用演算法1的模式,我們將代碼寫成這樣就可以了。

foreach(glob('*.需要的副檔名') as $filename){  echo 'Filename:'.$filename.;}

結語

不管作為一個代碼新手還是一個資深的程式員,在堆砌代碼的時候,更應該關注程式的效率和安全。

請不要忽略任何一種可能,也請不要讓孩子般的代碼成為拖累伺服器的罪魁禍首。

以上就是本文的全部內容,希望對大家的學習有所協助。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.