Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】PharData::getSize()メソッドの使い方

getSizeメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

getSizeメソッドは、PharDataオブジェクトが表すアーカイブファイルのサイズを取得するメソッドです。PharDataクラスは、PHPのPhar拡張機能によって提供され、Phar形式だけでなく、tarやzip形式といった様々なアーカイブファイルを操作するために使用されます。このgetSizeメソッドを呼び出すことで、対象となるアーカイブファイル全体のディスク上のサイズをバイト単位の整数値として取得できます。

例えば、作成したアーカイブファイルが実際にどれくらいのディスク容量を消費しているかを確認したい場合や、ファイル転送前にそのサイズを事前に知っておきたい場合などにこのメソッドが役立ちます。戻り値は常にバイト単位の整数値で提供されます。もし、指定されたアーカイブファイルが見つからない場合や、ファイルの読み込みに失敗するなどの問題が発生した際には、PharExceptionがスローされます。そのため、このメソッドを利用する際は、エラーハンドリングを適切に行うことで、プログラムの堅牢性を高めることが重要です。このメソッドは、アーカイブファイルの物理的なサイズ情報をプログラムから効率的に取得するための基本的な機能を提供します。

構文(syntax)

1<?php
2
3$pharData = new PharData('archive.tar');
4$sizeInBytes = $pharData->getSize();

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

PharData::getSizeは、Pharアーカイブの圧縮されていないサイズをバイト単位で返します。

サンプルコード

PharData::getSizeでアーカイブサイズを取得する

1<?php
2
3/**
4 * PharData::getSize() メソッドを使用して、アーカイブファイルのサイズを取得するサンプルコードです。
5 *
6 * このコードは、一時的なTarアーカイブファイルを作成し、そのサイズをPharDataオブジェクトを通じて取得し、表示します。
7 * PharData::getSize() は、Phar形式またはTar/Zip形式のアーカイブファイル全体のサイズをバイト単位で返します。
8 *
9 * システムエンジニアを目指す初心者の方向けに、単体で動作し、必要最低限のコメントを含んでいます。
10 */
11function getPharDataArchiveSizeExample(): void
12{
13    // Phar拡張がPHPにロードされているかを確認
14    // PharDataクラスを使用するには、この拡張機能が必須です。
15    if (!extension_loaded('phar')) {
16        echo "エラー: 'phar' 拡張機能がロードされていません。\n";
17        echo "php.ini 設定で 'extension=phar.so' (または .dll) が有効になっているか確認してください。\n";
18        exit(1);
19    }
20
21    // テスト用のアーカイブファイル名と内容を定義
22    $testArchiveFilename = 'sample_archive.tar';
23    $testFileContent = 'これはテスト用のアーカイブに含まれるファイルの内容です。';
24
25    // 以前のテストファイルが存在する場合は削除し、クリーンな状態にする
26    if (file_exists($testArchiveFilename)) {
27        unlink($testArchiveFilename);
28    }
29
30    try {
31        // --- ステップ1: テスト用のTarアーカイブファイルを作成する ---
32        // 新しいPharDataオブジェクトを、指定したファイル名で作成します。
33        // ファイルが存在しない場合、新しいアーカイブとして作成されます。
34        // ここでは、Phar::TAR フラグを使用して、明示的にTar形式のアーカイブを作成しています。
35        $archiveCreator = new PharData($testArchiveFilename, 0, null, Phar::TAR);
36
37        // アーカイブ内に 'test_file.txt' という名前でファイルを追加し、内容を書き込みます。
38        $archiveCreator->addFromString('test_file.txt', $testFileContent);
39
40        // オブジェクトをnullに設定することで、アーカイブファイルへの書き込みを完了させ、ファイルを閉じます。
41        // これにより、ファイルシステム上にアーカイブが物理的に作成されます。
42        $archiveCreator = null;
43
44        // --- ステップ2: 作成したアーカイブファイルのサイズを取得する ---
45        // 既存のアーカイブファイルを開くために、再度PharDataオブジェクトを初期化します。
46        $archiveReader = new PharData($testArchiveFilename);
47
48        // getSize() メソッドを呼び出し、アーカイブファイル全体のサイズ(バイト単位)を取得します。
49        $fileSize = $archiveReader->getSize();
50
51        // 取得したサイズを画面に表示します。
52        echo "アーカイブファイル '" . $testArchiveFilename . "' のサイズ: " . $fileSize . " バイト\n";
53
54    } catch (Exception $e) {
55        // PharDataオブジェクトの操作中に発生した例外をキャッチし、エラーメッセージを表示します。
56        echo "エラーが発生しました: " . $e->getMessage() . "\n";
57    } finally {
58        // --- ステップ3: テストファイルをクリーンアップする ---
59        // 処理が完了したら、作成した一時的なアーカイブファイルを削除します。
60        if (file_exists($testArchiveFilename)) {
61            unlink($testArchiveFilename);
62            echo "一時ファイル '" . $testArchiveFilename . "' を削除しました。\n";
63        }
64    }
65}
66
67// サンプル関数の実行
68getPharDataArchiveSizeExample();

PharData::getSize()メソッドは、PHPのPharDataクラスのメソッドで、Phar形式やTar/Zip形式などのアーカイブファイル全体のサイズをバイト単位で取得するために使用されます。このメソッドは引数を一切取らず、常にアーカイブファイル自体の合計容量を整数型(int)で返します。これは、アーカイブ内部の個々のファイルサイズではなく、アーカイブファイルがファイルシステム上で占める物理的なサイズを指します。

提供されたサンプルコードでは、まずPharDataオブジェクトを使って一時的なTar形式のアーカイブファイルを作成し、その中にテスト用のデータを追加しています。アーカイブが物理的に作成された後、再度PharDataオブジェクトでこのアーカイブを読み込み専用で開き、getSize()メソッドを呼び出すことで、作成したアーカイブファイル全体の容量をバイト単位で取得し、その結果を画面に表示しています。

この機能を利用するには、PHPにphar拡張機能がロードされている必要があります。サンプルコードは、テスト用のアーカイブファイルを自動で作成し、処理の完了後にはそのファイルを削除するため、繰り返し安全に動作を確認できます。PharData::getSize()は、システムエンジニアがアーカイブファイルの容量をプログラムから確認したり、特定のサイズ制限がある操作を行う前にチェックしたりする際に役立つ、基本的ながら重要なメソッドです。

このコードを利用するには、PHPのphar拡張機能がロードされている必要があります。php.iniextension=phar.so(Windowsでは.dll)が有効になっているか必ず確認してください。PharData::getSize()メソッドは、.tar.zipといった「アーカイブファイル全体」のサイズをバイト単位で取得するためのものです。通常の単一ファイルサイズ取得とは異なる点に注意が必要です。アーカイブファイルを作成する際は、内容を追加した後、ファイルがディスクに物理的に書き込まれる(今回の例では$archiveCreator = null;で確定)までサイズが確定しない場合があります。また、ファイル操作を伴うため、必ずtry-catchで例外を適切に処理し、finallyブロックで作成した一時ファイルを削除するなど、リソースのクリーンアップを徹底してください。

関連コンテンツ