PHP - 无法在没有扩展名的情况下读取文件大小

时间:2017-07-20 20:35:29

标签: php apache2.4

我的filemanager脚本一直很好用到现在。它不知道如何处理没有扩展名的文件,而是在尝试显示程序中的所有文件及其大小时抛出错误。

这是调用文件并将它们添加到适当的数组。

$errors = array();
$items = array();
$folders = array();
$files = array();
$dir = $base_dir;
if(is_dir($dir)) {
    if($dh = opendir($dir)) {
        while(($file = readdir($dh)) !== false) {
            if($file == "." || $file == "..") {
                continue;
            } else {
                $filesize = filesize($dir . "/" . $file);
                $filesize = $x10->function->realFileSize($filesize);
                $items[] = array(
                    'name' => $file,
                    'size' => $filesize,
                    'ext' => substr($file, strrpos($file, "."))
                );
            }
        }
        closedir($dh);
    }
    for($i = 0; $i < count($items); ++$i) {
        $filename = $items[$i]['name'];
        $extension = $items[$i]['ext'];
        if($extension == $filename) {
            if($filename == ".htaccess" || $filename == "magic") {
                $files[] = $items[$i];
            } else {
                $folders[] = $items[$i];
            }
        } else {
            $files[] = $items[$i];
        }
    }
} else {
    $errors[] = "1";
}

我收到此错误消息:

Fatal error: Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(C:\apache\error\README,C:\apache\error\README): The directory name is invalid. (code: 267) in C:\panel\htdocs\core\functions.php:318 Stack trace: #0 C:\panel\htdocs\core\functions.php(318): RecursiveDirectoryIterator->__construct('C:\\apache\\error...', 4096) #1 C:\panel\htdocs\filemanager.php(229): Functions->GetDirectorySize('C:\\apache\\error...') #2 {main} thrown in C:\panel\htdocs\core\functions.php on line 318

这是为查找文件的realFileSize而引用的函数

function GetDirectorySize($path) {
    $bytestotal = 0;
    $path = realpath($path);
    if($path !== false && $path != '' && file_exists($path)) {
        foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS)) as $object){
            $bytestotal += $object->getSize();
        }
    }
    return $bytestotal;
}

我无法找到处理此异常的方法,因为文件README没有扩展名,但目录中的大小为3KB。有没有其他方法可以跳过这些文件或正确加载它们?我的智慧结束了。

1 个答案:

答案 0 :(得分:1)

你是否尝试过这样的事情来捕捉错误:

try {
     foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS)) as $object){

                    $bytestotal += $object->getSize();

    }
}
catch(UnexpectedValueException $e) {
            // error here print $e->getMessage();
}

顺便说一下,当你使用你编写的代码时,请注意一个名为“zuumba”而没有扩展名的文件的ext将是“a”:

$items[] = array(
       'name' => $file,
       'size' => $filesize,
       'ext' => substr($file, strrpos($file, "."))
);