php.ini配置文件

php.ini配置文件:

engine=On;
使PHP脚本语言引擎在Apache下有效。当设置engine=Off后不能解析PHP文件。


short_open_tag=Off;
设置<? code ?>标志是否能被识别。设置short_open_tag=Off后不能识别在<? code ?>中的代码

asp_tags = Off;
设置<% code %>标志是否能被识别。设置asp_tags==Off;后不能识别。

precision = 14;
设置浮点类型数据显示位数,包括小数点前的。此处表示共显示14位。


y2k_compliance = Off ;
设置是否打开2000年适应。增强兼容性。

output_buffering = Off ;
打开缓存的输出顺序为:
echo,print--->php output_buffering--->server buffering--->brower buffering--->display
未打开缓存顺序:
echo,print--->server buffering---> brower buffering--->display
只有输出数据达到浏览器输出缓存长度或脚本结束时浏览器才会将数据输出到页面上
例:

/////////////////////////////////////////////////////////////////////////////////////////////////////
<?php

for($i==0;$i<5;$i++)
{
echo $i.'----------';
flush();
sleep(1);
}
?>
说明:设置output_buffering = Off;后程序输出有间歇性。

/////////////////////////////////////////////////////////////////////////////////////////////////////
注:
当设置output_buffering = Off ;即没有设置output_buffering时,header()和cookie的
设置必须要在echo、print前面。当有缓存区时可放在后面,当一定要在向浏览器flush()
一次数据之前调用header()
例:

/////////////////////////////////////////////////////////////////////////////////////////////////////
设置output_buffering = Off;
<?php

for($i==0;$i<5;$i++)
{
echo $i.'----------';
}

header("content-type:text/html;charset:utf-8");
?>
结果:----------1----------2----------3----------4---------- Warning: Cannot modify
header information - headers already sent by (output started at
/var/www/html/test.php:5) in /var/www/html/test.php on line 8

output_handler="ob_get_length"
output_handler=
默认为 null , 其值只能设置为一个内置的函数名,作用就是将脚本的所有输出,用所定义的函
数进行处理。

/////////////////////////////////////////////////////////////////////////////////////////////////////


zlib.output_compression=On
zlib.output_compression_level = 5
zlib.output_compression=On用来设置是否开启zlib输出压缩。设置后其会被压缩成gzip格式,
请求头中的accept-encoding变成gzip。
zlib.output_compression_level = 5被用来设置压缩等级。

zlib.output_handler-
与output_handler相同。


implicit_flush=On
强制让输出层在每个输出块之后自动刷新自身数据。等效于在每个echo、print后调用flush()


unserialize_callback_func=
该指令允许您控制当一个请求的响应unserializer实例化一个未定义类。对于大多数用户来说,
这个指令是无关紧要的,因为PHP已经输出一个警告,在这种情况下,如果PHP的错误报告被调整
到合适的水平。


serialize_precision
将浮点型和双精度型数据序列化存储时的精度(有效位数)。默认值能够确保浮点型数据被解序列
化程序解码时不会丢失数据。


allow_call_time_pass_reference
设置是否打开强制通过引用传递参数给函数。此方法已不被赞成并在 PHP/Zend 未来的版本中很
可能不再支持。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。
在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。如果函数的参数没有
声明作为引用传递,函数可以通过未写入文档的方法修改其参数。要避免其副作用,最好仅在函
数声明时指定那个参数需要通过引用传递。
例:

/////////////////////////////////////////////////////////////////////////////////////////////////////
<?php

$num=10;
priNum(&$num);
echo $num;

function priNum($num)
{
echo $num++;
echo '<br>';
}
?>
在allow_call_time_pass_reference =On能正常执行;在
allove_call_time_pass_referencee=Off时会报Emits an E_DEPRECATED level error错误

/////////////////////////////////////////////////////////////////////////////////////////////////////


--------------------------------------------------------
参考:http://php.net/manual/zh/ini.sect.safe-mode.php
--------------------------------------------------------
safe_mode=Off
开启之后,主要会对系统操作、文件、权限设置等方法产生影响.
具体参考:http://blog.csdn.net/tangxi383367315/article/details/7722086


safe_mode_gid=Off
默认情况下,安全模式在打开文件时会做 UID 比较检查。如果想将其放宽到 GID 比较,则打开
safe_mode_gid。是否在文件访问时使用 UID(FALSE)或者 GID(TRUE)来做检查。


safe_mode_include_dir
当从此目录及其子目录(目录必须在 include_path 中或者用完整路径来包含)包含文件时越过
UID/GID 检查。即在此路径中的目录可越过UID/GID的检查。
定的限制实际上是一个前缀,而非一个目录名。这也就是说“safe_mode_include_dir =
/dir/incl”将允许访问“/dir/include”和“/dir/incls”,如果它们存在的话。如果希望将访
问控制在一个指定的目录,那么请在结尾加上一个斜线,例如:“safe_mode_include_dir =
/dir/incl/”。


safe_mode_exec_dir
如果 PHP 使用了安全模式,system() 和其它程序执行函数将拒绝启动不在此目录中的程序。必
须使用 / 作为目录分隔符,包括 Windows 中。
所以如果要在PHP中启动程序,必须要放在此目录下。


safe_mode_allowed_env_vars=PHP_
设置某些环境变量可能是潜在的安全缺口。本指令包含有一个逗号分隔的前缀列表。在安全模式
下,用户只能改变那些名字具有在这里提供的前缀的环境变量。默认情况下,用户只能设置以
PHP_ 开头的环境变量(例如 PHP_FOO = BAR)。
如果本指令为空,PHP 将使用户可以修改任何环境变量!

 

safe_mode_protected_env_vars=LD_LIBRARY_PATH
本指令包含有一个逗号分隔的环境变量的列表,最终用户不能用 putenv() 来改变这些环境变量
。甚至在 safe_mode_allowed_env_vars 中设置了允许修改时也不能改变这些变量。

note:
在phpinfo页面的Environment中可以看到环境变量,在php页面中可通过getenv()得到环境变量值
--------------------------------------------------------


open_basedir=
将用户可操作的文件限制在某目录下。
例:

/////////////////////////////////////////////////////////////////////////////////////////////////////
<?php
readfile("/var/www/html/a.txt");
?>
当未设置open_basedir时正常读出数据;当设置open_basedir=/var/www/html/file_upload时
出现错误Warning: Unknown: open_basedir restriction in effect. File
(/var/www/html/test.php) is not within the allowed path(s):
(/var/www/html/file_upload) in Unknown on line 0 Warning: Unknown: failed to open
stream: Operation not permitted in Unknown on line 0 Fatal error: Unknown: Failed
opening required '/var/www/html/test.php'
(include_path='.:/usr/share/pear:/usr/share/php') in Unknown on line 0

/////////////////////////////////////////////////////////////////////////////////////////////////////


disable_function=getenv
该指令接受一个用逗号分隔的函数名列表,以禁用特定的函数。
例:

/////////////////////////////////////////////////////////////////////////////////////////////////////
当设置disable_function=getenv后
<?php
echo getenv("PATH");
?>
Warning: getenv() has been disabled for security reasons in /var/www/html/test.php on
line 2

/////////////////////////////////////////////////////////////////////////////////////////////////////


disable_classes=
该指令接受一个用逗号分隔的类名列表,以禁用特定的类。与disable_function相同。


highlight.string
可以通过PHP函数highlight_string()使用PHP内置定义的此颜色,打印输出或者返回输出或者返
回语法高亮版本的PHP代码。


ignore_user_abort=Off
启用该参数会让服务器忽略由于用户或浏览器引起的中断所造成的会话终止,也就是说在页面完
全加载之前你就退出或关闭浏览器,服务器还会继续处理下去,不会认为你这边已经终止。这对
于正在更新重要的个人信息或者提交一个商业交易非常有用。


realpath_cache_size=16K
realpath_cache_ttl = 120
参考:http://blog.csdn.net/daiyan_csdn/article/details/51880879
realpath_cache_size指定缓存include()文件的缓存器大小。realpath_cache_ttl缓存过期时间


expose_php=
设置是否在网页头部显示php信息。为了防止黑客获取服务器中php版本的信息,可以关闭该信息
斜路在http头中:expose_php=Off


max_execution_time=30
设置每个脚本最大执行秒数。有时候需要颇多时间才能完成的工作,例如要发送很多电子邮件给
大量收件者,或者要进行繁重的数据分析工作,服务器会在 30 秒后强行中止正在执行的程序,
这时可以用ini_set()函数修改配置参数,如:ini_set("max_execution_time", 1)
注:ini_set()函数可以设置很多配置参数,具体参考http://php.net/manual/zh/ini.list.php


max_input_time=60
设置每个脚本用来分析请求数据的最大限制时间。也可通过ini_set()设置。


max_input_nesting_level=64
设置输入变量的最大嵌套深度。
max_input_nesting_level的值为0时只允许/index.php?a=a&b=b;
max_input_nesting_level的值为1时允许/index.php?a=a&b=b,/index.php?a[a]=aa&a[b]=ab;
例:

/////////////////////////////////////////////////////////////////////////////////////////////////////
test.php文件
<?php
echo '<pre>';
print_r($_GET);
echo '</pre>';
?>
当设置max_input_nesting_level=1时,访问http://123.207.248.54/test.php?a[0][0]=aa&a
[1][0]=dd 结果为:
Array
(
)
当设置max_input_nesting_level=2时,访问http://123.207.248.54/test.php?a[0][0]=aa&a
[1][0]=dd 结果为:
Array
(
[a] => Array
(
[0] => Array
(
[0] => aa
)

[1] => Array
(
[0] => dd
)

)

)

/////////////////////////////////////////////////////////////////////////////////////////////////////


memory_limit=128M
一个脚本所能够申请到的最大内存字节数(可以使用K和M作为单位)。有助于防止劣质脚本消耗
完服务器上的所有内存。如果要取消内存限制,则必须将其设为 -1 。设置了该指令后,
memory_get_usage()函数将变为可用。


error_reporting
设置错误报告级别。


display_errors=Off
错误回显,一般常用语开发模式,但是很多应用在正式环境中也忘记了关闭此选项。错误回显可
以暴露出非常多的敏感信息,为攻击者下一步攻击提供便利。推荐关闭此选项。关闭状态下,若
出现错误,则提示:服务器错误。但是不会现错误提示。
注:display_errors=Off失效


display_startup_errors
设置PHP启动时的错误显示,如:配置文件中有手误导致语法错误/加载的模块版本不匹配等等


log_errors="/var/www/html/php_error_log"
在正式环境下使用,把错误信息记录在日志里。该文件必须对Web服务器用户可写。


log_errors_max_len
设置日志消息的长度而不是设置日志文件的大小。


ignore_repeated_errors
设置是否在同一行中重复显示一样的错误信息。


ignore_repeated_source
设置是否重复显示来自同个文件同行代码的错误


report_memleaks
设置是否报告内存泄漏。这个参数只在以调试方式编译的PHP中起作用,并且必须在
error_reporting指令中包含 E_WARNING


report_zend_debug = On
无说明文档。

track_errors=Off
设置是否在变量$php_errormsg中保存最近一个错误或警告消息。


html_errors=On
是否在出错信息中使用HTML标记。


docref_root="/phpmanual"
docref_ext=".html"
如果打开了html_errors指令,PHP将会在出错信息上显示超连接,直接链接到一个说明这个错误
或者导致这个错误的函数的页面。你可以从http://www.php.net/docs.php下载php手册,并将
docref_root指令指向你本地的手册所在的URL目录。你还必须设置docref_ext指令来指定文件的
扩展名(必须含有''.'')。


error_prepend_string"<font color=#ff0000>"
设置错误信息前输出的字符串。

error_append_string = "</font>"
设置错误信息后输出的字符串。


arg_separator.output = "&"
PHP所产生的URL中用来分隔参数的分隔符。
arg_separator.input="&;&"
PHP解析URL中的变量时使用的分隔符列表。


variables_order="EGPCS"
PHP注册 Environment, GET, POST, Cookie, Server 变量的顺序。分别用 E, G, P, C, S 表示
,按从左到右注册,新值覆盖旧值。 设为"GP"将会导致用POST变量覆盖同名的GET变量,

request_order="GP"
$_REQUEST这个超全局变量的值受php.ini中request_order的影响,在最新的php5.3.x系列 中,
request_order默认值为GP,也就是说默认配置下$_REQUEST只包含$_GET和$_POST而不包括
$_COOKIE。通过 COOKIE就可以提交GLOBALS变量。从而绕过了大多开源程序中的全局变量防御。
因此要将次选项更改为 request_order = "CGP"


register_globals=Off
设置是否将 E, G, P, C, S 变量注册为全局变量。


register_long_arrays=On
设置是否启用旧式的长式数组(HTTP_*_VARS)。


register_argc_argv = On
设置是否声明$argv和$argc全局变量(包含用GET方法的信息)。


auto_globals_jit = On
是否仅在使用到$_SERVER和$_ENV变量时才创建(而不是在脚本一启动时就自动创建)。
如果并未在脚本中使用这两个数组,打开该指令将会获得性能上的提升。
要想该指令生效,必须关闭register_globals和register_long_arrays指令。


post_max_size = 8M
允许的POST数据最大字节长度。此设定也影响到文件上传。如果POST数据超出限制,那么$_POST
和$_FILES将会为空。要上传大文件,该值必须大于upload_max_filesize指令的值。如果启用了
内存限制,那么该值应当小于memory_limit指令的值。


magic_quotes_gpc = On
是否对输入的GET/POST/Cookie数据使用自动字符串转义( '' "  NULL )。这里的设置将自动
影响 $_GEST $_POST $_COOKIE 数组的值。若将本指令与magic_quotes_sybase指令同时打开,则
仅将单引号('')转义为(''''),其它特殊字符将不被转义,即( "  NULL )将保持原样。


magic_quotes_runtime = Off
是否对运行时从外部资源产生的数据使用自动字符串转义( '' "  NULL )。
若打开本指令,则大多数函数从外部资源(数据库,文本文件等)返回数据都将被转义。


magic_quotes_sybase = Off
是否采用Sybase形式的自动字符串转义(用 '''' 表示 '')


auto_prepend_file =
auto_append_file =
指定在主文件之前/后自动解析的文件名。为空表示禁用该特性。
该文件就像调用了include()函数被包含进来一样,因此会使用include_path指令的值。


default_mimetype = "text/html"
;default_charset = "iso-8859-1"
自动输出"Content-Type: text/html; charset=iso-8859-1"。


always_populate_raw_post_data=Off
是否总是生成$HTTP_RAW_POST_DATA变量(原始POST数据)。


include_path=".:/php/includes"
指定一组目录用于require(), include(), fopen_with_path()函数寻找文件。


doc_root=
PHP的"根目录"。仅在非空时有效。
如果safe_mode=On,则此目录之外的文件一概被拒绝。


user_dir =
告诉php在使用 /~username 打开脚本时到哪个目录下去找,仅在非空时有效。也就是在用户目录
之下使用PHP文件的基本目录名.


extension_dir="./"
存放扩展库(模块)的目录,也就是PHP用来寻找动态扩展模块的目录。


enable_dl=On
是否允许使用dl()函数。dl()函数仅在将PHP作为apache模块安装时才有效。
禁用dl()函数主要是出于安全考虑,因为它可以绕过open_basedir指令的限制。
在安全模式下始终禁用dl()函数,而不管此处如何设置。


cgi.nph = Off
在CGI模式下是否强制对所有请求都发送"Status: 200"状态码。


fastcgi.impersonate = Off
IIS中的FastCGI支持模仿客户端安全令牌的能力。这使得IIS能够定义运行时所基于的请求的安全
上下文。Apache中的mod_fastcgi不支持此特性(03/17/2002)如果在IIS中运行则设为On,默认为
Off。


file_uploads = On
是否允许HTTP文件上传。


upload_tmp_dir =
文件上传时存放文件的临时目录(必须是PHP进程用户可写的目录)。
如果未指定则PHP使用系统默认的临时目录。


upload_max_filesize = 2M
允许上传的文件的最大尺寸。


allow_url_fopen = On
是否允许打开远程文件.


allow_url_include = Off
是否允许include/require远程文件。


from=""
定义匿名ftp的密码


user_agent="PHP"
表示通过PHP脚本访问网络

default_socket_timeout=60
默认socket超时时间。


auto_detect_line_endings = Off
是否让PHP自动侦测行结束符(EOL)。


date.timezone=
未设定TZ环境变量时用于所有日期和时间函数的默认时区。


date.default_latitude=
date.default_longitude=
date.sunrise_zenith =
date.sunset_zenith=
默认经纬度,日出日落天顶。


filter.default=
开启了这项配置后,会自动使用filter_input方法对$_GET, $_POST, $_COOKIE, $_REQUEST以及
$_SERVER变量进行过滤转义。


filter.default_flags
设置过滤器的标志。默认情况下,该配置被设置为 'FILTER_FLAG_NO_ENCODE_QUOTES',为了向后
兼容。查看所有的 'flag列表.


sql.safe_mode = Off
设置是否使用SQL安全模式。
如果打开,指定默认值的数据库连接函数将会使用这些默认值代替支持的参数。


mysql.allow_persistent = On
设置是否允许或禁止持久连接


mysql.max_persistent=-1
持久连接的最大数 -1代表无限制


mysql.max_links = -1
每个进程中允许的最大连接数(持久和非持久),-1代表无限制


mysql.default_port =
链接到MYSQL的端口。
如果没有指定,将按如下顺序寻找
(1)$MYSQL_TCP_PORT环境变量
(2)/etc/services文件中的mysql-tcp项(unix)
(3)编译时指定的MYSQL_PORT常量


mysql.default_socket =
连接到本机mysql服务器时所使用的默认套接名字,若未指定则使用内置的mysql默认值

 

mysql.default_host =
连接到MySQL数据库时使用的默认主机。安全模式下无效


mysql.default_user =
连接到MySQL数据库时使用的默认用户名。安全模式下无效


mysql.default_password =
连接到MySQL数据库时使用的默认密码。安全模式下无效


mysql.connect_timeout = 60
连接超时设置

mysqli.reconnect = Off
设置是否允许重连接


session.save_handler = "files"
存储和检索与会话关联的数据的处理器名字。默认为文件("files")。
如果想要使用自定义的处理器(如基于数据库的处理器),可用"user"。


session.save_path = "/tmp"
传递给存储处理器的参数。对于files处理器,此值是创建会话数据文件的路径。


session.use_cookies
控制客户端保存SessionID时使用哪一种方式,当它为“1”时,就说明启动了session cookie(
初始值为1)可以使用上面我们提到的函数来查询得到目前的session id:echo $_COOKIE
["PHPSESSID"];但是,如果client的浏览器不支持cookie的话,即使session.use_cookies这个参
数的值等于“1”,用上述的查询也只会得到null。


session.use_only_cookies=1
这个选项允许管理员去保护那些在URL中传送session id的用户免于被攻击


session.name=PHPSESSID
session的名称 (作为cookie名称来使用)。保存在client的浏览器cookie中


session.auto_start = 0
在请求开始的时候初始化session.


session.cookie_lifetime = 0
cookie的生存秒数,或者如果为0就直到浏览器重启.

session.cookie_path = /
cookie的有效路径


session.cookie_domain =
cookie的有效的域名。


session.cookie_httponly
是否将httpOnly标志增加到cookie上, 增加后则cookie无法被浏览器的脚本语言(例如
JavaScript)存取.

session.serialize_handler = php
用于序列化数据的处理器. php是标准的PHP序列化器.


session.gc_probability = 1
session.gc_divisor = 100
定义'垃圾回收'进程在每次session初始化时开始的比例. 比例由 gc_probability/gc_divisor来
得出, 例如. 1/100 意味着在每次请求时有1%的机会启动'垃圾回收'进程.


session.gc_maxlifetime =1400
在经过以下秒数之后, 存储的数据会被认为是'垃圾'并且被垃圾回收进程清理掉.


session.bug_compat_42 =
session.bug_compat_warn=
php4.2 和更早版本有一个未公开的 特性/bug , 此特性允许你在全局初始化一个session变量,即
便 register_globals 已经被关闭. 如果此特性被使用,PHP 4.3 和更早版本会警告你. 你可以关
闭此特性并且隔离此警告. 这时候,如果打开bug_compat_42,那此警告只是被显示出来


session.referer_check =
检查HTTP Referer来防止带有id的外部URL. HTTP_REFERER 必须包含从session来的这个字段才会
被认为是合法的.


session.entropy_length = 0
从此文件读取多少字节.

session.entropy_file =
在这里指定创建session id.


session.cache_limiter = nocache
设置为 {nocache,private,public,} 来决定HTTP缓冲的类型 留空则防止发送 anti-caching 头.


session.cache_expire = 180
设置文档在180分钟之后过期.


session.hash_function = 0
选择hash方法,0表示MD5,1表示SHA-1

session.hash_bits_per_character = 5
当转换二进制hash数据到可读形式时,每个字符保存时有几位.
4 bits: 0-9, a-f
5 bits: 0-9, a-v
6 bits: 0-9, a-z, A-Z, "-", ","

 

session.use_trans_sid=1

当客户端浏览器的cookie被禁的时候,自动通过地址栏传输session_id的值

SESSION的保存依赖COOKIE,故若客户端禁用COOKIE时,不同页面获得的PHPSESSID不同或者获取 

不到SESSIONID,故PHP不能用PHPSESSID获得保存在SESSION文件中的值。
故当客户端浏览器禁用COOKIE后,可以用URL传PHPSESSID以保证session能正常使用。
修改php.ini文件:
session.use_trans_sid=1//表示打开url传phpsessid
session.use_only_cookies=0//将只开启COOKIE和SESSION的会话方式关闭
session.use_cookies=1//表示使用cookie
后就可以在url中自动传PHPSESSID了
注:
1、若设置session.use_only_cookies=1时,不能使用URL传PHPSESSID
2、也可以在a标签的href中强制加上?PHPSESSID=来强制传值
例:

/////////////////////////////////////////////////////////////////////////////////////////////////////
test.php
<?php
session_start();
echo session_id();
echo $_SESSION['name'];
?>
te.php
<?php
session_start();
$sid=session_id();
echo session_id();
$_SESSION['name']='caowen';
$_SESSION['favourite']='caowen';
echo "<a href=test.php>test</a>";
//或echo "<a href=test.php?PHPSESSID=$sid>test</a>";
?>

/////////////////////////////////////////////////////////////////////////////////////////////////////
assert.active=On
设置断言(expr)是否打开.


assert.warning = On
对于每个失败断言发起一个PHP警告.


assert.bail = Off
是否保密


assert.callback = 0
如果断言失败则调用用户自定义函数.


assert.quiet_eval = 0
使用当前 error_reporting() Eval一个表达式. 如果你想要在eval()附近error_reporting(0) ,
那设置为true.


com.typelib_file =
包含GUID,IID或者TypeLibs的文件的文件名的文件的路径


com.allow_dcom = true
允许 Distributed-COM 调用


com.autoregister_typelib = true
自动注册位于com_load()函数的组件typlib的常量


com.autoregister_casesensitive = false
注册常量大小写敏感


com.autoregister_verbose = true
当有重复常量注册时显示警告


mbstring.language = Japanese
内部字符表示的语言.


mbstring.internal_encoding = EUC-JP
部分编码无法作为内部编码使用.


mbstring.http_input = auto http
输入编码.


mbstring.encoding_translation = Off
按照mbstring.internal_encoding的设置打开自动编码转换。当设置为On时,输入字符被转换为内
部编码.


mbstring.detect_order = auto
自动编码检测序列


mbstring.substitute_character = none;
当无法将字符从一种转换到另一种时使用的置换符号


gd.jpeg_ignore_warning =0
告知jpeg解码器libjpeg警告并且尝试创建一个gd图像. 此警告会被作为一个通告显示


soap.wsdl_cache_dir="/tmp"
设置SOAP扩展存放缓冲文件的目录.


soap.wsdl_cache_ttl=86400
设置当缓冲文件被用来替换原有缓冲文件的秒数.

 

PHP安全配置:
参考:http://www.thinkphp.cn/code/1015.html

posted @ 2017-08-06 21:22  第五  阅读(756)  评论(0编辑  收藏  举报