ドキュメント
リリースカレンダー
リンク
SourceForge.jp SourceForge.JPへ
php.net PHP公式サイトへ

ファイル

 ファイル関連ライブラリは、ファイルの内容を操作するクラスのまとまりです。 通常のPHPで行うファイル関連処理をラップしたメソッドもありますが、 アレンジを加えて実業務において使いやすくしたり、インターフェイスの統一をしています。

1. 読み込み

ファイルの内容を読み込む例を示します。

(1) ファイルの読み込み

// ライブラリをインクルード
SyL_Loader::lib('File');
// SyLフレームワークを使用しない場合は直接インクルード
// include_once SYL_INCLUDE_DIR . '/lib/SyL_File.php';

$file = '/usr/local/apache2/data/test.txt';

$contents = '';
$f =& SyL_File::factory('r', $file);
$f->open();
while ($tmp = $f->read()) {
  $contents .= $tmp;
}
$f->close();

echo $contents;

// 上の手続きを一括して行う方法

$contents = '';
$f =& SyL_File::factory('r', $file);
// processメソッドは、
// open read close メソッドを連続して実行します。
$contents = $f->process();

echo $contents;

// さらに一行でデータを取得する方法

echo SyL_File::processAll('r', $file);

ファイル内容とスクリプトのエンコードが異なる場合は、それぞれ文字コードをopenメソッド前に指定します。これは、後述する書き込みでも同様です。

...
$f =& SyL_File::factory('r', $file);
$f->setScriptEncode('EUC-JP');
$f->setFileEncode('Shift_JIS');
$f->open();
...

(2) CSVファイルの読み込み

// ライブラリをインクルード
SyL_Loader::lib('File');
// SyLフレームワークを使用しない場合は直接インクルード
// include_once SYL_INCLUDE_DIR . '/lib/SyL_File.php';

$contents = '';
$file = '/usr/local/apache2/data/test.csv';

$f =& SyL_File::factory('r', $file);
$f->useCsv(','); // 区切り文字
$f->open();
while ($items = $f->read()) {
    $datetime = $items[0]; // 1項目目取得
    echo $datetime . "\n";
}
$f->close();

※CSVファイルの読み込みには、内部的にfgetcsv関数を使用しています。この関数は、ロケール設定を考慮しますので、必要であれば事前にロケールの変更をしてください。
※読み込むファイルのエンコードを指定する場合は、「(1) ファイルの読み込み」の後半に記載したようにエンコードを指定してください。

setlocale(LC_ALL, 'ja_JP.eucJP');

2. 書き込み

ファイルの内容を書き込む例を示します。新規で書き込む場合 SyL_File::factory メソッドの第1引数に w を指定しますが、 追加書き込みの場合、a を指定します。

(1) ファイルの書き込み

// ライブラリをインクルード
SyL_Loader::lib('File');
// SyLフレームワークを使用しない場合は直接インクルード
// include_once SYL_INCLUDE_DIR . '/lib/SyL_File.php';

$file = '/usr/local/apache2/data/test.txt';

$contents = '書き込み対象データ';
$f =& SyL_File::factory('w', $file);
$f->open();
$f->write($contents);
$f->close();

// 上の手続きを一括して行う方法

$f =& SyL_File::factory('w', $file);
// processメソッドは、
// open write close メソッドを連続して実行します。
$f->process($contents);

// さらに一行でデータを取得する方法

SyL_File::processAll('w', $file, $contents);

(2) CSVファイルの書き込み

// ライブラリをインクルード
SyL_Loader::lib('File');
// SyLフレームワークを使用しない場合は直接インクルード
// include_once SYL_INCLUDE_DIR . '/lib/SyL_File.php';

$contents = array();
$contents[] = array('aaa', 'bbb', 'ccc');
$contents[] = array('ddd', 'eee', 'fff');

$file = '/usr/local/apache2/data/test2.csv';
$f =& SyL_File::factory('w', $file);
$f->useCsv();
$f->open();
foreach ($contents as $content) {
  // 分割された配列として書き込み
  $f->write($content);
}
$f->close();

※書き込むファイルのエンコードを指定する場合は、「(1) ファイルの読み込み」の後半に記載したようにエンコードを指定してください。