어떤 이유로 다음 코드로 파일 이름에 ‘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";
}
}
사용할 수있는 메서드 목록은 DirectoryIterator 및 SplFileInfo 클래스를 확인하십시오 .
답변
당신은 포위 할 필요가 $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
}
- 일부 디렉터리도 반환 할 수 있으므로
globe
함수 결과를 필터링해야 합니다is_file
. - 모든 파일
.
의 이름에 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>";
}
}