file_get_contents()
すごく便利ですが、容量が大きいファイルを扱うときはメモリ消費が心配ですよね。
かと言って fopen()
で古めかしいコードを書くのはイヤ!そんなときこそ、SplFileObject
クラスの出番です!
ファイルの中身は foreach()
で回すだけで取得できる
<?php
$splFileObject = new SplFileObject(__FILE__);
echo 'File name:', PHP_EOL;
echo $splFileObject->getPathname(), PHP_EOL;
echo 'File contents:', PHP_EOL;
foreach ( $splFileObject as $line )
{
echo $line;
}
実行結果
$ php SplFileObject.php
File name:
/Users/suin/Desktop/SplFileObject.php
File contents:
<?php
$splFileObject = new SplFileObject(__FILE__);
echo 'File name:', PHP_EOL;
echo $splFileObject->getPathname(), PHP_EOL;
echo 'File contents:', PHP_EOL;
foreach ( $splFileObject as $line )
{
echo $line;
}
もちろんCSVだって foreach()
でできます!
<?php
file_put_contents('foo.csv', "1,2,3\n4,5,6\n7,8,9\n");
$splFileObject = new SplFileObject('foo.csv');
foreach ( $splFileObject as $line )
{
echo $line;
}
// CSVモードに切り替える
$splFileObject->setFlags(SplFileObject::READ_CSV);
foreach ( $splFileObject as $line )
{
var_dump($line);
}
実行結果
* php SplFileObject.php
1,2,3
4,5,6
7,8,9
array(3) {
[0] =>
string(1) "1"
[1] =>
string(1) "2"
[2] =>
string(1) "3"
}
array(3) {
[0] =>
string(1) "4"
[1] =>
string(1) "5"
[2] =>
string(1) "6"
}
array(3) {
[0] =>
string(1) "7"
[1] =>
string(1) "8"
[2] =>
string(1) "9"
}
array(1) {
[0] =>
NULL
}