@Webmaster at GrimChild dot com
Your suggestion to simply strip the [gmk] letters would actually be very unpredictable since you no longer know the magnitude of the number. Therefore if you have 8K and 8M they would be both equal after your function. Also the following would be incorrect:
<?php
// Incorrect code
function parse_size($size) {
return eregi_replace('[gmk]','',$size);
}
//Check that we have at least 4M of post space
// assume post_max_size = 16K
if(parse_size(ini_get('post_max_size')) < parse_size("4M")) {
die('Error: this script requires more than 4M of post space');
}
?>
As you can see in this scenario the functions would return 16 and 4 respectively, allowing the check to succeed with less memory than 4M.
ini_get
(PHP 4, PHP 5)
ini_get — 設定オプションの値を得る
説明
string ini_get ( string varname )成功時に設定オプションの値を返し、失敗時(例えば存在しない値等)の場合に 空の文字列を返します。
boolean 値を探す場合: offというbooleanのini値は空文字列または"0"として返されます。 一方でonのini値は"1"として返されます。
メモリサイズの値を探す場合: upload_max_filesize のようなメモリサイズの値の場合、 php.ini上で省略形で格納されています。 ini_get()はphp.iniに格納されている値を そのままの形式で返します。整数表現に変換したりはしません。 これらの値に通常の算術的な関数を施すと予期しない結果を 得てしまいます。以下では、省略形の表記から本来のバイト数に変換する PHP ソースのひとつの例を示しています。
例 1732. ini_get() のいくつかの例
<?php
/*
php.ini の設定は以下のようになっている:
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) {
// 'G' は、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
get_cfg_var(), ini_get_all(), ini_restore(), および ini_set() も参照してください。
ini_get
petrov dot michael at gmail dot com
26-Sep-2006 03:40
26-Sep-2006 03:40
Webmaster at GrimChild dot com
20-May-2006 03:34
20-May-2006 03:34
Just thought I would add.
Very simple way of parsing data such as post_max_size
eregi_replace('[gmk]','',ini_get('post_max_size'));
filh at filh dot org
21-Nov-2005 11:24
21-Nov-2005 11: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.
09-Nov-2005 06:56
@marcus at synchromedia dot co dot uk
you misunderstood the comment. Of course you can use on and off, and they will work correctly.
But this entry is about *ini_get*. And if you ini_get() a value that is set to "off" in php.ini, you get returned 0 (as described above in the documentation). If you ini_get() a value that is set to "off" via .htaccess, you will be returned the string "off", which - if you use it in an if-clause, will be autoconverted to 1 (as is usual for strings).
So the problem is that which is returned by ini_get(), not what you can and cannot use in .htaccess. Sorry being unclear about this.
marcus at synchromedia dot co dot uk
05-Nov-2005 06:21
05-Nov-2005 06:21
The last comment about setting values in .htaccess is not right. These lines both result in display_errors being turned off:
php_value display_errors true
php_value display_errors off
So PHP does NOT coerce the value into a boolean, but it checks for exact values of the string. These both work:
php_value display_errors on
php_value display_errors 1
01-Nov-2005 04: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 11:01
22-Jun-2005 11: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
17-Aug-2004 03:59
17-Aug-2004 03:59
It might be useful for included scripts that include other files to extend the 'include_path' variable:
<? 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 11:29
13-Aug-2002 11: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().