PHP 选项/信息 函数
在线手册:中文 英文
PHP手册

ini_get

(PHP 4, PHP 5)

ini_getGets the value of a configuration option

说明

string ini_get ( string $varname )

Returns the value of the configuration option on success.

参数

varname

The configuration option name.

返回值

Returns the value of the configuration option as a string on success, or an empty string for null values. Returns FALSE if the configuration option doesn't exist.

范例

Example #1 A few ini_get() examples

<?php
/*
Our php.ini contains the following settings:

display_errors = On
register_globals = Off
post_max_size = 8M
*/

echo 'display_errors = ' ini_get('display_errors') . "\n";
echo 
'register_globals = ' ini_get('register_globals') . "\n";
echo 
'post_max_size = ' ini_get('post_max_size') . "\n";
echo 
'post_max_size+1 = ' . (ini_get('post_max_size')+1) . "\n";
echo 
'post_max_size in bytes = ' return_bytes(ini_get('post_max_size'));

function 
return_bytes($val) {
    
$val trim($val);
    
$last strtolower($val[strlen($val)-1]);
    switch(
$last) {
        
// The 'G' modifier is available since PHP 5.1.0
        
case 'g':
            
$val *= 1024;
        case 
'm':
            
$val *= 1024;
        case 
'k':
            
$val *= 1024;
    }

    return 
$val;
}

?>

以上例程的输出类似于:


display_errors = 1
register_globals = 0
post_max_size = 8M
post_max_size+1 = 9
post_max_size in bytes = 8388608

注释

Note: When querying boolean values

A boolean ini value of off will be returned as an empty string or "0" while a boolean ini value of on will be returned as "1". The function can also return the literal string of INI value.

Note: When querying memory size values

Many ini memory size values, such as upload_max_filesize, are stored in the php.ini file in shorthand notation. ini_get() will return the exact string stored in the php.ini file and NOT its integer equivalent. Attempting normal arithmetic functions on these values will not have otherwise expected results. The example above shows one way to convert shorthand notation into bytes, much like how the PHP source does it.

参见


PHP 选项/信息 函数
在线手册:中文 英文
PHP手册
PHP手册 - N: Gets the value of a configuration option

用户评论:

Ivo Mandalski (15-Nov-2011 04:27)

This version of return_bytes takes care of the MB, GB, KB cases along with the M,G,K ones.
Hope this is helpful!

<?php
   
public static function return_bytes ($val)
    {
        if(empty(
$val))return 0;

       
$val = trim($val);

       
preg_match('#([0-9]+)[\s]*([a-z]+)#i', $val, $matches);

       
$last = '';
        if(isset(
$matches[2])){
           
$last = $matches[2];
        }

        if(isset(
$matches[1])){
           
$val = (int) $matches[1];
        }

        switch (
strtolower($last))
        {
            case
'g':
            case
'gb':
               
$val *= 1024;
            case
'm':
            case
'mb':
               
$val *= 1024;
            case
'k':
            case
'kb':
               
$val *= 1024;
        }

        return (int)
$val;
    }
?>

Stas Trefilov, OpteamIS (26-Mar-2010 06:08)

another version of return_bytes which returns faster and does not use multiple multiplications (sorry:). even if it is resolved at compile time it is not a good practice;
no local variables are allocated;
the trim() is omitted (php already trimmed values when reading php.ini file);
strtolower() is replaced by second case which wins us one more function call for the price of doubling the number of cases to process (may slower the worst-case scenario when ariving to default: takes six comparisons instead of three comparisons and a function call);
cases are ordered by most frequent goes first (uppercase M-values being the default sizes);
specs say we must handle integer sizes so float values are converted to integers and 0.8G becomes 0;
'Gb', 'Mb', 'Kb' shorthand byte options are not implemented since are not in specs, see
http://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes

<?php
function return_bytes ($size_str)
{
    switch (
substr ($size_str, -1))
    {
        case
'M': case 'm': return (int)$size_str * 1048576;
        case
'K': case 'k': return (int)$size_str * 1024;
        case
'G': case 'g': return (int)$size_str * 1073741824;
        default: return
$size_str;
    }
}
?>

nicolas dot grekas+php at gmail dot com (19-Aug-2009 06:51)

Here is how to accurately test for boolean php.ini values:

<?php

function ini_get_bool($a)
{
   
$b = ini_get($a);

    switch (
strtolower($b))
    {
    case
'on':
    case
'yes':
    case
'true':
        return
'assert.active' !== $a;

    case
'stdout':
    case
'stderr':
        return
'display_errors' === $a;

    default:
        return (bool) (int)
$b;
    }
}

?>

Nathaniel Sabanski (15-Mar-2009 10:20)

Here's a simplified version of return_bytes() that does not rely on non-breaking cases and variable variables.

<?php

function return_bytes($val)
{
   
$val = trim($val);
   
$last = strtolower(substr($val, -1));
   
    if(
$last == 'g')
       
$val = $val*1024*1024*1024;
    if(
$last == 'm')
       
$val = $val*1024*1024;
    if(
$last == 'k')
       
$val = $val*1024;
       
    return
$val;
}

?>

peter (29-Jul-2008 10:25)

The above example function called return_bytes() assumes that ini_get('upload_max_filesize') delivers only one letter at the end. As I've seen 'Mb' and things like that, I'd suggest to change the $last = ... part into $last = strtolower(substr($val,strlen($val/1),1)).
I'd call it $unit then.

filh at filh dot org (21-Nov-2005 02:24)

Concerning the value retourned, it depends on how you set it.
I had the problem with horde-3 which test the safe_mode value.
THan :
- if you set the value with php_admin_value safe_mode Off (or On) ini_get returns the string
- if you set the value with php_admin_flag safe_mode Off (or On) ini_get returns the boolean.

(01-Nov-2005 07:16)

Important: The manual says that ini_get will return 0 or an empty string for boolean config values that are set to off in php.ini.

This is technically correct, however when you use

php_value register_globals off

in an .htaccess file, ini_get will return the string, which will "evaluate" to 1. So if you are using mod_php you have to check boolean config values against the strings (upper/lowercase etc.) anyhow or you will get wrong results.

david dot tulloh at infaze dot com dot au (22-Jun-2005 03:01)

You can set custom entries in the ini file to provide globals such as database details.
However these must be retrieved with get_cfg_var, ini_get won't work.

Der Graph (16-Aug-2004 07:59)

It might be useful for included scripts that include other files to extend the 'include_path' variable:

<?php ini_set('include_path',ini_get('include_path').':../includes:');  ?>

Sometimes, it may also be useful to store the current 'include_path' in a variable, overwrite it, include, and then restore the old 'include_path'.

fbeyer at <nospam>clickhand dot de (13-Aug-2002 03:29)

If you want to test ini flags (eg. On/Off), I recommend to explicitly cast the value returned by ini_get() to boolean - it is cleaner as you only get true or false, not 0 or 1 or "" as described above.

<?php
    $register_globals
= (bool) ini_get('register_gobals');
?>

C fans may of course also cast it to (int) to play with 0 and 1 - that's also cleaner to print().