データ読み込みのテストなどで128MBといった巨大なダミーファイルが必要になることがある。本稿ではPHPで巨大なダミーファイルを作る方法を紹介する。
なお、本稿で紹介するコードの完全版はGitHubで公開している。
指定のファイルサイズでファイルを生成する方法
指定のファイルサイズでファイルを作成するコードは次のようになる。$filesize
に128
を代入すると、128バイトのファイルが作られる。ファイルの中身は128文字のヌルバイト(\000
)で埋められる。
$filesize = 128;
$fp = fopen($filename, 'wb');
ftruncate($fp, $filesize);
fclose($fp);
ftruncate
はファイルを指定サイズにまるめる関数だが、ファイルサイズよりも大きい値を与えると、ヌルバイトで埋めてくれる。
メガバイトで指定できるようにした実装
バイト数指定だと、テストコードで使うにはコードが読みにくくなるので、メガバイトでファイルサイズを指定できるようにした実装が次のFileBySizeCreator
クラスである。
FileBySizeCreator.php
<?php
declare(strict_types=1);
final class FileBySizeCreator
{
/**
* Create a file with given megabyte size.
*/
public function createFileWithMegabyte(
string $filename,
int $megabyte
): void {
$fp = fopen($filename, 'wb');
ftruncate($fp, $this->megabyteToByte($megabyte));
fclose($fp);
}
private function megabyteToByte(int $megabyte): int
{
return $megabyte * 1024 * 1024;
}
}
使い方はこんなかんじ:
$fileCreator = new FileBySizeCreator();
$fileCreator->createFileWithMegabyte($filename, 128);