PHP中关于php.ini参数优化详解


Posted in PHP onFebruary 28, 2020

PHP引擎php.ini参数优化

无论是apache还是nginx,php.ini都是适合的。而php-fpm.conf适合nginx+fcgi的配置

首先选择产品环境的php.ini(php.ini-production)

/home/oldboy/tools/php-5.3.27/php.ini-development
/home/oldboy/tools/php-5.3.27/php.ini-production

1.打开php的安全模式

php的安全模式是个非常重要的php内嵌的安全机制,能够控制一些php中的函数执行,比如system(),同时把很多文件操作的函数进行了权限控制。
该参数配置如下:
safe_mode = off
;是否启用安全模式
;打开时,php将检查当前脚本的拥有者是否和被操作的文件的拥有者相同。
默认的php.ini是没有打开安全模式的,我们把它打开如下:
safe_mode = On

2.用户组安全

当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问。建议设置为:
safe_mode_gid = off
如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要对文件进行操作的时候。php5.3.27默认为safe_mode_gid = off

3.关闭危险函数

如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的phpinfo()等函数,那么我们就可以禁止它们,方法如下:

disable_functions = system,passthru,exec,shell_exec,popen,phpinfo

disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown

4.关闭php版本信息在http头中的泄漏

为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中。
该参数默认配置如下:
expose_php = On
;是否暴露php被安装在服务器上的事实(在http头重加上其签名)
;它不会有安全上的直接威胁,但它使得客户端知道服务器上安装了php.
建议设置为
expose_php = Off

5.关闭注册全局变量

在php中提交的变量,包括使用post或get提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭:
默认配置:
register_globals = Off
;是否将E,G,P,C,S变量注册为全局变量
;打开该指令可能会导致严重的安全问题,除非你的脚本经过非常仔细的检查。
;推荐使用预定义的超全局变量:$_ENV,$_GET,$_POST,$_COOKIE,$_SERVER
;该指令受variables_order指令的影响。
;php6中已经删除此指令。
建议设置为:
register_globals = Off

6.打开magic_quotes_gpc来防止SQl注入

magic_quotes_pgc = Off
这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把'转义为\'等,这对防止sql注入有重大作用,所以我们推荐设置为:
magic_quotes_pgc = On

7.错误信息控制

一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示。
该参数默认配置如下:
display_errors = Off
;是否将错误信息作为输出的一部分显示给终端用户。应用调试时,可以打开,方便查看错误。
;在最终发布的web站点上,强烈建议你关掉这个特性,并使用错误日志代替(参看下面)。
;在最终发布的web站点打开这个特性可能暴露一些安全信息,
;例如你的web服务器上文件路径、数据库规划或别的信息。
设置为:
display_errors = Off
(php5.3.27默认即为display_errors = Off)
如果你确实是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息:
error_reporting = E_WARING & ERROR
当然,最好是关闭错误提示。

8.错误日志

建议在关闭dispaly_errors后能够把错误信息记录下来,便于查找服务器运行的原因:
log_errors = On
php5.3.27默认即为log_errors = On
同时也要设置错误日志存放的目录,建议根apache的日志存在一起:
error_log = /app/logs/php_error.log
注意:给文件必须允许apache用户的和组具有写的权限

9.部分资源限制参数优化

(1)设置每个脚本运行的最长时间
当无法上传交大的文件或者后台设备数据经常超时,此事需要调整如下设置:
max_execution_time = 30
;每个脚本最大允许执行时间(秒),0表示没有限制。
;这个参数有助于阻止劣质脚本无休止的占用服务器资源。
;该指令仅影响脚本本身的运行时间,任何其他花费在脚本运行之外的时间
;如用system()/sleep()函数的使用、数据库查询、文件上传等,都不包括在内。
;在安全模式下,你不能用ini_set()在运行时改变这个设置。

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

(3)每个脚本等待输入数据最长时间
max_input_time = -1
;每个脚本解析输入数据(POST,GET,upload)的最大允许时间(秒)
;-1表示不限制
设置为
max_input_time = 60;

(4)上传文件的最大许可大小
当上传较大文件时,需要调整如下参数:
upload_max_filesize = 2M;
;上传文件的最大许可大小,一些图片论坛需要这个更大的值。

10.部分安全参数优化

(1)禁止打开远程地址,记得最近出的php include的那个漏洞吗?就是在一个php程序中include了变量,那么入侵者就可以利用这个控制服务器在本地执行远程的一个php程序,例如phpshell,所以我们关闭这个。
allow_url_fopen = Off

(2)设定:cgi.fix_pathinfo=0防止Nginx文件类型错误解析漏洞
cgi.fix_pathinfo=0

11.调整php sesson信息存放类型和位置

session.save_handler = files
;存储和检索与会话关联的数据的处理器名字。默认为文件("files")
;如果想要使用自定义的处理器(如基于数据库的处理器),可用"user"
;设为"memcache"则可以使用memcache作为会话处理器(需要指定"--enable-memcache-session"编译选项)
;session.save_path = "/tmp"
;传递给存储处理器的参数。对于files处理器,此值是创建会话数据文件的路径
参考资料:
LAMP系统性能调优,第1部分:理解LAMP架构
http://www.ibm.com/developerworks/cn/linux/l-tune-lamp-1/
LAMP系统性能调优,第2部分:优化Apache和PHP
http://www.ibm.com/developerworks/cn/linux/l-tune-lamp-2.html
LAMP系统性能调优,第3部分:MySQL服务器调优
http://www.ibm.com/developerworks/cn/linux/l-tune-lamp-3.html

安装memcache客户端

修改配置文件,在php.ini中全局设置:
web集群session共享存储设置:
默认php.ini中session的类型和配置路径:
#session.save_handler = files
#session.save_path = "/tmp"
修改成如下设置:
session.save_handler = memcache
session.save_path = "tcp://10.0.0.18:11211"
提示:
1)10.0.0.18:11211为memcached数据库缓存的IP及端口
2)上述适合LNMP,LAMP环境
3)memcached服务器也可以是多台通过hash调度

使用tmps作为缓存加速缓存的文件目录
mount -t tmpfs tmpfs /dev/shm -o size=256m
mount -t tmpfs /dev/shm/ /tmp/eaccelerator

1.上传图片缩略图临时处理的目录/tmp
2.其他加速器临时目录 /tmp/eaccelerator

以上就是PHP中关于php.ini参数优化详解的详细内容,更多关于PHP引擎php.ini参数优化的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
PHP个人网站架设连环讲(三)
Oct 09 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
让PHP显示Facebook的粉丝数量方法
Jan 08 PHP
PHP实现简单的新闻发布系统实例
Jul 28 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
Sep 23 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
Jun 13 PHP
php实现的mysqldb读写分离操作类示例
Feb 07 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
Apr 04 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
Feb 06 PHP
详解PHP实现支付宝小程序用户授权的工具类
Dec 25 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 #PHP
php 的多进程操作实践案例分析
Feb 28 #PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 #PHP
php的无刷新操作实现方法分析
Feb 28 #PHP
php下的原生ajax请求用法实例分析
Feb 28 #PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 #PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 #PHP
You might like
Discuz 模板引擎的封装类代码
2008/07/18 PHP
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
服务器变量 $_SERVER 的深入解析
2013/07/02 PHP
自己写了一个php检测文件编码的函数
2014/04/21 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
vue-router传参用法详解
2019/01/19 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
Python3之文件读写操作的实例讲解
2018/01/23 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
python 求10个数的平均数实例
2019/12/16 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
成人大专生实习期的自我评价
2013/10/02 职场文书
高中体育教学反思
2014/01/24 职场文书
个人近期表现材料
2014/02/11 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
高中班级口号
2014/06/09 职场文书
党员证明模板
2015/06/19 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL