<?php
$opts = "";
$files = array();
$cmdname = array_shift($argv);
$dir = "./";foreach ($argv as $arg) {
if (strlen($arg) == 0) continue;
if ($arg{0} == '-') //{}を文字列を呼び出す
$opts .=substr($arg, 1);
else
$files[] = $arg;
}if (strlen($opts) > 0) {
if ($opts{0} == 'a'){
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if (filetype($file ) == 'file'){
              echo "filename: $file : filetype: " . filetype($file) . "\n"; }

        }
        closedir($dh);
    }
}if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if (filetype($file ) == 'dir'){
              echo "filename: $file : filetype: " . filetype($file) . "\n";
}

        }
        closedir($dh);
    }
}}
}
elseif(strlen($opts) == 0){
if(count($files) == 0){
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if ($file{0} !== '.' && filetype($file ) == 'file'){
echo "filename: $file : filetype: " . filetype($file) . "\n";
}
}
}
}
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if ($file{0} !== '.' && filetype($file ) == 'dir'){
echo "filename: $file : filetype: " . filetype($file) . "\n";
}
}
}
}
}
}if (count($files) > 0){
foreach ($files as $file){
if (filetype($file ) == 'dir'){
$dir = "$file/";if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {//为何加入if (filetype($file ) == 'file')的语句就执行不了了呢?如果我只要输出dir型的文件该如何做呢?            echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";
        }
        closedir($dh);
    }
}}
elseif(filetype($file ) == 'file'){
print "$file\n";
}}
}
?>如果输入 php ls.php sum
只输出sum下的dir类型的文件该如何去做呢?
红色的部分不是很了解请高手指点,谢谢大家。

解决方案 »

  1.   


    while (($file = readdir($dh)) !== false) {
               echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";
     }
    这里是一个遍历的作用, 用readdir()读取目录的信息. 赋值给$file , 当然, 读完了. 就会返回 false啦这个时候,就会跳出循环.如果说.你要做目录类型的判断.你应该在while里面去写.
    while (($file = readdir($dh)) !== false) {
          $fileName ="$file/".$file;
          if(filetype($fileName)=='dir') echo $file;
     }
      

  2.   

    is_dir
    (PHP 4, PHP 5)is_dir — 判断给定文件名是否是一个目录bool is_dir ( string $filename )
    如果文件名存在并且为目录则返回 TRUE。如果 filename 是一个相对路径,则按照当前工作目录检查其相对路径。 Note: 本函数的结果会被缓存。更多信息参见 clearstatcache()。
      

  3.   


    function get_file_count($dir_name) { 
    static $array; 
    $arr = scandir($dir_name); 
    while (list($key, $value)=each($arr)) { 
    if (($value == '.') || ($value == '..')) { 
    continue; 

    $path=$dir_name.'/'.$value; 
    if (is_dir($path)) { 
    (filetype($path))?$ftype=filetype($path):null;
    ($ftype==null)?null:$array[$path]=$ftype;
    get_file_count($path); 
    }   

       return $array; 

    echo "<pre/>";
    print_r(get_file_count("/"));
      

  4.   

    遍历操作判断目录即可:is_dir
    (PHP 4, PHP 5)is_dir — 判断给定文件名是否是一个目录说明
    bool is_dir ( string $filename )
    如果文件名存在并且为目录则返回 TRUE。如果 filename 是一个相对路径,则按照当前工作目录检查其相对路径。 Note: 此函数的结果会被缓存。参见 clearstatcache() 以获得更多细节。
    Example #1 is_dir() 例子<?
    var_dump(is_dir('a_file.txt')) . "\n";
    var_dump(is_dir('bogus_dir/abc')) . "\n";var_dump(is_dir('..')); //one dir up
    ?> 
    以上例程会输出:bool(false)
    bool(false)
    bool(true)