出于某种原因,我通过以下代码继续获得文件名的“1”:
if (is_dir($log_directory))
{
if ($handle = opendir($log_directory))
{
while($file = readdir($handle) !== FALSE)
{
$results_array[] = $file;
}
closedir($handle);
}
}
当我回显$ results_array中的每个元素时,我得到一堆'1',而不是文件的名称。如何获取文件名?
答案 0 :(得分:144)
不要打扰open / readdir并改为使用glob
:
foreach(glob($log_directory.'/*.*') as $file) {
...
}
答案 1 :(得分:42)
SPL样式:
foreach (new DirectoryIterator(__DIR__) as $file) {
if ($file->isFile()) {
print $file->getFilename() . "\n";
}
}
检查DirectoryIterator和SplFileInfo类,了解可以使用的可用方法列表。
答案 2 :(得分:17)
您需要用括号括起$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 />';
}
答案 3 :(得分:12)
只需使用glob('*')
即可。这是Documentation
答案 4 :(得分:10)
由于接受的答案有两个重要的缺陷,我正在为那些正在寻找正确答案的新来者发布改进的答案:
foreach (array_filter(glob('/Path/To/*'), 'is_file') as $file)
{
// Do something with $file
}
globe
过滤is_file
函数结果,因为它也可能会返回一些目录。.
,因此*/*
模式一般很糟糕。答案 5 :(得分:6)
我有更小的代码:
$path = "Pending2Post/";
$files = scandir($path);
foreach ($files as &$value) {
echo "<a href='http://localhost/".$value."' target='_blank' >".$value."</a><br/><br/>";
}
答案 6 :(得分:4)
这是由于运营商的优先权。尝试将其更改为:
while(($file = readdir($handle)) !== FALSE)
{
$results_array[] = $file;
}
closedir($handle);
答案 7 :(得分:3)
在某些操作系统上,您获得.
..
和.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>";
}
}
答案 8 :(得分:2)
/*
* 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 )
);
答案 9 :(得分:1)
您可以尝试scandir(Path)
功能。它快速而简单地实施
语法:
$files = scandir("somePath");
此函数将文件列表返回到数组中。
要查看结果,您可以尝试
var_dump($files);
或
foreach($files as $file)
{
echo $file."< br>";
}
答案 10 :(得分:1)
列出目录和文件的另一种方法是使用此处回答的RecursiveTreeIterator
:https://stackoverflow.com/a/37548504/2032235。
可以在此处找到PHP中RecursiveIteratorIterator
和迭代器的详尽说明:https://stackoverflow.com/a/12236744/2032235
答案 11 :(得分:0)
答案 12 :(得分:0)
我只是使用这段代码:
<?php
$directory = "Images";
echo "<div id='images'><p>$directory ...<p>";
$Files = glob("Images/S*.jpg");
foreach ($Files as $file) {
echo "$file<br>";
}
echo "</div>";
?>
答案 13 :(得分:0)
使用:
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
答案 14 :(得分:0)
用于浏览目录中包含的所有文件的递归代码(&#39; $ path&#39;包含目录的路径):
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
*/
}
}
}
答案 15 :(得分:0)
我为此创建的小东西:
function getFiles($path) {
if (is_dir($path)) {
$files = scandir($path);
$res = [];
foreach ($files as $key => $file) {
if ($file != "." && $file != "..") {
array_push($res, $file);
}
}
return $res;
}
return false;
}