最新記事
(06/29)
(06/04)
(06/03)
(05/30)
(05/28)
|
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
|
PHP ディレクトリ内のファイルリスト(scandir)
XAMPPでPHPの勉強中です。
今回のテーマは「ディレクトリ内のファイルリスト」です。
ファイルについて何らかの処理をしたいとき、いちいちファイル名を入力するのが面倒なので、HTMLフォームのラジオボタンで選択したいと思います。その処理をするファイル類が同一のディレクトリ内にあれば、ディレクトリ内のファイル一覧が取得できれば、問題は解決します。
ディレクトリ内のファイルリストが取得できるPHPの関数はあるのでしょうか。PHPの関数リファレンスを探すと、「ディレクトリ関数」というところに「scandir -- 指定されたパスのファイルとディレクトリのリストを取得する」というのがありました。これだ、これ。
ということで、実験してみました。
サンプルとして作成したのは、SQLiteのデータベースを選択してオープンするというものです。SQLiteは、データベースごとに1つのファイルが対応します。SQLiteのデータベースに接続するということは、SQLite用のファイルをオープンするということです。SQLiteのデータベースファイルを、1つのディレクトリにまとめておくことで、いろいろ処理がしやすくなります。
まずは、表示画面を紹介しましょう。
[サンプル画面]
ファイルの配置図は次のとおりです。
htdocs ──sqlite
├─ db -------accounts member memberdb
└─ utility---sqlite_utility.php
「sqlite_utility.php」上で「scandir('../db')」と使用すると「db」ディレクトリ上のファイル名等が、配列に格納されます。ただし、「.」と「..」も配列[0]と配列[1]にそれぞれ格納されてしまいます。そこで、配列[2]以降のみ表示することにしました。
ファイル名リストが配列$filesに格納されました。
これを受けて、次の関数でラジオボタンフォームに展開します。
これをHTMLに展開したフォームで「選択ボタン」を押すと、配列$filesの何番目かというデータがPOSTされます。
それでは、それから下ののソースを表示しましょう。
POSTによって、送信した情報をもとセッション変数に選択したデータベース名入れています。
今回のテーマは「ディレクトリ内のファイルリスト」です。
ファイルについて何らかの処理をしたいとき、いちいちファイル名を入力するのが面倒なので、HTMLフォームのラジオボタンで選択したいと思います。その処理をするファイル類が同一のディレクトリ内にあれば、ディレクトリ内のファイル一覧が取得できれば、問題は解決します。
ディレクトリ内のファイルリストが取得できるPHPの関数はあるのでしょうか。PHPの関数リファレンスを探すと、「ディレクトリ関数」というところに「scandir -- 指定されたパスのファイルとディレクトリのリストを取得する」というのがありました。これだ、これ。
ということで、実験してみました。
サンプルとして作成したのは、SQLiteのデータベースを選択してオープンするというものです。SQLiteは、データベースごとに1つのファイルが対応します。SQLiteのデータベースに接続するということは、SQLite用のファイルをオープンするということです。SQLiteのデータベースファイルを、1つのディレクトリにまとめておくことで、いろいろ処理がしやすくなります。
まずは、表示画面を紹介しましょう。
[サンプル画面]
ファイルの配置図は次のとおりです。
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