lnmp -- 解决Warning: scandir() has been disabled for security reasons in…的问题

本文介绍了LNMP0.9环境中部分PHP函数被禁用的原因及解决方案,涉及的函数包括passthru、exec等。通过编辑PHP配置文件并重启PHP服务即可解除特定函数的禁用。

原因:LNMP 0.9禁用了部分存在危险的PHP函数

LNMP0.9禁用的PHP函数包括:passthru, exec, system, chroot, scandir, chgrp, chown, shell_exec, proc_open, proc_get_status, ini_alter, ini_alter, ini_restore, dl, pfsockopen ,openlog, syslog, readlink, symlink, popepassthru, stream_socket_server, fsocket, fsockopen

解决方法:
lnmp环境中编辑PHP配置文件:

  1. vi /usr/local/php/etc/php.ini进入编辑状态

  2. 输入/,进入搜索模式,找到disable_functions

  3. 寻找disable_functions字符串,将后面的scandir删除

重启PHP生效

/etc/init.d/php-fpm restart

root@yfw ~]# cd /www/wwwroot/szrengjing.com [root@yfw szrengjing.com]# chmod +x check_website.sh [root@yfw szrengjing.com]# ./check_website.sh [2025-11-09 01:34:37] 开始检测网站: szrengjing.com [2025-11-09 01:34:37] 步骤1: 检查域名 DNS 解析 [2025-11-09 01:34:37] ✅ 域名解析成功 -> IP: 124.71.230.244 [2025-11-09 01:34:37] 步骤2: 检查网络连通性 (ping) [2025-11-09 01:34:50] ❌ Ping 失败!服务器无法到达(防火墙可能屏蔽 ICMP) [2025-11-09 01:34:50] 步骤3.80: 检测端口 80 是否开放 [2025-11-09 01:34:50] ✅ 端口 80 开放 [2025-11-09 01:34:50] 步骤3.443: 检测端口 443 是否开放 [2025-11-09 01:34:50] ✅ 端口 443 开放 [2025-11-09 01:34:50] 步骤4: 尝试请求 http://szrengjing.com [2025-11-09 01:34:50] ✅ http 返回 HTTP 状态码: 500 [2025-11-09 01:34:50] ❌ HTTP 错误: 500 [2025-11-09 01:34:50] 步骤4: 尝试请求 https://szrengjing.com [2025-11-09 01:34:50] ✅ https 返回 HTTP 状态码: 500 [2025-11-09 01:34:50] ❌ HTTP 错误: 500 [2025-11-09 01:34:50] [2025-11-09 01:34:50] 🔍 最终诊断总结: [2025-11-09 01:34:50] • 域名: szrengjing.com -> 124.71.230.244 [2025-11-09 01:35:00] • Ping: 不通 [2025-11-09 01:35:00] • HTTP: 200 OK [2025-11-09 01:35:00] • HTTPS: 200 OK [2025-11-09 01:35:00] [2025-11-09 01:35:00] 💡 建议下一步操作: [2025-11-09 01:35:00] 1. 如果 DNS 不行 → 检查域名注册商和 DNS 解析设置(如阿里云、腾讯云 DNS) [2025-11-09 01:35:00] 2. 如果 Ping 不通但端口通 → 可能是服务器禁用了 ICMP [2025-11-09 01:35:00] 3. 如果 80/443 关闭 → 检查服务器上的 Nginx/Apache 是否运行,以及防火墙(iptables/firewalld/security group) [2025-11-09 01:35:00] 4. 如果返回 5xx → 查看服务器日志: tail -f /var/log/nginx/error.log [2025-11-09 01:35:00] 5. 如果返回 404 → 检查 Nginx 配置 server_name 和 root 路径 [2025-11-09 01:35:00] 6. 如果 curl 报 SSL 错误 → 检查证书是否过期或配置不当 [2025-11-09 01:35:00] [2025-11-09 01:35:00] 📄 本次检测日志已保存至: /tmp/website_check_20251109_013437.log [root@yfw szrengjing.com]#
最新发布
11-10
根据你运行的 `check_website.sh` 脚本输出结果,我们可以得出非常明确的诊断结论: --- ## ✅ **核心问题定位:HTTP 500 内部服务器错误** 虽然: - ✅ 域名解析正常(`szrengjing.com → 124.71.230.244`) - ✅ 端口 80 和 443 都开放 - ✅ Ping 失败是正常的(很多云服务器禁用 ICMP) 但关键问题是: > ❌ **HTTP 和 HTTPS 请求都返回了 `500 Internal Server Error`** 这说明:**Web 服务(Nginx/Apache)正在运行,但后端处理失败 —— 极大概率是 PHP 执行出错。** --- ## 🔍 深入分析:500 错误常见原因(针对你的环境) 你使用的是宝塔面板(从路径 `/www/wwwroot/...` 可判断),典型 LNMP 架构。 ### 导致 500 的可能原因如下: | 类型 | 具体原因 | |------|--------| | 🐞 PHP 脚本语法错误 | 如 `index.php` 中有 `parse error` | | 💾 文件权限问题 | PHP 进程无法读取文件或写日志 | | ⚙️ PHP 配置错误 | `php.ini` 设置不当、扩展缺失 | | 📦 数据库连接失败 | `config.php` 中数据库账号密码错误或 MySQL 未启动 | | 🧩 插件/缓存冲突 | Smarty 编译文件损坏、插件报错 | | 🗂️ 目录权限不对 | `temp/`, `data/`, `images/` 等目录不可写 | --- ## ✅ 下一步排查步骤(逐级深入) ### ✅ 步骤 1:查看 Nginx 错误日志(最直接有效) ```bash # 查看最近的错误日志(替换为你实际的站点名) tail -f /www/wwwlogs/szrengjing.com_error.log ``` 或者通用方式: ```bash # 实时监控错误日志 tail -n 50 -f /www/wwwlogs/*.log | grep -i error ``` 👉 你会看到类似这样的内容: ``` 2025/11/09 01:30:20 [error] 1234#1234: *1 FastCGI sent in stderr: "PHP Parse error: syntax error, unexpected '}' in /www/wwwroot/szrengjing.com/index.php on line 45" while reading response header from upstream ``` 这个信息就是解决问题的关键! --- ### ✅ 步骤 2:检查 PHP 是否正常工作 创建一个测试文件 `test.php`: ```bash cat > /www/wwwroot/szrengjing.com/test.php << 'EOF' <?php echo "✅ PHP 正常运行!\n"; echo "PHP Version: " . PHP_VERSION . "\n"; phpinfo(); ?> EOF ``` 然后访问: ``` http://szrengjing.com/test.php ``` 如果也显示 500 → 说明整个 PHP 执行环境有问题--- ### ✅ 步骤 3:检查文件权限和所有者 ```bash # 进入网站根目录 cd /www/wwwroot/szrengjing.com # 设置正确权限(目录 755,文件 644) find . -type d -exec chmod 755 {} \; find . -type f -exec chmod 644 {} \; # 设置所有权为 www(宝塔默认运行用户) chown -R www:www /www/wwwroot/szrengjing.com ``` ⚠️ 如果某些目录需要写入权限(如上传、缓存),单独设置: ```bash chmod -R 777 temp/ data/ images/ uploads/ ``` (仅限开发环境;生产建议设为 `755 + www:www` 并确保可写) --- ### ✅ 步骤 4:检查 PHP 错误日志 编辑 `php.ini` 或查看当前配置: ```bash # 查找 php.ini 位置 php --ini | grep "Loaded Configuration File" # 常见路径(宝塔): # /www/server/php/74/etc/php.ini (版本号可能不同) ``` 确保开启错误记录: ```ini display_errors = Off ; 不要在页面显示错误(安全) log_errors = On ; 必须开启日志 error_log = /www/wwwlogs/php_error.log ``` 重启 PHP: ```bash # 宝塔命令示例(根据你安装的版本调整) systemctl restart php-fpm-74 ``` 然后再访问页面,查看是否生成错误日志: ```bash tail -f /www/wwwlogs/php_error.log ``` --- ### ✅ 步骤 5:检查数据库连接是否正常 打开你的配置文件(通常是): ```bash nano /www/wwwroot/szrengjing.com/includes/config.php ``` 确认以下几项正确: - 数据库主机:一般是 `localhost` 或 `127.0.0.1` - 数据库名、用户名、密码是否正确 - MySQL 服务是否运行? ```bash # 检查 MySQL 是否运行 systemctl status mysqld # 登录测试 mysql -u你的用户名 -p你的密码 -h localhost ``` --- ### ✅ 步骤 6:清空缓存(如果是 ECShop / 鸿宇商城) 这类老系统严重依赖缓存,损坏会导致 500: ```bash # 删除 Smarty 编译模板 rm -rf /www/wwwroot/szrengjing.com/temp/compiled/* rm -rf /www/wwwroot/szrengjing.com/temp/caches/* # 重新设置权限 chown -R www:www /www/wwwroot/szrengjing.com/temp ``` 刷新网页再试。 --- ## ✅ 总结:你现在要做的操作清单 | 操作 | 命令 | |------|------| | 1. 查看 Nginx 错误日志 | `tail -f /www/wwwlogs/szrengjing.com_error.log` | | 2. 创建 PHP 测试页 | `echo '<?php phpinfo(); ?>' > /www/wwwroot/szrengjing.com/test.php` | | 3. 检查 PHP 日志 | `tail -f /www/wwwlogs/php_error.log` | | 4. 修复文件权限 | `chown -R www:www /www/wwwroot/szrengjing.com && find . -type d -exec chmod 755 {} \; && find . -type f -exec chmod 644 {} \;` | | 5. 清空缓存目录 | `rm -rf temp/compiled/* temp/caches/*` | | 6. 重启 PHP | `systemctl restart php-fpm-74`(版本号视情况而定) | --- ## 🛠️ 补充建议:如何避免下次再出现? | 措施 | 方法 | |------|------| | 开发时开启调试模式 | 在 `config.php` 中启用错误显示(仅限本地) | | 使用 `.env` 管理配置 | 区分开发/生产环境 | | 添加健康检查脚本 | 自动报警 | | 启用日志轮转 | 防止日志过大 | --- ## 🎯 最可能的原因(基于经验推测) 结合“突然打不开”+“返回500”,最大可能是: > 🔴 **Smarty 缓存文件损坏** 或 > 🔴 **数据库密码被修改 / MySQL 崩溃** 或 > 🔴 **某次更新导致 `index.php` 出现语法错误** 📌 建议优先查看 `Nginx error.log`,90% 的问题都能在那里找到答案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值