【PHP8.x】SplFileObject::getSize()メソッドの使い方
getSizeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getSizeメソッドは、SplFileObjectクラスのインスタンスが指し示すファイルのサイズを取得するメソッドです。SplFileObjectクラスは、PHPでファイルをオブジェクトとして扱い、読み書きや情報の取得などを可能にする標準ライブラリのクラスです。このメソッドは、開いているファイルの全内容のバイト数を整数値として返します。ファイルポインタがファイル内のどの位置にあっても関係なく、常にファイル全体の正確なサイズを提供します。例えば、ファイルを処理する前にその容量を確認したい場合や、ファイルサイズが特定の閾値を超えている場合に警告を発するなどのロジックを実装する際に役立ちます。getSizeメソッドは、ファイルシステムから直接ファイルサイズを取得するため、信頼性の高い情報源となります。これにより、プログラム内でファイル容量を効率的かつ正確に把握し、適切な処理を行うための基盤を提供します。
構文(syntax)
1<?php 2$filePath = tempnam(sys_get_temp_dir(), 'php_size_test_'); 3file_put_contents($filePath, 'Test file content.'); 4 5$fileObject = new SplFileObject($filePath); 6$fileSize = $fileObject->getSize(); 7 8unlink($filePath); 9?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
SplFileObject::getSize() メソッドは、ファイルポインタの位置からファイルの末尾までのバイト単位のサイズを整数で返します。
サンプルコード
PHP SplFileObject::getSize()でファイルサイズを取得する
1<?php 2 3/** 4 * SplFileObject::getSize() メソッドの使用例を示します。 5 * この関数は一時ファイルを作成し、そのファイルサイズをバイト単位で取得して表示します。 6 * 7 * @return void 8 */ 9function demonstrateSplFileObjectGetSize(): void 10{ 11 // 1. 一時ファイルを作成するための準備 12 // sys_get_temp_dir() でシステムの一時ディレクトリパスを取得 13 // 'php_size_test' は一時ファイル名のプレフィックス 14 $tempFileName = tempnam(sys_get_temp_dir(), 'php_size_test'); 15 16 // 一時ファイルの作成に失敗した場合の処理 17 if ($tempFileName === false) { 18 echo "エラー: 一時ファイルの作成に失敗しました。\n"; 19 return; 20 } 21 22 // 2. ファイルに書き込む内容を定義 23 $fileContent = "これはサンプルファイルの内容です。\n" 24 . "このテキストのバイト数を計測します。\n" 25 . "Hello World! こんにちは世界!\n"; 26 27 // 3. 定義した内容を一時ファイルに書き込む 28 // file_put_contents() はファイルを書き込みモードで開き、内容を書き込み、閉じます。 29 // 戻り値は書き込まれたバイト数、または失敗時には false 30 if (file_put_contents($tempFileName, $fileContent) === false) { 31 echo "エラー: 一時ファイルへの書き込みに失敗しました。\n"; 32 // 書き込み失敗時でも一時ファイルを削除 33 unlink($tempFileName); 34 return; 35 } 36 37 try { 38 // 4. SplFileObject を使用してファイルを開く 39 // 'r' は読み込みモードを示します。getSize() は読み込みモードで十分です。 40 $fileObject = new SplFileObject($tempFileName, 'r'); 41 42 // 5. getSize() メソッドを呼び出してファイルサイズを取得 43 // getSize() はファイルのバイト数を整数 (int) で返します。 44 $fileSize = $fileObject->getSize(); 45 46 // 6. 結果を表示 47 echo "一時ファイル名: " . basename($tempFileName) . "\n"; 48 echo "ファイルに書き込んだ内容のバイト数 (strlen): " . strlen($fileContent) . " バイト\n"; 49 echo "SplFileObject::getSize() で取得したファイルサイズ: " . $fileSize . " バイト\n"; 50 51 } catch (RuntimeException $e) { 52 // ファイルが存在しない、アクセス権がないなど、ファイル操作に関するエラーを捕捉 53 echo "エラーが発生しました: " . $e->getMessage() . "\n"; 54 } finally { 55 // 7. 作成した一時ファイルを削除(クリーンアップ) 56 // finally ブロックは、try または catch ブロックの実行後に必ず実行されます。 57 // これにより、エラーが発生しても一時ファイルが残りません。 58 if (file_exists($tempFileName)) { 59 unlink($tempFileName); 60 echo "一時ファイルを削除しました。\n"; 61 } 62 } 63} 64 65// 関数を実行して、サンプルコードの動作を確認します。 66demonstrateSplFileObjectGetSize();
PHPのSplFileObject::getSize()メソッドは、ファイルをオブジェクト指向で扱うためのSplFileObjectクラスに属し、開いているファイルのサイズをバイト単位で取得する際に使用します。このメソッドは引数を一切必要とせず、ファイルのサイズを整数値(int)として返します。
サンプルコードでは、まずシステムの一時ディレクトリに一時ファイルを作成し、任意の文字列コンテンツをそのファイルに書き込みます。次に、書き込みが完了した一時ファイルをSplFileObjectのインスタンスとして開き、そのインスタンスに対してgetSize()メソッドを呼び出すことで、ファイルの正確なバイトサイズを取得しています。例えば、日本語と英語が混在したテキストを書き込んだ場合でも、それぞれの文字が占めるバイト数を含めた合計サイズが正確に算出されます。
また、サンプルコードには、一時ファイルの作成や内容の書き込みが失敗した場合のエラー処理、およびファイル操作中に発生する可能性のあるRuntimeExceptionの捕捉が含まれています。処理の最後にfinallyブロックを使用することで、一時ファイルの作成に成功した場合は、そのファイルが確実に削除され、システムがクリーンな状態に保たれるよう設計されています。getSize()は、ファイルサイズの確認やディスク使用量の計算など、ファイルシステムに関連するさまざまな処理で活用できる実用的なメソッドです。
SplFileObject::getSize()は、ファイル内容のバイト数を整数で返します。マルチバイト文字を含む文字列をstrlenで計測したバイト数と、getSize()で取得したファイルのバイト数が異なる場合があるため、結果を比較する際は注意が必要です。このメソッドは、ファイルを開くモードが読み込み('r')であっても問題なく機能します。ファイル操作では、一時ファイルの作成にtempnamを使用し、使用後はfinallyブロックでunlinkにより確実に削除するクリーンアップが不可欠です。また、ファイルの読み書きは失敗する可能性があるため、try-catchを用いた適切なエラーハンドリングを必ず行い、安定した動作を確保してください。