PHPを使ってディレクトリ配下の全ファイルを再帰的に処理する方法です。 イテレータを使います。
例えば全ファイルの絶対パスを出力するなら次のようにします。
|
$iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator(realpath('dir_path'))); foreach ($iterator as $fileInfo) { if ($fileInfo->isFile()) { echo $fileInfo->getPathname(), "n"; } } |
イテレーションする対象をファイルだけに絞ったものを作るのもありですね。 次のように yield
を使って関数を作ることもできます。
|
function allSubdirectoryAndFilesIterator($dirPath) { return new new RecursiveIteratorIterator( new RecursiveDirectoryIterator(realpath($dirPath))); } function allFiles($dirPath) { foreach (allSubDirectoryAndFiles('directory_path') as $fileInfo) { if ($fileInfo->isFile()) { yield $fileInfo; } } } |
でもこれは yield
を使っているため PHP 5.5 からしか使えません。 FilterIterator
を使えば PHP 5.1 から使える関数を作成できます。
|
class FileFilterIterator extends FilterIterator { function accept() { $fileInfo = $this->getInnerIterator()->current(); if ($fileInfo !== null || $fileInfo->isFile()) { return true; } return false; } } |
このように FileFilterIterator
を作り、 $iterator = new FileFilterIterator($anIterator);
のようにすれば、ファイルのみの Iterator が作れます。
「Iterator
なんて 言語の機能に依存しすぎだから readdir
つかって自分でイテレータ作るべきだ」というご意見もあります。
FuelPHP でどのデータベースが使えるのか、コードを覗いてみました。
使用可能なデータベース
FuelPHP では 次の DBMS を扱うことができます。 扱うことができるといってもドライバとして参照するというだけで、 完璧に使えるわけではありません。
- Cubrid
- FreeTDS
- Microsoft SQL Server
- Sybase
Firebird
- IBM DB2
- IBM Informix Dynamic Server
- MySQL
- Oracle Call Interface
- ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
- PostgreSQL
- SQLite 3, 2
- SQL Azure
- 4D
調べ方
まずはマニュアルを読みます。 Database Introduction
のところに Can be mysql, mysqli or pdo
と あります。 つまり、 mysql の専用ドライバか、PDOドライバが使えるんですね。
続いて PDO について PHP のドキュメント を確認します。 すると、上述の DBMS すべてについて PDO が使えることがわかります。 もちろん PDOドライバがマシンに入っていればの話ですし、PDOとDBMSのバージョンには気をつけないといけませんね。
本当に PDO で繋がるのか? と思ったら、 FuelPHP のコアファイルの中の接続部分を担っているコードを見ましょう。 mysql, mysqli, PDO の3通りの connection.php があり、 PDO であれば PDO ドライバを使って DB に接続するようになっていることがわかります。
sqlite を使う場合の注意点
sqlite を使う場合にはいくつか気をつけることがあります。 (FuelPHP version 1.7.2)
Primary Key に注意
Primary Key を他のデータベースと同じように設定しようとすると migration が動きません。 sqlite3 では、 Primary Key に名前をつけることができません。 例えば MySQL なら Primary Key id
(id
)
となるところが、 sqlite3 だと Primary Key (id
)
というようになります。
直接SQLを作って実行するか、 FuelPHP の該当箇所を書き換えるかして凌ぐしかないです。 Primary Key を使わないという選択肢もありますが、おすすめはしません。
また通常は migration file を php oil を使って作成すると 自動で UNSIGNED
の id
が作成されて AUTO_INCREMENT
が設定されますが、 sqlite ではこれが動きません。 sqlite では AUTO_INCREMENT
ではなく AUTOINCREMENT
になります。 いまのところ自動生成のスクリプトでは対応していませんので FuelPHP の core
のコードを変更する必要があります。 そして自動生成される UNSIGNED
は 削除しましょう。 sqlite では UNSIGNED BIT INT
というのが使えますが、 使ったところで INTEGER
と解釈されます。
charset を空にする
sqlite3 では charset の指定方法が他のデータベースとは異なります。 PRAGMA
statement を使います。 (確か sqlite3 では標準文字コードが utf-8 だったと思います。)
データベースの設定(config/db.php
)で文字コードの指定をしないと php oil migrate
を実行する際に CREATE TABLE
の構文で 末尾に DEFAULT CHARACTER SET utf8
のついたSQLが発行されてしまい、エラーになります。 これを防ぐためには charset => ''
と、 charset
に 空文字列 を指定します。 すると、 DEFAULT
から始まる文字コード指定部分がなくなり、 sqlite3 でも php oil migrate
が動くようになります。
db.php
は次のように書きます。
|
<?php return array( 'default' => array( 'type' => 'pdo', 'connection' => array( 'dsn' => 'sqlite:'.APPPATH.'migrations/'.Fuel::$env.'.sqlite3', ), 'table_prefix' => '', 'charset' => '', ), ); |
このようにすると、 環境ごとに別の DB が作成されます。 table_prefix
は php oil r migration
の時には不要ですが、 php oil r migration:down
の時に必要になることがあります。
PostgreSQL を使う場合の注意点
migration ファイル を作っても動きません。 これは Syntax が MySQL とだいぶ違うからです。 FuelPHP に PostgreSQL を使うためのプラグインがあるのでそちらを使うという方法もあります。
charset を空にする
charset に値が入っていると 接続情報(dns)に charset が含まれるようになるのですが、 PostgreSQL はこれを受け付けません。 そこで charset = ''
と設定しておきましょう。 この点は SQLITE と同じです。
constraint を削除する
php oil g migration create_xxx
のようにして テーブル作成のマイグレーションファイルを作成すると、 id カラム が自動的に作成され、 'constraint' => 11
という設定がされます。 この状態だと テーブル作成の SQL で id カラムは INT(11)
に指定されます。 しかし、 PostgreSQL は INT(11)
を受け付けません。 INT
なら SQL が通ります。
そこで 'constraint' => 11
の設定を削除します。
無料サーバ 000webhost では、 フォームから入力したデータを DB に挿入するときに 自動で不要なバックスラッシュが入ってしまうことがあります。
これは PHP がセキュリティのためにバックスラッシュを入れて予期せぬ動作が発生しないようにする仕組みですが、 バックスラッシュを入れてほしくないところでバックスラッシュを入れられてしまうことが頻発していたので 設定を変えてバックスラッシュが入らないようにしました。 データのチェックは 別の部分でやっているので 特別問題はありませんでした。
その時の方法を紹介します。
方法
PHP の magic_quotes_gpc
という機能が有効になっているので それをオフにします。
具体的には magic_quotes_gpc
をオフにしたいディレクトリに、.htaccess
という名前のファイルを作り、そこに下記のコードを追加します。
|
php_flag magic_quotes_gpc off |
magic_quotes_gpc
の値は メソッド get_magic_quotes_gpc
で確認することができます。
PHP をちょっとやってみたい人におすすめです。本当に初心者向けなので、勉強熱心な人は買わないでください。
私の場合、役に立ったのはサンプル集です。というのもこの本、サンプルを解説するというスタイルで書かれているから、使いたいサンプルがあったらそこから読めばいい! っていう読み方ができるんです。
Amazon の評価では、eclipse の機能についての解説が薄い、という酷評が書かれていますが、それは eclipse についての話。PHP については初心者向けのいい本です。
ではどんなサンプルがあるの? ということですが……
- アンケート (フォーム、集計、セッション変数の取扱)
- グラフ (円グラフや棒グラフ、3Dのグラフも)
- アクセスカウンタ
- アクセス解析
- ファイルへのI/O
こういうサンプルは初心者にとってはとても役に立ちますね。 結構利用させてもらいました。
『EclipseではじめるPHP(翔泳社)』(NRIラーニングネットワーク株式会社 )
特に今 eclipse で PHP といえば、Zend が出している PDT が有名ですね。
読むものではありませんが、置いておくと役に立つ本です。
最近ではインターネットで調べるという手もありますし、最新情報を手に入れるならそれもいいかもしれません。 でも、こういった本の使い道がなくなったわけではないのです。
使い道
暇な時間にパラパラとめくってみてください。え?こんなのあったの?と気づくことがあります。
私の場合は、困ったときに使っています。これどうやってやるんだ~? となったときに、やっぱりあると便利ですよね。 PHP、はじめたばかりなんで。ノーマルな使い方ではありますが。
まったくの素人でも読める?
まったくの素人さんは……無理です。
プログラムを1回でも作ったことのある人で、Apache のインストールができる人なら大丈夫だと思います。でも、今なら マイクロソフトのWPIインストーラを使って全部一気にインストールできますよね。IISでも、WPIを使ってPHPをインストールすれば動きます。実際にやりました。PHP から SQLServer につなぐのも簡単ですね。
変数などの基本的なことは Chapter 1 に書いてあるので心配ないです。Chapter 20 には、Apache の設定についても記述があります。
A Life Summary of an Gypsy