以下代码将列出目录中的所有文件
<?php
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle)))
{
if (($file != ".")
&& ($file != ".."))
{
$thelist .= '<LI><a href="'.$file.'">'.$file.'</a>';
}
}
closedir($handle);
}
?>
<P>List of files:</p>
<UL>
<P><?=$thelist?></p>
</UL>
虽然这是非常简单的代码,但它可以完成这项任务。
我现在正在寻找一种方法来列出最后只有.xml(或.XML)的文件,我该怎么做?
答案 0 :(得分:190)
答案 1 :(得分:48)
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != ".." && strtolower(substr($file, strrpos($file, '.') + 1)) == 'xml')
{
$thelist .= '<li><a href="'.$file.'">'.$file.'</a></li>';
}
}
closedir($handle);
}
使用substr和strrpos查看扩展的简单方法
答案 2 :(得分:10)
$it = new RegexIterator(new DirectoryIterator("."), "/\\.xml\$/i"));
foreach ($it as $filename) {
//...
}
您还可以使用迭代器的递归变体遍历整个目录层次结构。
答案 3 :(得分:3)
我使用此代码:
<?php
{
//foreach (glob("images/*.jpg") as $large)
foreach (glob("*.xml") as $filename) {
//echo "$filename\n";
//echo str_replace("","","$filename\n");
echo str_replace("","","<a href='$filename'>$filename</a>\n");
}
}
?>
答案 4 :(得分:2)
目录中的列表文件和文件夹(完整代码):
P.S。如果您只想要特定的扩展程序,则必须取消注释第5行
<?PHP
# The current directory
$directory = dir("./");
# If you want to turn on Extension Filter, then uncomment this:
### $allowed_ext = array(".sample", ".png", ".jpg", ".jpeg", ".txt", ".doc", ".xls");
## Description of the soft: list_dir_files.php
## Major credits: phpDIRList 2.0 -(c)2005 Ulrich S. Kapp :: Systemberatung ::
$do_link = TRUE;
$sort_what = 0; //0- by name; 1 - by size; 2 - by date
$sort_how = 0; //0 - ASCENDING; 1 - DESCENDING
# # #
function dir_list($dir){
$i=0;
$dl = array();
if ($hd = opendir($dir)) {
while ($sz = readdir($hd)) {
if (preg_match("/^\./",$sz)==0) $dl[] = $sz;$i.=1;
}
closedir($hd);
}
asort($dl);
return $dl;
}
if ($sort_how == 0) {
function compare0($x, $y) {
if ( $x[0] == $y[0] ) return 0;
else if ( $x[0] < $y[0] ) return -1;
else return 1;
}
function compare1($x, $y) {
if ( $x[1] == $y[1] ) return 0;
else if ( $x[1] < $y[1] ) return -1;
else return 1;
}
function compare2($x, $y) {
if ( $x[2] == $y[2] ) return 0;
else if ( $x[2] < $y[2] ) return -1;
else return 1;
}
}else{
function compare0($x, $y) {
if ( $x[0] == $y[0] ) return 0;
else if ( $x[0] < $y[0] ) return 1;
else return -1;
}
function compare1($x, $y) {
if ( $x[1] == $y[1] ) return 0;
else if ( $x[1] < $y[1] ) return 1;
else return -1;
}
function compare2($x, $y) {
if ( $x[2] == $y[2] ) return 0;
else if ( $x[2] < $y[2] ) return 1;
else return -1;
}
}
##################################################
# We get the information here
##################################################
$i = 0;
while($file=$directory->read()) {
$file = strtolower($file);
$ext = strrchr($file, '.');
if (isset($allowed_ext) && (!in_array($ext,$allowed_ext)))
{
// dump
}
else {
$temp_info = stat($file);
$new_array[$i][0] = $file;
$new_array[$i][1] = $temp_info[7];
$new_array[$i][2] = $temp_info[9];
$new_array[$i][3] = date("F d, Y", $new_array[$i][2]);
$i = $i + 1;
}
}
$directory->close();
##################################################
# We sort the information here
#################################################
switch ($sort_what) {
case 0:
usort($new_array, "compare0");
break;
case 1:
usort($new_array, "compare1");
break;
case 2:
usort($new_array, "compare2");
break;
}
###############################################################
# We display the infomation here
###############################################################
$i2 = count($new_array);
$i = 0;
echo "<table border=1>
<tr>
<td width=150> File name</td>
<td width=100> File Size</td>
<td width=100>Last Modified</td>
</tr>";
for ($i=0;$i<$i2;$i++) {
if (!$do_link) {
$line = "<tr><td align=right>" .
$new_array[$i][0] .
"</td><td align=right>" .
number_format(($new_array[$i][1]/1024)) .
"k";
$line = $line . "</td><td align=right>" . $new_array[$i][3] . "</td></tr>";
}else{
$line = '<tr><td align=right><A HREF="' .
$new_array[$i][0] . '">' .
$new_array[$i][0] .
"</A></td><td align=right>";
$line = $line . number_format(($new_array[$i][1]/1024)) .
"k" . "</td><td align=right>" .
$new_array[$i][3] . "</td></tr>";
}
echo $line;
}
echo "</table>";
?>
答案 5 :(得分:1)
你应该使用glob。
glob('*.xml')
有关使用glob和高级过滤的更多信息:
http://domexception.blogspot.fi/2013/08/php-using-functional-programming-for.html
答案 6 :(得分:0)
最简单的答案是提出另一个条件'.xml' == strtolower(substr($file, -3))
。
但我建议您也使用glob
。
答案 7 :(得分:0)
您可以像这样扩展RecursiveFilterIterator类:
class ExtensionFilter extends RecursiveFilterIterator
{
/**
* Hold the extensions pass to the class constructor
*/
protected $extensions;
/**
* ExtensionFilter constructor.
*
* @param RecursiveIterator $iterator
* @param string|array $extensions Extension to filter as an array ['php'] or
* as string with commas in between 'php, exe, ini'
*/
public function __construct(RecursiveIterator $iterator, $extensions)
{
parent::__construct($iterator);
$this->extensions = is_array($extensions) ? $extensions : array_map('trim', explode(',', $extensions));
}
public function accept()
{
if ($this->hasChildren()) {
return true;
}
return $this->current()->isFile() &&
in_array(strtolower($this->current()->getExtension()), $this->extensions);
}
public function getChildren()
{
return new self($this->getInnerIterator()->getChildren(), $this->extensions);
}
现在您可以将路径作为参数实例化RecursiveDirectoryIterator,如下所示:
$iterator = new RecursiveDirectoryIterator('\path\to\dir');
$iterator = new ExtensionFilter($iterator, 'xml, php, ini');
foreach($iterator as $file)
{
echo $file . '<br />';
}
这将仅列出当前文件夹下的文件。
要获取子目录中的文件,
将$ iterator(ExtensionFIlter Iterator)作为参数传递给RecursiveIteratorIterator:
$iterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
现在在这个迭代器上运行foreach循环。您将获得具有指定扩展名的文件
注意: - 还要确保在RecursiveIteratorIterator之前运行ExtensionFilter,否则你将获得所有文件
答案 8 :(得分:0)
$ files数组将获取目录中具有指定扩展名的所有文件
$directory = 'pathto/directory';
$files = array();
$allowed_ext = array( "xml", "png", "jpg", "jpeg", "txt", "doc", "xls","csv");
// Check if the directory exists or not
if (file_exists($directory) && is_dir($directory)) {
// Get the files in the directory
$scan_contents = scandir($directory);
// Filter out the current (.) and parent (..) directories
$files_array = array_diff($scan_contents, array('.', '..'));
// Get each files of our directory with line break
foreach ($files_array as $file) {
//Get the file path
$file_path = "$directory/$file";
// Get the file extension
$file_ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
if (in_array($file_ext, $allowed_ext) ) {
$files[] = $file_path;
}
}
}
echo '<pre>$files:-';
print_r($files);
echo '</pre>';
答案 9 :(得分:0)
您可以在glob()函数和pathinfo()函数之间混合使用,如下所示。
下面的代码将显示特定扩展名“ pdf”的文件信息
elif request.method == 'DELETE':
pricing_data = request.data
return Response(status=status.HTTP_204_NO_CONTENT)