2015-01-06 2 views
1

이 PHP 코드를 사용하여 디렉토리에 저장된 파일을 검색합니다.php 디렉토리의 파일을 나열하고 확장을 제거합니다

if ($handle = opendir('FolderPath')) { 

    while (false !== ($entry = readdir($handle))) { 

     if ($entry != "." && $entry != "..") { 

      echo "$entry\n <br />" ; 
     } 
    } 

    closedir($handle); 
} 

이 디렉토리는 내가 에코 결과에서 확장자를 제거 할 수있을 것입니다 방법, PHP 파일을 보유? 예 : (index.phpindex 될 것이다)

+0

표시; 다른 사람들은 당신을위한 해결책을 쓰는 것과는 반대로 자신의 코드를 기반으로 질문에 기꺼이 의견을 말합니다. 힌트 : 정규식, 하위 문자열 일치. –

답변

1

이 작업을 수행하는 가장 쉬운 방법은 the glob function을 사용하는 것입니다 : 여기 glob

foreach (glob('path/to/files/*.php') as $fileName) { 
    //extension .php is guaranteed here 
    echo substr($fileName, 0, -4), PHP_EOL; 
} 

장점은 당신이 그 성가신 readdiropendir 통화를 멀리 할 수 ​​있다는 것입니다. 오직 "불이익"의 값은 $fileName의 값에도 경로가 포함됩니다. 그러나,이 (한 줄을 추가) 쉽게 수정입니다 :

foreach (glob('path/to/files/*.php') as $fullName) { 
    $fileName = explode('/', $fullName); 
    echo substr(
     end($fileName),//the last value in the array is the file name 
     0, -4), 
    PHP_EOL; 
} 
1

이 당신을 위해 작동합니다 :

echo basename($entry, ".php") . "\n <br />" ; 
1

이 작업을 수행하는 빠른 방법은

<?php 

if ($handle = opendir('FolderPath')) { 

    while (false !== ($file = readdir($handle))) { 

     if ($file != "." && $file != "..") { 

      $info = pathinfo($file); 
      $file_name = basename($file,'.'.$info['extension']); 
      echo $file_name; 
    } 
    } 

    closedir($handle); 

>

1
$files = glob('path/to/files/*.*'); 
foreach($files as $file) { 
    if (! is_dir($file)) { 
    $file = pathinfo($file); 
    echo "<br/>".$file['filename']; 
    } 
} 

사용 pathinfo()입니다

+0

왜 확장을 glob 패턴에 추가하지 않겠습니까? OP는 .php 파일 바로 다음에 있습니다. –

1
$entry = substr($entry, 0, strlen($entry) - 4); 

이것은 확장자가 * .xxx 형식인지 100 % 확신하는 경우 완벽하게 작동하는 간단하고 빠른 해결책입니다. 그러나 가능한 다른 연장 길이에 대해보다 유연하고 안전한 솔루션이 필요한 경우에는이 솔루션을 사용하지 않는 것이 좋습니다.

+1

확장자가'.o','.gz' 또는'.html' 인 파일 또는 확장자가 전혀없는 이진 파일은 어떻게됩니까? 파일에 3 자의 확장자가 있다고 가정 할 이유가 없습니다. –

+0

디렉토리에 PHP 파일 만 저장된다는 질문에 명확하게 설명되어 있습니다. – Gio

+0

사실일지도 모르겠지만 안전하지는 않습니다. 'glob'를 사용하면'opendir'과'readdir'에 대한 필요성을 제거하고, _and_는 당신이 관심있는 파일만을 담고있는 배열을 반환하도록 보장합니다. –

0

우아한 해결책은 DirectoryIterator::getBasename() 방법의 $suffix 속성을 사용하는 것입니다. 제공되는 경우 $suffix은 각 통화에서 제거됩니다. 알려진 확장자를 들어, 사용할 수 있습니다

foreach (new DirectoryIterator('/full/dir/path') as $file) { 
    if ($file->isFile()) { 
    print $file->getBasename('.php') . "\n"; 
    } 
} 

하거나, 같은 보편적 인 솔루션 :

foreach (new DirectoryIterator('/full/dir/path') as $file) { 
    if ($file->isFile()) { 
    print $file->getBasename($file->getExtension() ? '.' . $file->getExtension() : null) . "\n"; 
    } 
} 

PHP의 문서를 : http://php.net/manual/en/directoryiterator.getbasename.php

지금까지 시도 것을
관련 문제