更改php和nginx对上传文件的限制+php应禁用的高危函数

本文详细介绍了php.ini文件中关于文件大小及时间限制的配置项,如post_max_size、upload_max_filesize等,以及禁用的潜在危险函数列表。同时涵盖了nginx配置文件nginx.conf中的关键设置,如-client_max_body_size。

php.ini文件大小时间限制

  • post _max_size = 60m 可接受最大post数据(表单提交最大数据包括标题内容附件等)
  • file_uploads = On允许上传
  • upload_max_filesize = 50m允许上传单个文件最大值
  • max_execution_time = 300上传文件最大等待时间
  • max_input_time = 600

php.ini文件禁用危险函数

disable_functions = 
phpinfo,#php环境信息 
passthru,#允许执行一个外部程序并回显输出类似exec()
exec,#允许执行外部程序shell cmd等
system,#允许执行一个外部程序并回显输出,类似于 passthru()
chroot,#可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式
scandir,#列出指定路径中的文件和目录
chgrp,#改变文件或目录所属的用户组
chown,#改变文件或目录的属主
shell_exec,#通过shell执行命令并将结果作为字符串返回
proc_open,#执行一个命令并打开文件指针用于读取以及写入
proc_get_status,#获取使用 proc_open() 所打开进程的信息
ini_alter,#是 ini_set() 函数的一个别名函数,功能与 ini_set() 相同
ini_alter,#可用于修改、设置 PHP 环境配置参数
ini_restore,#可用于恢复 PHP 环境配置参数到其初始值
dl,#在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块
openlog,
syslog,#可调用 UNIX 系统的系统层 syslog() 函数
readlink,
symlink,#在 UNIX 系统中建立一个符号链接
popepassthru,
stream_socket_server,#建立一个 Internet 或 UNIX 服务器连接
escapeshellcmd,
dll,
popen,
disk_free_space,
checkdnsrr,
checkdnsrr,
getservbyname,
getservbyport,
disk_total_space,
posix_ctermid,
posix_get_last_error,
posix_getcwd,
posix_getegid,
posix_geteuid,
posix_getgid90, 
posix_getgrgid,
posix_getgrnam,
posix_getgroups,
posix_getlogin,
posix_getpgid,
posix_getpgrp,
posix_getpid, 
posix_getppid,
posix_getpwnam,
posix_getpwuid,
posix_getrlimit,
posix_getsid,
posix_getuid,
posix_isatty,
posix_kill,
posix_mkfifo,
posix_setegid,
posix_seteuid,
posix_setgid, 
posix_setpgid,
posix_setsid,
osix_setuid,
posix_strerror,
posix_times,
posix_ttyname,
posix_uname

nginx配置文件nginx.conf

可加在http{}段,可加server{}段,可加在locatio{}段
区别:
http控制所有nginx收到的请求
server控制server收到的请求
location控制location收到的请求
- client_max_body_size 50m;限制上传文件大小
- server_tokens off;关闭版本号

<think>好的,用户现在问的是安装PHP扩展依赖有什么用,他们已经确认PHPMySQL的版本都正常显示了。首先,我需要回顾之前的对话,用户是在内网搭建测试环境,使用CentOS 7.9,宝塔面板,LNMP环境,包括Nginx 1.26,MySQL 5.7,PHP 8.0phpMyAdmin 5.1。之前我给他们提供了详细的部署步骤,包括环境验证、数据库配置、项目部署、安全加固等。现在他们的PHPMySQL版本都正常,但可能在实际部署项目时遇到了需要安装扩展的情况,所以想知道这些扩展的作用。 用户可能是在部署具体用时,比如Laravel或者其他PHP框架,遇到了缺少某些扩展的错误提示,所以才会问这个问题。他们的深层需求可能是理解为什么需要这些扩展,以及如何确保他们的环境能够支持项目的正常运行。 首先,我需要解释PHP扩展的基本作用,然后分点列出常见的扩展及其用途,比如pdo_mysql用于数据库连接,mbstring处理多字节字符串,openssl用于加密等。还要提到框架库的依赖,比如Laravel需要opensslmbstring。另外,可能涉及性能优化,比如OPcache,以及特定功能需求,如图像处理的gd扩展。 然后,需要给出检查扩展的方法,比如使用php -m或者phpinfo(),以及如何通过宝塔面板安装扩展。可能还要提醒用户根据项目文档确认所需扩展,避免遗漏。 需要确保回答结构清晰,分点说明,用例子让用户更容易理解。同时,语言要简洁,避免技术术语过多,但又要准确。可能需要提醒用户,即使PHPMySQL版本正确,缺少扩展也会导致用无法运行,所以安装扩展是必要的步骤。</think>### 一、**PHP扩展的核心作用** PHP扩展本质上是为PHP核心功能添加的 **模块化增强组件**。即使PHP本身能正常运行,但若缺少特定扩展,会导致项目功能异常或完全无法运行。 --- ### 二、**常见扩展的用途详解** #### 1. **数据库连接类扩展** - **pdo_mysql**: 提供PHP与MySQL数据库的 **标准化连接接口**(PDO)。 **典型错误**: ```php SQLSTATE[HY000] [2002] No such file or directory ``` > *若未安装此扩展,Laravel等框架无法连接MySQL* #### 2. **字符处理类扩展** - **mbstring**: 支持多字节字符集(如中文、日文),解决 `strlen()` 对UTF-8返回错误长度的问题。 **典型场景**: ```php // 没有mbstring时: echo strlen("你好"); // 输出6(错误) // 安装后使用mb_strlen: echo mb_strlen("你好", 'UTF-8'); // 输出2(正确) ``` #### 3. **安全通信类扩展** - **openssl**: 支持HTTPS加密通信、JWT令牌生成等安全操作。 **依赖场景**: ```php // 生成加密签名时会报错: openssl_sign(...); // 调用失败提示函数不存在 ``` #### 4. **文件处理类扩展** - **fileinfo**: 用于检测文件MIME类型,未安装时文件上传功能会报错: ```php finfo_open(): Failed to open magic database ``` #### 5. **缓存加速类扩展** - **OPcache**: 将预编译的PHP脚本字节码缓存到内存中,可提升 **40%+ 的执行速度**。 **验证方法**: ```bash php -i | grep opcache.enable ``` --- ### 三、**框架与库的强依赖** #### 1. **Laravel框架最低扩展要求** ```php // 框架启动时会自动检测: if (!extension_loaded('openssl')) { die('缺少openssl扩展'); } ``` - **必须扩展**:`openssl`, `pdo_mysql`, `mbstring`, `tokenizer`, `xml`, `ctype`, `json` #### 2. **WordPress等CMS的扩展需求** - **gd扩展**:图片裁剪/水印功能 - **zip扩展**:主题/插件自动更新 --- ### 四、**扩展管理实践指南** #### 1. **检查已安装扩展** ```bash php -m # 命令行查看 # 或创建phpinfo.php文件 echo "<?php phpinfo();" > /www/wwwroot/test/phpinfo.php ``` #### 2. **宝塔面板安装扩展** ``` 宝塔面板 → PHP-8.0 → 安装扩展 → 勾选所需扩展 → 重启PHP ``` #### 3. **手动编译安装示例(特殊扩展)** ```bash # 例如安装redis扩展: cd /tmp wget https://pecl.php.net/get/redis-5.3.7.tgz tar zxvf redis-5.3.7.tgz cd redis-5.3.7 phpize ./configure --with-php-config=/www/server/php/80/bin/php-config make && make install ``` --- ### 五、**扩展缺失的典型故障** #### 1. **数据库连接失败** ```log # Laravel日志错误提示 PDOException: could not find driver ``` **解决方案**:安装`pdo_mysql`扩展 #### 2. **页面显示空白** ```log # 无错误提示但页面全白 ``` **可能原因**:`mbstring`或`openssl`扩展未加载 --- ### 六、**扩展选择原则** 1. **按需安装**:根据项目文档要求选择扩展 2. **性能平衡**:例如`xdebug`调试扩展在测试环境使用,生产环境关闭 3. **安全加固**:禁用高危扩展如`exec`(通过`disable_functions`配置) --- **总结**:PHP扩展如同汽车的零部件——发动机(PHP核心)能启动,但缺少轮胎(扩展)则无法正常行驶。建议通过 `composer check-platform-reqs` 命令自动检测项目依赖的扩展环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值