何らかの理由で、このコードでファイル名に「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('*')
を使用してください。 ドキュメント
受け入れられた答えには2つの重要な欠点があるので、正しい答えを探している新規参入者のために改善された答えを投稿しています。
foreach (array_filter(glob('/Path/To/*'), 'is_file') as $file)
{
// Do something with $file
}
globe
関数の結果をis_file
でフィルタリングすることも必要です。これは、いくつかのディレクトリも返す可能性があるためです。.
が含まれているわけではないため、*/*
パターンは一般的に意味がありません。これを行う小さなコードがあります:
$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>";
}
}
これは、演算子の優先順位によるものです。次のように変更してみてください:
while(($file = readdir($handle)) !== FALSE)
{
$results_array[] = $file;
}
closedir($handle);
glob()
および FilesystemIterator
の例:
/*
* glob() examples
*/
// get the array of full paths
$result = glob( 'path/*' );
// get the array of file names
$result = array_map( function( $item ) {
return basename( $item );
}, glob( 'path/*' ) );
/*
* FilesystemIterator examples
*/
// get the array of file names by using FilesystemIterator and array_map()
$result = array_map( function( $item ) {
// $item: SplFileInfo object
return $item->getFilename();
}, iterator_to_array( new FilesystemIterator( 'path' ), false ) );
// get the array of file names by using FilesystemIterator and iterator_apply() filter
$it = new FilesystemIterator( 'path' );
iterator_apply(
$it,
function( $item, &$result ) {
// $item: FilesystemIterator object that points to current element
$result[] = (string) $item;
// The function must return TRUE in order to continue iterating
return true;
},
array( $it, &$result )
);
ディレクトリとファイルをリストする別の方法は、ここで回答されたRecursiveTreeIterator
を使用することです: https://stackoverflow.com/a/37548504/2032235 。
RecursiveIteratorIterator
およびPHPのイテレータの詳細な説明は、ここにあります: https://stackoverflow.com/a/12236744/2032235
scandir(Path)
関数を試すことができます。迅速かつ簡単に実装できます
構文:
$files = scandir("somePath");
この関数は、ファイルのリストを配列に返します。
結果を表示するには、試すことができます
var_dump($files);
または
foreach($files as $file)
{
echo $file."< br>";
}
私はこのコードを使用します:
<?php
$directory = "Images";
echo "<div id='images'><p>$directory ...<p>";
$Files = glob("Images/S*.jpg");
foreach ($Files as $file) {
echo "$file<br>";
}
echo "</div>";
?>
つかいます:
if ($handle = opendir("C:\wamp\www\yoursite/download/")) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
echo "<b>" . preg_replace('/\\.[^.\\s]{3,4}$/', '', $entry) . "</b>";
}
}
closedir($handle);
}
ソース: http://chandreshrana.blogspot.com/2016/08/how-to-fetch-all-files-name-from-folder.html
ディレクトリに含まれるすべてのファイルを探索する再帰的なコード(「$ path」にはディレクトリのパスが含まれます):
function explore_directory($path)
{
$scans = scandir($path);
foreach($scans as $scan)
{
$new_path = $path.$scan;
if(is_dir($new_path))
{
$new_path = $new_path."/";
explore_directory($new_path);
}
else // A file
{
/*
Body of code
*/
}
}
}
フォルダ内のすべてのファイルを表示 のより高度な例