次のPHPコードを使用して、現在のディレクトリの下にあるすべてのファイルとフォルダを一覧表示しています。
<?php
$dirname = ".";
$dir = opendir($dirname);
while(false != ($file = readdir($dir)))
{
if(($file != ".") and ($file != "..") and ($file != "index.php"))
{
echo("<a href='$file'>$file</a> <br />");
}
}
?>
問題は、リストがアルファベット順に並べられていないことです(おそらく、作成日でソートされていますか?わかりません)。
アルファベット順にソートであることを確認するにはどうすればよいですか?
manual は、次のように明確に述べています。
readdir
ディレクトリから次のファイルのファイル名を返します。ファイル名は、ファイルシステムによって保存されるの順序で返されます。
できることは、ファイルを配列に格納し、並べ替えてから、その内容を次のように出力することです。
$files = array();
$dir = opendir('.'); // open the cwd..also do an err check.
while(false != ($file = readdir($dir))) {
if(($file != ".") and ($file != "..") and ($file != "index.php")) {
$files[] = $file; // put in array.
}
}
natsort($files); // sort.
// print.
foreach($files as $file) {
echo("<a href='$file'>$file</a> <br />\n");
}
<?php
function getFiles(){
$files=array();
if($dir=opendir('.')){
while($file=readdir($dir)){
if($file!='.' && $file!='..' && $file!=basename(__FILE__)){
$files[]=$file;
}
}
closedir($dir);
}
natsort($files); //sort
return $files;
}
?>
<html>
<head>
</head>
<body>
<h1> List of files </h1>
<ul class="dir">
<? foreach(getFiles() as $file)
echo "<li name='$file'><a href='$file'>$file</a></li>";
?>
</ul>
</body>
</html>
次のように、すべてのディレクトリ名を配列内に配置できます。
$array[] = $file;
その後、次のコマンドで配列を並べ替えることができます。
sort($array);
そして、そのコンテンツのリンクを印刷します。
これがお役に立てば幸いです。
<?php
$dirname = ".";
$dir = opendir($dirname);
while(false != ($file = readdir($dir)))
{
if(($file != ".") and ($file != "..") and ($file != "index.php"))
{
$list[] = $file;
}
}
sort($list);
foreach($list as $item) {
echo("<a href='$item'>$item</a> <br />");
}
?>
古いopendir()/ readdir()から離れることをお勧めします。 glob()を使用するか、ディレクトリ内に多数のファイルが見つかった場合は、DirectoryIteratorクラスを使用します。
http://www.php.net/manual/en/class.directoryiterator.php http://www.php.net/manual/en/function.glob.php
よろしく
この美しいスクリプトを使用できます。
http://halgatewood.com/free-php-list-files-in-a-directory-script/