ini_set无法正常工作

Here is the matter:

ini_set('display_errors', '1');
ini_set('safe_mode', '0');
ini_set('allow_url_fopen', '1');
ini_set('allow_url_include', '1');
print_r(ini_get_all());

And I get:

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

    [allow_url_include] => Array
        (
            [global_value] => 
            [local_value] => 
            [access] => 4
        )

Why I cannot set that variable within the php ini_set function? The directive is specified as PHP_INI_ALL then it can be defined within the ini_set() function! http://php.net/manual/en/ini.list.php

display_errors

may be set at runtime (with ini_set()), but it won't have any affect if the script has fatal errors. This is because the desired runtime action does not get executed.

Use ini_set('display_errors','Off');

safe_mode

This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0. This directive belongs to PHP_INI_SYSTEM and Cannot be set via ini_set()

allow_url_include

Use ini_set('allow_url_include', 'On');

allow_url_fopen

This directive belongs to PHP_INI_SYSTEM and Cannot be set via ini_set()

Have you tried putting boolean values instead of 0 or 1?

ini_set('display_errors', true);
ini_set('safe_mode', false);
ini_set('allow_url_fopen', true);
ini_set('allow_url_include', true);
print_r(ini_get_all());

Or try this:

ini_set('allow_url_include', 'on');

allow_url_fopen can't be modified by ini_set. It's because some ini statements has to be declared in an ini file only.

These variables cannot be changed within a user script. The access value means:

PHP_INI_SYSTEM    4          Entry can be set in php.ini or httpd.conf  

You can try to set it in .htaccess:

php_value  allow_url_include 1

if you get this message in zabbix interface "ini_set(): Use of mbstring.internal_encoding is deprecated"

simply go to file vi /usr/local/share/zabbix/include/locales.inc.php and commet the line

#       ini_set('mbstring.internal_encoding', 'UTF-8');"

restart httpd & zabbix-server daemons , then try.. thats it.!

My answer might be off-topic but I almost always come back to this question via Google when my ini_set calls are not working. Sharing my case might help others to solve a issue with ini_set more quickly.

So, in my case display_errors is disabled but PHP displays the errors in the browser anyway although I enabled log_errors and set error_log to C:\Windows\Temp\PHP_error.log.

First impression is always that ini_set is not working BUT it might be a permission issue. If PHP cannot access the log file then it will simply send the errors to the browser.

Solution: make sure PHP has the permission to access and write the log file.