获取服务器目录中文件列表的最简单方法
Posted
技术标签:
【中文标题】获取服务器目录中文件列表的最简单方法【英文标题】:Easiest way to get list of files in the server directory 【发布时间】:2015-08-17 19:08:10 【问题描述】:我需要获取目录(例如 www.example.com/images/)中所有图像(或简单的所有文件)的数组。我更喜欢使用 javascript,但很难做到。那么我应该使用 php 吗?
你能帮帮我吗?我不擅长这个。
非常感谢!
【问题讨论】:
您需要使用服务器端 PHP 才能访问服务器上的文件。你可以开始here 或者看这里:***.com/questions/26150336/…(对不起,我不知道如何标记为重复) 【参考方案1】:我设法在基本 javascript 中使用修改后的 ajax 命令来获取文件夹列表作为 html 文件。然后我从里面 grep 文件名:
function loadDoc()
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function()
if (this.readyState == 4 && this.status == 200)
// gets the entire html file of the folder 'logpost' in this case and labels it thing
thing = this.responseText
searchFor = /.html</g
a=0;
b=0;
var str = "";
// greps file for .html and then backs up leter by letter till you hot the file name and all
while ((dothtmls = searchFor.exec(thing)) != null )
str = "";
console.log(dothtmls.index);
a = dothtmls.index;
while (thing[a] != '>' )
a--;
a++;
while(thing[a] != '<')
str = str + thing[a];
a++;
console.log(str);
;
xhttp.open("GET", "logpost/", true);
xhttp.send();
这可能不是最干净的方式,但如果您使用的是静态网络服务器,它应该可以工作:)
【讨论】:
很遗憾,由于CORS policy,此代码在 Firefox 和 Chrome 上不起作用【参考方案2】:我不同意@mariobgr。如果没有阻止目录列表的服务器设置,则可以解析通过请求该目录生成的 html 的内容。
$ tree maindir
maindir
├── index.html
└── somedir
├── doc1
├── doc2
└── doc3
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"><!-- JQUERY -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
<title></title>
</head>
<body>
<h1>Listing /somedir</h1><!-- Custom Script (defered load, after dom ready) -->
<script>
$.getJSON('./somedir', data =>
console.log(data); //["doc1.jpg", "doc2.jpg", "doc3.jpg"]
);
</script>
</body>
【讨论】:
我用 VS 创建了一个网站项目并尝试了您的解决方案,但不幸的是,什么也没出现。我需要设置什么吗? @Amir 确保您在目录上启用了目录列表。 wiki.apache.org/httpd/DirectoryListingsnginxlibrary.com/enable-directory-listing【参考方案3】:Javascript 无法获取服务器上的所有文件,因为它是一种客户端语言。
http://php.net/manual/en/function.glob.php 是您所需要的。
$all = glob('/path/to/dir/*.*');
$images = glob('/path/to/dir/*.jpg,png,gif');
【讨论】:
嗯,是的,但在这种情况下,node.js 似乎有点过头了。你试过我的建议了吗? 非常感谢。我试过这个,但现在我检测到导致它不起作用的错误。当我在给文本“数组”中使用回声时,我想这很好。现在我只需要遍历这个数组来获取文件名——对吗? 这不起作用。$images = glob('http://www.honzachalupa.cz/dev/imgs/*.jpg,png'); foreach($images as $image) print $image;
不要使用域,而是图像目录的路径。例如/home/example.com/public_html/images
即使我使用相对路径并将打印更改为回显它也不起作用。 <?php $images = glob('/imgs/*.jpg,png'); foreach($images as $image) echo $value; ?>
以上是关于获取服务器目录中文件列表的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章