2009年5月6日 星期三

[php] 在server中搜尋檔案

在php Manual看到的,用成class的方式去寫
覺得很完整所以貼上來
class RecDir{
protected $currentPath;
protected $slash;
protected $rootPath;
protected $recursiveTree;

function __construct($rootPath,$win=false){
switch($win){
case true:
$this->slash = '\\';
break;
default:
$this->slash = '/';
}
$this->rootPath = $rootPath;
$this->currentPath = $rootPath;
$this->recursiveTree = array(dir($this->rootPath));
$this->rewind();
}

function __destruct(){
$this->close();
}

public function close(){
while(true === ($d = array_pop($this->recursiveTree))){
$d->close();
}
}

public function closeChildren(){
while(count($this->recursiveTree)>1 && false !== ($d = array_pop($this->recursiveTree))){
$d->close();
return true;
}
return false;
}

public function getRootPath(){
if(isset($this->rootPath)){
return $this->rootPath;
}
return false;
}

public function getCurrentPath(){
if(isset($this->currentPath)){
return $this->currentPath;
}
return false;
}

public function read(){
while(count($this->recursiveTree)>0){
$d = end($this->recursiveTree);
if((false !== ($entry = $d->read()))){
if($entry!='.' && $entry!='..'){
$path = $d->path.$entry;
if(is_file($path)){
return $path;
}
elseif(is_dir($path.$this->slash)){
$this->currentPath = $path.$this->slash;
if($child = @dir($path.$this->slash)){
$this->recursiveTree[] = $child;
}
}
}
}
else{
array_pop($this->recursiveTree)->close();
}
}
return false;
}

public function rewind(){
$this->closeChildren();
$this->rewindCurrent();
}

public function rewindCurrent(){
return end($this->recursiveTree)->rewind();
}
}



to use:

$d = new RecDir("./",false);
echo "Path: " . $d->getRootPath() . "<br>";
while (false !== ($entry = $d->read())) {
echo $entry."<br>";
}
$d->close();

沒有留言:

張貼留言