忍者ブログ
バナヤンの忍者風呂
忍者ブログのカスタマイズ、各種WEBツールのテストなど試行錯誤の日々。 VMLによる地図の作成を研究していましたが、一時中断して、今はPHPを勉強しているところです。
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
お知らせ
この欄には管理人からのお知らせなどを掲載します。
[71] [72] [73] [74] [75] [76] [77] [78]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHP ディレクトリ内のファイルリスト(scandir)

XAMPPでPHPの勉強中です。

今回のテーマは「ディレクトリ内のファイルリスト」です。

ファイルについて何らかの処理をしたいとき、いちいちファイル名を入力するのが面倒なので、HTMLフォームのラジオボタンで選択したいと思います。その処理をするファイル類が同一のディレクトリ内にあれば、ディレクトリ内のファイル一覧が取得できれば、問題は解決します。

ディレクトリ内のファイルリストが取得できるPHPの関数はあるのでしょうか。PHPの関数リファレンスを探すと、「ディレクトリ関数」というところに「scandir -- 指定されたパスのファイルとディレクトリのリストを取得する」というのがありました。これだ、これ。

ということで、実験してみました。

サンプルとして作成したのは、SQLiteのデータベースを選択してオープンするというものです。SQLiteは、データベースごとに1つのファイルが対応します。SQLiteのデータベースに接続するということは、SQLite用のファイルをオープンするということです。SQLiteのデータベースファイルを、1つのディレクトリにまとめておくことで、いろいろ処理がしやすくなります。

まずは、表示画面を紹介しましょう。

[サンプル画面]

SQLiteデータベース選択画面

ファイルの配置図は次のとおりです。

htdocs ──sqlite
        ├─ db -------accounts member memberdb
        └─ utility---sqlite_utility.php

「sqlite_utility.php」上で「scandir('../db')」と使用すると「db」ディレクトリ上のファイル名等が、配列に格納されます。ただし、「.」と「..」も配列[0]と配列[1]にそれぞれ格納されてしまいます。そこで、配列[2]以降のみ表示することにしました。


<?php
####################  設定  ####################
//// データベース・ディレクトリ
$dirname='../db';
$files=scandir($dirname);
}
?>


ファイル名リストが配列$filesに格納されました。
これを受けて、次の関数でラジオボタンフォームに展開します。


### 総行数を返す
function radio_files($files){
$count=count($files);
echo "<form method='post' action='$_SERVER[PHP_SELF]'>";
for($i=2;$i<$count;$i++){
echo "<input type=radio name='item' value=$i>".$files[$i]." ";
}
echo "<input type='submit' value='選択'></form>";
return $count;
}


これをHTMLに展開したフォームで「選択ボタン」を押すと、配列$filesの何番目かというデータがPOSTされます。

それでは、それから下ののソースを表示しましょう。
POSTによって、送信した情報をもとセッション変数に選択したデータベース名入れています。



<?php
####################  設定  ####################
session_start();
//// データベース

if($_SESSION['db']){
$dbname=$_SESSION['db'];
}
if($_POST['item']){
$dbname=$files[$_POST['item']];
}
?>


<!-------------------- HTML -------------------->
<html>
<head>
<link rel="stylesheet" type="text/css" href="sqlite_utility_style.css">
<style type="text/css">
<!--
-->
</style>
</head>
<body>
<h1>SQLite Utility</h1>
<div class='note_right'>
Current Directory : <?= dirname($_SERVER[PHP_SELF]) ?>
 | Database Directory : <?= $dirname ?>
</div>

<h2>
Database : <?= $dbname ?>
</h2>
<div class='navi'>
<div class='current_tab'>Database</div>
<div class='tab'><a href='sqlite_utility_table.php'>TABLE</a></div>
<div class='tab'><a href='sqlite_utility_table.php'>VIEW</a></div>
</div>

<h3>SELECT Database</h3>

<?php
$count=radio_files($files);
if($_POST['item']){
$_SESSION['db']=$files[$_POST['item']];
}
?>

</body>
</html>

PR
QRコード
忍者ブログ [PR]
Copyright (C) 2006 banayan ALL RIGHTS RESERVED.