【PHP8.x】ini_set関数の使い方

作成日: 更新日:

ini_set関数は、PHPの実行時設定オプションの値を、スクリプトの実行中に一時的に変更するために使用する関数です。この関数を利用することで、php.iniファイルやWebサーバーの設定に依存することなく、特定のPHPスクリプトの処理中にのみ、PHPの動作をカスタマイズすることが可能になります。

たとえば、開発時にエラーメッセージを画面に表示させたい場合(display_errors)や、ファイルアップロードの最大サイズ(upload_max_filesize)を一時的に変更したい場合などに役立ちます。ini_set関数は、二つの引数を取ります。一つ目は変更したい設定オプションの名前を文字列で、二つ目はそのオプションに設定したい新しい値を文字列で指定します。

この関数で設定された変更は、そのPHPスクリプトの実行が終了すると自動的に元の設定に戻ります。そのため、他のスクリプトやシステム全体に意図しない影響を与える心配はありません。ただし、すべてのPHP設定オプションがini_set関数で変更できるわけではありません。php.iniPHP_INI_USERPHP_INI_ALLとして許可されているオプションのみが対象となります。関数が正常に実行されると、オプションの変更前の値が文字列で返されますが、もし変更に失敗した場合はfalseが返されます。この関数をini_get関数と組み合わせて使用することで、現在の設定値を確認し、より柔軟にPHPの設定を管理できます。

基本的な使い方

構文(syntax)

ini_set('display_errors', 'On');

引数(parameters)

string $option, string|int|float|bool|null $value

  • string $option: 設定したいディレクティブの名前
  • string|int|float|bool|null $value: 設定したいディレクティブの値

戻り値(return)

string|false

ini_set関数は、PHPの設定値を変更するために使用されます。設定が正常に変更された場合は、その設定の古い値が文字列で返されます。設定の変更に失敗した場合は、falseが返されます。

サンプルコード

PHPでメモリ制限を変更する

<?php

/**
 * PHPのini_set関数を使って、スクリプトのメモリ制限を変更する方法を示すサンプルコードです。
 * ini_setで変更された設定は、現在のスクリプトの実行期間中のみ有効です。
 * PHP設定ファイル (php.ini) 自体を変更するわけではありません。
 */
function setScriptMemoryLimit(): void
{
    // 現在の 'memory_limit' の設定値を取得して表示します。
    // ini_get() は、指定された設定オプションの現在の値を返します。
    echo "現在の 'memory_limit': " . ini_get('memory_limit') . PHP_EOL;

    // 新しいメモリ制限を設定します。例えば '256M' (256メガバイト)
    $newMemoryLimit = '256M';

    // ini_set() を使って 'memory_limit' を新しい値に設定します。
    // 成功した場合、以前の値が文字列として返されます。
    // 失敗した場合 (例: セキュリティ制限など)、false が返されます。
    $oldMemoryLimit = ini_set('memory_limit', $newMemoryLimit);

    if ($oldMemoryLimit !== false) {
        echo "スクリプトの 'memory_limit' を '" . $newMemoryLimit . "' に設定しました。" . PHP_EOL;
        echo "以前の 'memory_limit': " . $oldMemoryLimit . PHP_EOL;
        // 変更が適用されたか確認するために、再度 'memory_limit' を取得して表示します。
        echo "新しい 'memory_limit': " . ini_get('memory_limit') . PHP_EOL;
    } else {
        echo "警告: 'memory_limit' を '" . $newMemoryLimit . "' に設定できませんでした。" . PHP_EOL;
        echo "現在の 'memory_limit' は依然として: " . ini_get('memory_limit') . PHP_EOL;
    }

    // 例として、非常に大きな配列を作成しようとしてメモリ使用量を確認できます。
    // ただし、このスクリプトは実際にメモリを大量に消費しません。
    // $largeArray = array_fill(0, 1024 * 1024 * 100, 'a'); // 100MBを消費する可能性のある例
}

// 関数を実行して、メモリ制限の変更処理を開始します。
setScriptMemoryLimit();

?>

PHPのini_set関数は、現在のスクリプトの実行期間中のみ、PHPの設定項目を動的に変更するために使用されます。これにより、php.iniファイルを直接編集することなく、特定のスクリプトの要件に合わせて一時的に設定を調整できます。

この関数は二つの引数を取ります。一つ目の$optionには変更したい設定項目の名前を文字列で指定し、二つ目の$valueにはその設定項目に割り当てる新しい値を、文字列、整数、浮動小数点数、真偽値、またはnullで指定します。例えば、サンプルコードではPHPが使用できるメモリの上限であるmemory_limit'256M'に設定しています。

ini_set関数の実行に成功すると、変更前の設定値が文字列として返されます。セキュリティ上の制限などにより設定変更が許可されなかった場合は、falseが返されます。これにより、設定変更が正しく行われたかどうかを確認できます。変更が適用されたかどうかは、ini_get関数を使って再度設定値を取得することで確認できます。この変更は現在のスクリプトの実行期間中のみ有効で、他のスクリプトや次のHTTPリクエストには影響しません。

ini_set関数は、現在のスクリプトの実行期間中のみPHPの設定を一時的に変更します。php.iniファイル自体は変更されません。設定変更が成功したかは、戻り値がfalseでないことを必ず確認してください。全てのPHP設定がini_setで変更できるわけではなく、サーバー環境によってはセキュリティ上の理由などから制限されている場合があります。特に共有ホスティング環境では、memory_limitの上限が定められていることが多く、設定しても適用されないことがあります。恒久的に設定を変更したい場合は、php.iniファイルを直接編集する必要があります。

【PHP8.x】ini_set関数の使い方 | いっしー@Webエンジニア