[php] PHP를 사용하여 디렉토리의 모든 파일 이름 얻기

어떤 이유로 다음 코드로 파일 이름에 ‘1’이 계속 표시됩니다.

if (is_dir($log_directory))
{
    if ($handle = opendir($log_directory))
    {
        while($file = readdir($handle) !== FALSE)
        {
            $results_array[] = $file;
        }
        closedir($handle);
    }
}

$ results_array의 각 요소를 에코 할 때 파일 이름이 아닌 ‘1’이 표시됩니다. 파일 이름은 어떻게 얻습니까?



답변

open / readdir에 신경 쓰지 말고 glob대신 사용하십시오 .

foreach(glob($log_directory.'/*.*') as $file) {
    ...
}


답변

SPL 스타일 :

foreach (new DirectoryIterator(__DIR__) as $file) {
  if ($file->isFile()) {
      print $file->getFilename() . "\n";
  }
}

사용할 수있는 메서드 목록은 DirectoryIteratorSplFileInfo 클래스를 확인하십시오 .


답변

당신은 포위 할 필요가 $file = readdir($handle)괄호.

여기 있습니다 :

$log_directory = 'your_dir_name_here';

$results_array = array();

if (is_dir($log_directory))
{
        if ($handle = opendir($log_directory))
        {
                //Notice the parentheses I added:
                while(($file = readdir($handle)) !== FALSE)
                {
                        $results_array[] = $file;
                }
                closedir($handle);
        }
}

//Output findings
foreach($results_array as $value)
{
    echo $value . '<br />';
}


답변

그냥 사용하십시오 glob('*'). 여기에 문서가 있습니다.


답변

받아 들여지는 답변에는 두 가지 중요한 단점이 있으므로 정답을 찾고있는 신규 사용자를 위해 개선 된 답변을 게시하고 있습니다.

foreach (array_filter(glob('/Path/To/*'), 'is_file') as $file)
{
    // Do something with $file
}
  1. 일부 디렉터리도 반환 할 수 있으므로 globe함수 결과를 필터링해야 합니다 is_file.
  2. 모든 파일 .의 이름에 a가있는 것은 아니므 */*로 일반적으로 패턴이 엉망입니다.


답변

이 작업을 수행하는 더 작은 코드가 있습니다.

$path = "Pending2Post/";
$files = scandir($path);
foreach ($files as &$value) {
    echo "<a href='http://localhost/".$value."' target='_blank' >".$value."</a><br/><br/>";
}


답변

일부 OS에서 당신은 얻을 . ..하고 .DS_Store그럼 우리는 그래서 우리가 숨길하자를 사용할 수 없습니다.

먼저 파일에 대한 모든 정보를 얻으십시오. scandir()

// Folder where you want to get all files names from
$dir = "uploads/";

/* Hide this */
$hideName = array('.','..','.DS_Store');

// Sort in ascending order - this is default
$files = scandir($dir);
/* While this to there no more files are */
foreach($files as $filename) {
    if(!in_array($filename, $hideName)){
       /* echo the name of the files */
       echo "$filename<br>";
    }
}