2017-05-27 85 views
0

我正在寫一個文件哈希類,但我一開始就卡住了。is_file()和is_dir()不起作用

class fileHashing 
{ 
    private $start_path = '../../../test'; 
    private $log_path = '../../../test/log'; 
    private $log_file = 'fileHash.xyz'; 

    function __construct() 
    { 
     $this->open(); 
    } 

    private function open() { 
     $files_list = scandir($this->start_path); 
     print_r($files_list); 
     date_default_timezone_set('Europe/Rome'); 
     foreach ($files_list as $key => $element) { 
      if (is_file($element)) { 
       echo "FILE: " . $element . PHP_EOL; 

      } elseif (is_dir($element)) { 
       echo "DIR: " . $element . PHP_EOL; 
      } else { 
       echo "NONE: " . $element . PHP_EOL; 
      } 
     } 
    } 
} 

$a = new fileHashing(); 

返回:

Array 
(
    [0] => . 
    [1] => .. 
    [2] => fileupload.php 
    [3] => log 
    [4] => test1.php 
    [5] => tsconfig.json 
) 
DIR: . 
DIR: .. 
FILE: fileupload.php 
NONE: log 
NONE: test1.php 
NONE: tsconfig.json 

log是一個文件夾,它不承認它,既test1.phptsconfig.json不確認文件。 我錯過了什麼scandir()/is_file()/is_dir()

+0

也許你應該使用'$ this-> start_path。 '/'。 $ element'代表'is_dir'和'is_file' – Philipp

+0

這些文件可能是符號鏈接嗎?試試'is_link()' – rickdenhaan

+0

@ Philipp我知道我錯過了一些關於這些功能的東西;我想他們分析'.ext =>文件''沒有外部=>文件夾'區分的文件名,這樣文件名就足夠了。感謝Philipp,現在它可以工作。你能告訴我他們如何分析文件/目錄嗎?檢查斜槓'/'? – Brigo

回答

0

你還應該追加start_path到您的文件名中is_fileis_dir。可以這樣做

private function open() { 
    $files_list = scandir($this->start_path); 
    print_r($files_list); 
    date_default_timezone_set('Europe/Rome'); 
    foreach ($files_list as $key => $element) { 
     $file = $this->start_path . '/' . $element; 
     if (is_file($file)) { 
      echo "FILE: " . $element . PHP_EOL; 

     } elseif (is_dir($file)) { 
      echo "DIR: " . $element . PHP_EOL; 
     } else { 
      echo "NONE: " . $element . PHP_EOL; 
     } 
    } 
} 
1

用這樣的方式: -

if (filetype($this->start_path . '/' . $element) == "dir") { 
    // dir 
}elseif(filetype($this->start_path . '/' . $element) == "file") { 
    // file 
} 
// or this way 
if (is_dir($this->start_path . '/' . $element)) { 
    // dir 
}elseif(is_file($this->start_path . '/' . $element)) { 
    // file 
} 
+0

感謝Ranjeet,問題是由@Philipp強調的問題,但不錯的替代解決方案! +1'因爲我不知道'filetype()' – Brigo