PHP Conference Japan 2024

ini_set

(PHP 4, PHP 5, PHP 7, PHP 8)

ini_set設定組態選項的值

描述

ini_set(string $option, string|int|float|bool|null $value): string|false

設定給定組態選項的值。該組態選項將在指令碼執行期間保留這個新值,並在指令碼結束時還原。

參數

option

並非所有可用的選項都可以使用 ini_set() 變更。在附錄中有所有可用選項的清單。

value

選項的新值。

傳回值

成功時傳回舊值,失敗時傳回 false

更新紀錄

版本 描述
8.1.0 value 現在接受任何純量型別(包含 null)。先前,只接受 string 值。

範例

範例 #1 設定 ini 選項

<?php
echo ini_get('display_errors');

if (!
ini_get('display_errors')) {
ini_set('display_errors', '1');
}

echo
ini_get('display_errors');
?>

參見

新增筆記

使用者貢獻的筆記 13 筆筆記

23
nl-x
10 年前
我曾在某些系統上遇到當嘗試設定在每個主機設定中 php.ini 內設定的設定時,ini_set() 會失敗並傳回 false 的情況。請注意這一點。
22
Tr909 at com dot nospam dot bigfoot
22 年前
[[[編輯註記:是的,這是真的。同樣適用於
register_globals、magic_quotes_gpc 和其他。
]]]

許多設定雖然確實被設定,但在你的指令碼中沒有影響.... 像是 upload_max_filesize 會被設定,但上傳的檔案已經在設定變更之前傳遞到你的 PHP 指令碼。

此外,由 ini_set() 設定的其他設定可能因為這個原因而太晚(post_max_size 等)。
請注意,請嘗試透過 php.ini 或 .htaccess 進行設定。
10
ASchmidt at Anamera dot net
7 年前
在檢查 ini_set() 是否成功時,請記住它在成功時會傳回舊的值 - 這可能是「0」。因此,你不能只比較傳回值 - 你必須檢查「身分」

<?php

// 這不會判斷 ini_set() 是否成功,而是
// 它只測試舊值是否等同於 false
if ( !ini_set( 'display_errors', '1' ) )
throw new
\Exception( '無法設定 display_errors。' );

// 這是判斷是否成功的正確方法
if ( ini_set( 'display_errors', '1' ) === false )
throw new
\Exception( '無法設定 display_errors。' );

?>

這解釋了 ini_set()「總是」似乎會失敗的回報情況!
11
daevid at daevid dot com
18 年前
請小心設定 output_handler,因為你無法使用 ini_set() 來變更它。*嘆氣*

在我的 php.ini 中,我的網頁有這個(而且我想要它)

output_handler = ob_gzhandler

但這會導致我的命令列指令碼直到最後才會顯示輸出。

#!/usr/bin/php -q
<?php
ini_set
('output_handler', 'mb_output_handler');
echo
"\noutput_handler => " . ini_get('output_handler') . "\n";
?>

root@# ./myscript.php
output_handler => ob_gzhandler

顯然(根據 Richard Lynch 的說法)

> 太晚了!
> ob_start() 在此時已經啟動。
> ob_flush() 直到沒有更多的緩衝區。
9
miroslav AT simunic DOT de
22 年前
如果它不是你的伺服器,因此你想向其他使用者隱藏你的 session 變數中的資料,在你的指令碼中使用共用記憶體設定 session.save_handler 非常有用

<?php ini_set('session.save_handler','mm'); ?>

請記住:你必須在每個使用 session 變數的指令碼中,在 "session_start()" 之前設定它,否則 PHP 將找不到它們。
7
anonymous
10 年前
請注意,此函式僅適用於 PHP_INI_ALL 選項!
6
RebootConcepts.com
18 年前
使用 'php_flag' 在 .htaccess 檔案中設定 PHP_INI_PERDIR 設定,如下所示

php_flag register_globals off
php_flag magic_quotes_gpc on
5
Ron Ludwig
18 年前
當你的 ISP 不允許你新增預設的 include 目錄時,擴充 'include_path' 變數可能會很有用

<?php ini_set('include_path',ini_get('include_path').':../includes:'); ?>
4
Nathan
13 年前
請注意 - 在某些情況下,當透過 ini_set 將 zlib.output_compression 設定為 "On" 時,PHP 不會發送 Content-type 標頭,導致瀏覽器輸出亂碼。請改為將其設定為所需的緩衝區大小,這樣會發送正確的標頭。

<?php
ini_set
("zlib.output_compression", 4096);
?>
0
Julien MOREAU aka PixEye
2 年前
若要更改 zend.assertions 或 assert.exception 的值,請嘗試使用 ini_set() 函數,但請注意它可能無法成功。

範例
<?php
$ret
= @ini_set('zend.assertions', '1');
if (
$ret === false) echo 'ini_set() 在第 ', __LINE__, PHP_EOL, ' 行之前失敗';
1
sean at php dot net
20 年前
雖然這不應該放在手冊中,但對於在這個頁面尋找 zend_optimizer.* ini 選項的人來說,應該會很有用,因為它們通常會被安裝。

"zend_optimizer.optimization_level" 和 "zend_optimizer.enable_loader" 選項的資訊可在以下網址找到:

http://www.zend.com/support/user_docs/ZendOptimizer/PDF/ZendOptimizer_UserGuide.pdf
-3
johnzoet at netscape dot com
22 年前
[[[編輯註記:僅僅因為你可以設定某個東西
並不代表它會如預期般運作。這取決於
設定。例如,在執行時設定 register_globals
幾乎沒有用,因為它的工作在你的腳本執行到
那裡時就已經完成了。
]]]

當設定無法在使用者腳本中更改時,ini_set 的回傳值是 "empty",而不是你可能預期的 "false"。
如果你在你的腳本中檢查回傳值是否為 "false",腳本將會繼續處理,即使設定沒有被設定。
布林回傳值用於可以在腳本中更改的設定。否則,將回傳空值。
要測試兩種錯誤情況,請使用

<?php
if (empty($blnResult) or (!$blnResult)) {
echo
"設定無法被設定";
exit;
}
?>
-4
Er.ellison
9 年前
如果你收到一個錯誤訊息,像是
超過 30 秒的最大執行時間

如果你設定 ini_set(max_execution_time, 300);
你的問題將會被解決
請注意,300 代表 300 秒,也就是 5 分鐘,你可以設定其他值!
To Top