PHP Conference Japan 2024

ini_get_all

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

ini_get_all取得所有設定選項

說明

ini_get_all(?字串 $extension = null, 布林值 $details = true): 陣列|false

返回所有已註冊的配置選項。

參數

extension

一個可選的擴展名稱。如果不是 null 或字串 core,則該函數只返回該擴展的特定選項。

details

擷取詳細設定或僅擷取每個設定的目前值。預設值為 true(擷取詳細資訊)。

返回值

返回一個關聯式陣列,其中指令名稱作為陣列鍵。如果 extension 不存在,則返回 false 並引發 E_WARNING 等級的錯誤。

detailstrue(預設值)時,陣列將包含 global_value(在 php.ini 中設定)、local_value(可能使用 ini_set().htaccess 設定)和 access(存取級別)。

detailsfalse 時,該值將為選項的目前值。

有關存取級別含義的資訊,請參閱手冊章節

注意事項:

一個指令可能具有多個存取級別,這就是為什麼 access 會顯示相應的位元遮罩值。

範例

範例 #1 ini_get_all() 範例

<?php
print_r
(ini_get_all("pcre"));
print_r(ini_get_all());
?>

上述範例將輸出類似以下的內容

Array
(
    [pcre.backtrack_limit] => Array
        (
            [global_value] => 100000
            [local_value] => 100000
            [access] => 7
        )

    [pcre.recursion_limit] => Array
        (
            [global_value] => 100000
            [local_value] => 100000
            [access] => 7
        )

)
Array
(
    [allow_call_time_pass_reference] => Array
        (
            [global_value] => 0
            [local_value] => 0
            [access] => 6
        )

    [allow_url_fopen] => Array
        (
            [global_value] => 1
            [local_value] => 1
            [access] => 4
        )

    ...

)

範例 #2 禁用 details

<?php
print_r
(ini_get_all("pcre", false)); // PHP 5.3.0 新增
print_r(ini_get_all(null, false)); // PHP 5.3.0 新增
?>

上述範例將輸出類似以下的內容

Array
(
    [pcre.backtrack_limit] => 100000
    [pcre.recursion_limit] => 100000
)
Array
(
    [allow_call_time_pass_reference] => 0
    [allow_url_fopen] => 1
    ...
)

備註

注意事項:

ini_get_all() 會忽略「陣列」ini 選項,例如 pdo.dsn.*

參見

新增註記

使用者貢獻的註記 5 則註記

justd@ntmailme
21 年前
我猜第三個項目是所需的存取層級(用於在執行期間更改此變數)

常數值 意義
PHP_INI_USER 1 可在使用者腳本中設定項目
PHP_INI_PERDIR 2 可在 php.ini、.htaccess 或 httpd.conf 中設定項目
PHP_INI_SYSTEM 4 可在 php.ini 或 httpd.conf 中設定項目
PHP_INI_ALL 7 可在任何地方設定項目

另請參閱 ini_set() 的文件

Hugo.
pmdumuid at gmail dot com
8 年前
echo recreate_php_ini();

/**
* 範例函式,用於重新建立 php ini 設定檔。
*
* @return string
*/
function recreate_php_ini() {
$a = ini_get_all();

$data = [];
foreach (array_keys($a) as $k) {
$ss = split("\.", $k);
if (count($ss) == 1) {
$sec = "PHP";
$v = $k;
} else {
$sec = $ss[0];
$v = $ss[1];
}
$data[$sec][$v] = $a[$k]['global_value'];
}
ksort($data);
$out = "";
foreach ($data as $sec => $data) {
$out .= "[$sec]\n";
ksort($data);
foreach ($data as $k => $v) {
if (is_numeric($v)) {
$out .= sprintf("%-40s = %s\n", $k, $v);
} else {
$out .= sprintf("%-40s = \"%s\"\n", $k, $v);
}
}
$out .= "\n";
}
return $out;
}
Julien MOREAU aka PixEye
5 年前
如果您想要載入並解析您自己的 ini 檔案,請參考 parse_ini_file() 函式。範例

<?php
// ...
$my_data = parse_ini_file($my_file, true);
peter at peteraba dot com
8 年前
您可以在伺服器上使用以下程式碼片段來擷取正式/測試環境的設定,以便在您的開發環境中複製這些設定。(我使用 `php -a` 來執行此操作)
<?php
foreach (ini_get_all(null, false) as $key => $value) echo "$key=$value;\n";
?>
root at mantoru dot de
16 年前
自特定 PHP 版本(我認為是 5.2.5)之後,不再能夠覆寫在 httpd.conf 中使用 php_admin_* 設定的 INI 項目。存取層級將被設定為 4 (PHP_INI_SYSTEM),此函式也會回傳此值。

以下提到的常數在 PHP 中可用,但不包含前綴(例如 INI_USER、INI_PERDIR)。
To Top