2017-07-20 19 views
0

私のfilemanagerスクリプトは、これまでのところうまく機能しています。拡張子を持たないファイルを処理する方法を知らず、プログラム内のすべてのファイルとそのサイズを表示しようとするとエラーをスローします。PHP - 拡張子を持たないファイルのファイルサイズを読み取ることができません。

ファイルを取得して適切な配列に追加するための呼び出しです。

$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 

これは私が道を見つけることができないファイル

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; 
} 

のrealFileSizeを見つけるために参照されている機能ですファイルREADMEには拡張子はありませんが、ディレクトリには3KBのサイズがあるため、この例外を処理します。これらのファイルをスキップするか、正しくロードする別の方法はありますか?私はここで私の知恵の終わりです。

答えて

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は、「」ときになることに注意してください

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

を私は 'それに' {}キャッチ(にUnexpectedValueExceptionます$ e)の{}試みる使用しようと、私はまだ '致命的なエラーを取得:キャッチされないにUnexpectedValueException:RecursiveDirectoryIterator :: __構築物(Cをあなたが書いたこのコードが使用します:\ apache \ error \ READ ... 'エラーメッセージ – Kaboom

+0

編集時にtry catchを移動しようとしていますあなたの 'ext' => substr($ file、strrpos($ file、 "。"))をこれに変更してください: 'ext' => substr($ file、((strrpos($ file、 "。")> = 0)? strrpos($ file、 "。"):0) –

+0

オブジェクト呼び出しの前にtryとcatchを追加するとyesになりますが、ファイルサイズは指定されていません。ファイルをソートします。 – Kaboom

関連する問題