什么';php中的ini_set()的用途是什么?(尤其是错误报告)


What's the purpose of ini_set() in php? (especially for error reporting)

好的,所以PHP有ini_set()函数,很多人都知道它,并将使用它来设置各种配置选项(此处)以帮助开发等。然而,这个函数似乎只在运行时起作用,如果出现任何致命错误或脚本有语法错误,并且无法解析/编译,它就不会起作用。

因此,这样做毫无意义(根据手册):

http://php.net/manual/en/function.ini-set.php

示例

示例#1设置ini选项

<?php
echo ini_get('display_errors');
if (!ini_get('display_errors')) {
    ini_set('display_errors', '1');
}
echo ini_get('display_errors');
?>

我不知道是不是遗漏了什么,php.ini的配置也不正确,但很多时候我都没有错误。对于初学者/大三学生来说,毫无疑问会有很多语法错误(缺少分号、右括号等),并表示大三学生会搜索如何打开错误,假设上面的手动输入是正确的,但在重新运行脚本时,唉,他们没有错误,因为脚本一开始就无法解析/编译。

我知道你可以在php.ini文件中设置display_errors = On,然后重新启动你的web服务器,将所有错误显示在屏幕上(在开发环境中使用它,绝对不是实时的),但删除该函数,只为不同的错误级别配置php.ini文件不是更好吗?

更新:

我知道ini_set不仅仅是用来显示错误的,但如果你在某些脚本/函数/文件中调用ini_set,代码就不太容易管理了,那么使用php.ini做类似的事情不是更有意义吗?

更新

因此,ini文件可以用于设置全局配置选项,当然您会将其用于安全或优化,但是开发人员仍然可以在运行时使用ini_set来覆盖其中一些选项,这可能不是理想的

总结(@Hanky웃Panky):

当一些琐碎的语法错误仍然无法显示时,为什么我可以选择显示错误?

是的,您是对的,最好删除该函数,只为不同的错误级别配置php.ini文件。

但是,只有当你的机器中只有一个项目时,这才是好的,所以,它的所有配置设置都可以在php.ini中完成考虑一下,如果您有多个项目设置的情况。如果你仍然不想在该项目中进行一些设置,它将从php.ini 中获得

因此,对于某些配置设置,建议您只使用ini_set()在项目级别设置它们,而不会反映其他项目。

 string ini_set ( string $varname , string $newvalue );

ini_set的目的是设置给定配置选项的值。这个新值在脚本执行期间由配置选项保留,并在脚本结束时恢复。

设置ini选项的示例

 <?php
echo ini_get('display_errors');
if (!ini_get('display_errors')) {
ini_set('display_errors', '1');
}
echo ini_get('display_errors');
?>

string ini_set ( string $varname , string $newvalue )

基本上ini_set()设置给定配置选项的值。配置选项将在脚本执行期间保留此新值,并在脚本结束时恢复。

用于在脚本运行期间可以配置的所有变量。请浏览下面的链接。

可以在运行时使用ini_set()函数配置其他设置:memory_limit和max_execution_time(来自关于PHP基础知识的ZCE测试部分)。

ini_set--设置配置选项的值。设置给定配置选项的值。配置选项将在脚本执行期间保留这个新值,并在脚本结束时恢复,不使用ini_set(),将使用php.ini文件中的值。

编辑:

你可能会发现这很有帮助:

// Turn off all error reporting
error_reporting(0);
// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);
// Report all PHP errors (see changelog)
error_reporting(E_ALL);
// Report all PHP errors
error_reporting(-1);
// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);