【PHP8.x】ini_parse_quantity()関数の使い方
ini_parse_quantity関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
ini_parse_quantity関数は、PHP 8.2以降の環境で利用可能な、PHPの設定ファイル(php.iniなど)で用いられる、人間が読みやすい形式のサイズ表記(例: "128M", "1G")を、コンピュータが直接扱えるバイト単位の整数値に変換する関数です。この関数は、主にPHPの内部設定値をプログラム内で動的に取得し、その値を正確なバイト数として利用したい場合に役立ちます。
具体的には、"K"(キロバイト)、"M"(メガバイト)、"G"(ギガバイト)といった単位が付加された文字列を受け取ると、対応するバイト数に変換して返します。単位の文字は大文字でも小文字でも認識されます。例えば、"256M"という文字列を渡すと、256メガバイトに相当するバイト数が計算され、整数として返されます。もし数値のみで単位が指定されていない場合は、その数値がそのままバイト数として扱われます。
この関数を使うことで、開発者はPHPの設定値に含まれるサイズ情報(例: memory_limitやupload_max_filesize)を、文字列として取得した後、手動でパースする手間を省き、エラーの少ない形で正確な数値として利用できます。これにより、設定値に基づいたメモリ管理やファイルサイズの検証などの処理を、より安全かつ簡潔に実装することが可能になります。
構文(syntax)
1<?php 2 3$quantityString = "128M"; 4$bytes = ini_parse_quantity($quantityString); 5echo $bytes; 6 7?>
引数(parameters)
string $shorthand
- string $shorthand: 設定項目を表す数値を表す文字列。K、M、Gなどの接尾辞に対応します。
戻り値(return)
int
ini_parse_quantity関数は、設定ファイル(iniファイル)で定義された数量を表す文字列(例: "10M", "2G")を、バイト数を示す整数型(int)に変換して返します。
サンプルコード
INI設定の容量をバイトへ変換する
1<?php 2 3/** 4 * ini_parse_quantity と parse_ini_string の関連性を示す使用例。 5 * 6 * このスクリプトは、PHP の設定ファイル(php.ini など)でよく見られる 7 * 容量のショートハンド(例: "10M", "20G")を含むINI形式の文字列をパースし、 8 * その容量を ini_parse_quantity を使ってバイト数に変換する方法を示します。 9 * 10 * parse_ini_string はINI形式の文字列を連想配列に変換するために使用され、 11 * ini_parse_quantity はその配列から取り出したショートハンド形式の容量値を 12 * 実際のバイト数に変換するために使用されます。 13 */ 14function demonstrateIniParseAndQuantity(): void 15{ 16 // INI形式の文字列を定義。PHPの設定ファイルを模倣しています。 17 $iniString = <<<INI 18[FileUpload] 19upload_max_filesize = 10M 20post_max_size = 20M 21max_execution_time = 30 22INI; 23 24 echo "--- INI設定のパースと容量変換の例 ---\n\n"; 25 26 // parse_ini_string を使ってINI文字列をパースします。 27 // 第二引数に true を指定すると、セクションを認識して多次元配列として返します。 28 $parsedIni = parse_ini_string($iniString, true); 29 30 echo "パースされたINI設定:\n"; 31 print_r($parsedIni); 32 echo "\n"; 33 34 // 'FileUpload' セクションから 'upload_max_filesize' の設定値を取得します。 35 // 値が存在しない場合に備え、null合体演算子 (??) を使用しています。 36 $uploadMaxFilesizeShorthand = $parsedIni['FileUpload']['upload_max_filesize'] ?? null; 37 38 // 'FileUpload' セクションから 'post_max_size' の設定値を取得します。 39 $postMaxSizeShorthand = $parsedIni['FileUpload']['post_max_size'] ?? null; 40 41 // 'FileUpload' セクションから 'max_execution_time' の設定値を取得します。 42 // これは容量ではなく時間なので、ini_parse_quantity の対象外です。 43 $maxExecutionTime = $parsedIni['FileUpload']['max_execution_time'] ?? null; 44 45 46 if ($uploadMaxFilesizeShorthand !== null) { 47 // ini_parse_quantity を使って、ショートハンド形式の容量をバイト数に変換します。 48 $uploadMaxFilesizeBytes = ini_parse_quantity($uploadMaxFilesizeShorthand); 49 echo "変換結果:\n"; 50 echo " 'upload_max_filesize' ('$uploadMaxFilesizeShorthand') は " . $uploadMaxFilesizeBytes . " バイトです。\n"; 51 } else { 52 echo " 'upload_max_filesize' 設定が見つかりませんでした。\n"; 53 } 54 55 if ($postMaxSizeShorthand !== null) { 56 $postMaxSizeBytes = ini_parse_quantity($postMaxSizeShorthand); 57 echo " 'post_max_size' ('$postMaxSizeShorthand') は " . $postMaxSizeBytes . " バイトです。\n"; 58 } else { 59 echo " 'post_max_size' 設定が見つかりませんでした。\n"; 60 } 61 62 // 容量ではない設定はそのまま表示します。 63 if ($maxExecutionTime !== null) { 64 echo " 'max_execution_time' は " . $maxExecutionTime . " 秒です。\n"; 65 } else { 66 echo " 'max_execution_time' 設定が見つかりませんでした。\n"; 67 } 68} 69 70// 関数を実行して、サンプルコードの動作を確認します。 71demonstrateIniParseAndQuantity(); 72 73?>
PHPのini_parse_quantity関数は、設定ファイル(php.iniなど)でよく見られる「10M」や「2G」といった、容量を示すショートハンド形式の文字列を、実際のバイト数(整数)に変換するために使用されます。引数には容量を表す文字列を渡し、戻り値として計算されたバイト数を整数で受け取ります。
サンプルコードでは、まずparse_ini_string関数を使って、PHPの設定ファイルを模倣したINI形式の文字列を連想配列にパースしています。parse_ini_stringは、INI形式のデータをプログラムで扱いやすい形式に変換する際に役立ちます。
その後、パースされた連想配列から「upload_max_filesize」や「post_max_size」などのショートハンド形式の容量設定値を取り出し、その値をini_parse_quantity関数に渡しています。これにより、「10M」のような文字列が正確なバイト数(例: 10,485,760)に変換され、プログラム内で容量を数値として扱えるようになります。容量以外の設定(例: 実行時間)は、この関数の対象外となります。この機能は、設定値を動的に解釈し、ファイルのアップロード制限などの処理を実装する際に大変便利です。
ini_parse_quantityは、"10M"や"2G"のような容量のショートハンド表記を、正確なバイト数を示す整数(int)に変換する専門関数です。時間やその他の数値には使用できませんのでご注意ください。サンプルコードでは、parse_ini_stringを使ってINI形式の文字列をPHPの配列に変換し、その結果から容量値を取り出しています。parse_ini_stringの第二引数にtrueを指定することで、セクション名(例: [FileUpload])をキーとする多次元配列としてパースされます。配列から設定値を取得する際は、値が存在しない場合に備え、??(null合体演算子)などで確認すると、未定義エラーを防ぎ安全にコードを扱えます。
PHP ini_parse_quantityでショートハンドをバイト変換する
1<?php 2 3/** 4 * ini_parse_quantity 関数の使用例を示します。 5 * parse_ini_file で読み込んだ設定ファイル内のショートハンド形式の値を 6 * バイト数に変換する方法を初心者向けに解説します。 7 * 8 * 例: "256M" (256メガバイト) をバイト数に変換する 9 */ 10 11// 1. 一時INIファイルの内容を定義します。 12// PHPの設定ファイルなどでよく見られる、数値と単位(K, M, G)を組み合わせたショートハンド形式を含みます。 13$iniContent = <<<INI 14; config.ini 15[Server] 16memory_limit = 512M 17upload_max_filesize = 128M 18post_max_size = 64M 19 20[Client] 21buffer_size = 16K 22INI; 23 24// 2. 一時INIファイルを作成します。 25// parse_ini_file 関数がファイルを読み込めるようにするためです。 26$iniFileName = sys_get_temp_dir() . '/sample_config_' . uniqid() . '.ini'; 27file_put_contents($iniFileName, $iniContent); 28 29echo "--- INIファイルの内容 ---" . PHP_EOL; 30echo $iniContent . PHP_EOL . PHP_EOL; 31 32// 3. parse_ini_file 関数を使ってINIファイルを読み込みます。 33// true を指定すると、セクションを多次元配列としてパースします。 34$config = parse_ini_file($iniFileName, true); 35 36echo "--- parse_ini_file で読み込んだ設定 ---" . PHP_EOL; 37print_r($config); 38 39// 4. ini_parse_quantity 関数を使用して、ショートハンド形式の値をバイト数に変換します。 40echo "--- ini_parse_quantity を使った変換結果 ---" . PHP_EOL; 41 42if (isset($config['Server']['memory_limit'])) { 43 $memoryLimitShorthand = $config['Server']['memory_limit']; 44 $memoryLimitBytes = ini_parse_quantity($memoryLimitShorthand); 45 echo "メモリ制限 ('{$memoryLimitShorthand}') は {$memoryLimitBytes} バイトです。" . PHP_EOL; 46} 47 48if (isset($config['Server']['upload_max_filesize'])) { 49 $uploadLimitShorthand = $config['Server']['upload_max_filesize']; 50 $uploadLimitBytes = ini_parse_quantity($uploadLimitShorthand); 51 echo "アップロード最大ファイルサイズ ('{$uploadLimitShorthand}') は {$uploadLimitBytes} バイトです。" . PHP_EOL; 52} 53 54if (isset($config['Client']['buffer_size'])) { 55 $bufferSizeShorthand = $config['Client']['buffer_size']; 56 $bufferSizeBytes = ini_parse_quantity($bufferSizeShorthand); 57 echo "バッファサイズ ('{$bufferSizeShorthand}') は {$bufferSizeBytes} バイトです。" . PHP_EOL; 58} 59 60// 5. 作成した一時INIファイルを削除します。 61unlink($iniFileName); 62 63?>
PHPのini_parse_quantity関数は、設定ファイルなどで使われる「256M」(256メガバイト)や「16K」(16キロバイト)のようなショートハンド形式の数値を、正確なバイト単位の整数値に変換するために使用されます。PHPの設定ファイル(php.ini)やアプリケーション独自のINIファイルで、メモリ制限やアップロードファイルサイズなどがこの形式で記述されている場合に特に役立ちます。
この関数は、文字列形式のショートハンド値(引数$shorthand)を受け取り、対応するバイト数を表す整数値(戻り値int)を返します。例えば、「512M」を渡すと536870912というバイト数が得られます。
サンプルコードでは、まずparse_ini_file関数を使って一時的に作成したINIファイルの内容を読み込んでいます。parse_ini_fileが返す設定値はまだショートハンド形式の文字列のままです。次に、これらのショートハンド形式の文字列、例えば'512M'や'128M'、'16K'をini_parse_quantity関数に一つずつ渡し、それぞれを正確なバイト数に変換して表示しています。これにより、プログラムが設定ファイルの値を基に正確なリソース計算や検証を行うことができるようになります。
ini_parse_quantity関数は、PHPのINI設定ファイルなどで使用される「K」「M」「G」のような単位付きの値をバイト数に変換するための専門的な機能です。この関数に不正な形式の文字列を渡すと0が返されるため、入力値の形式が正しいか確認するか、0が返された場合の処理を検討してください。戻り値は整数型(int)ですが、PHPの整数型の範囲を超える非常に大きな値を扱う際には注意が必要です。サンプルコードのようにparse_ini_fileでINIファイルを読み込む際、第二引数にtrueを指定すると、セクションを多次元配列として扱えて便利です。一時ファイルの作成と削除は、プログラムが一時的にファイルを利用する際に、システムをきれいに保つための良い習慣です。