PHP服务报错500的排查过程

这篇具有很好参考价值的文章主要介绍了PHP服务报错500的排查过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


架构是简单的单机 nginx + php , 没有并发量,收到500错误,一定是后端服务php的问题,500错误单从http协议的响应来看,是看不出什么错误的, 最好的方式是记录php错误日志。以下是 解决问题的思路,一步一步的来,
一、开启php服务报错日志
  • 1、查看nginx的日志

a) 首先找到nginx的配置文件,找到站点的日志文件;

b) access_log日志
access_log 日志一般配置在 server模块里面, 一个server 可以配置自己的 access_log , 但是这个access_log 一般只打印 nginx 从 fastcgi 进程收到的日志 和 客户端信息,格式也就是 什么浏览器, 从php-fpm返回的响应是 200 还是 500 或者其他状态码,咦!有500了,但是这里看不到500的详细错误,那就接着往下,找php的错误日志。

  • 2、php 的错误日志

php的错误日志包括 php-fpm 的错误日志 和 php.ini 的错误日志, 这两是不一样的,不要弄混。其中 php-fpm 的日志要优先级高一些,有的会覆盖php.ini 中的配置

a) php-fpm 的日志配置

如果是 php-fpm 的默认配置,那么他只会打印 php-fpm 的日志,不打印 php.ini 配置的 error_log 路径(即使配置,也不会打印), 这是因为 :

nginx只对页面的访问做access记录日志。不会有php的error log 信息。nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog。原因是php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出,直接把他们重定向到/dev/null,所以我们在nginx的error log 和php-fpm的errorlog都看不到php的错误日志。

所以要想输出php的错误日志(看到详细的500错误),就需要改php-fpm配置(没有就新增)如下:

[global]
error_log = /www/server/php/72/var/log/php-fpm.log

[www]
catch_workers_output = yes 

注:catch_workers_output = yes:重定向运行过程中的 stdout 和 stderr 到主要的错误日志文件中。如果没有设置,stdout 和 stderr 将会根据 FastCGI 的规则被重定向到 /dev/null。默认值:无。

b) 配置php.ini 的错误日志

需要将php.ini中的配置指令做如下修改:

error_reporting = E_ALL;    将会向PHP报告发生的每个错误   
display_errors = Off;    不显示满足上条 指令所定义规则的所有错误报告   
log_errors = On;    开启错误日志   
log_errors_max_len = 1024;    设置每个日志项的最大长度   
error_log = /var/php_errors.log;    指定产生的 错误报告写入的日志文件位置

完成之后重新启动PHP服务生效。

systemctl restart php-fpm-72
二、php报错is_dir():open_basedir restriction in effect. File(.log) is not within the allowed path(s)

开启PHP错误日志后, /www/server/php/72/var/log/php-fpm.log 日志文件中出现了如下报错:

 WARNING: [pool www] child 8820 said into stderr: "NOTICE: PHP message: PHP Fatal error:  Uncaught think\exception\ErrorException: is_dir(): open_basedir restriction in effect. File(/tmp/202401) is not within the allowed path(s): (/www/wwwroot/dock.lihan.ltd/runtime/:/www/wwwroot/dock.lihan.ltd/vendor/:/www/wwwroot/dock.lihan.ltd/config/:/www/wwwroot/dock.lihan.ltd/application:/www/wwwroot/dock.lihan.ltd/.env:/www/wwwroot/dock.lihan.ltd/public:/www/wwwroot/dock.lihan.ltd/thinkphp:/www/wwwroot/dock.lihan.ltd/vendor/composer:/www/wwwroot/dock.lihan.ltd/runtime:/www/wwwroot/dock.lihan.ltd/extend) in /www/wwwroot/dock.lihan.ltd/thinkphp/library/think/log/driver/File.php:61"

这种情况为open_basedir限制了PHP可以操作的文件目录,开发环境不考虑安全问题的话,如果需要操作这些文件,解决方法可以是:

在php.ini配置文件中设置open_basedir
例如:

open_basedir = "/www/wwwroot/project"

注:其实open_basedir 这个是用来限制php的目录访问权限什么的,如果不在允许的范围内,php就不能访问。

完成之后重新启动PHP服务生效。

systemctl restart php-fpm-72
三、php_network_getaddresses getaddrinfo failed redis 报错解决

当Redis无法解析Redis服务器的主机名时,会抛出错误“php_network_getaddresses getaddrinfo failed redis”。发生这种情况的原因有多种,例如 Redis 服务器 IP 地址或主机名配置不正确、网络连接问题或 DNS 解析问题。

  • 解决方案 - 以下是解决方法
    要修复错误“php_network_getaddresses getaddrinfo failed redis”,您可以实施以下解决方案:

  • 1.验证 Redis 服务器 IP 地址或主机名:确保 Redis 服务器配置文件中指定的 IP 地址或主机名正确。您还可以在 Redis 服务器上使用 ping 命令来检查客户端计算机的可达性。

  • 2.检查网络连接:验证客户端计算机和 Redis 服务器之间没有网络连接问题。使用 ping 命令检查是否有任何数据包丢失或网络延迟。

  • 3.检查 DNS 解析:如果您使用主机名连接到 Redis 服务器,请确保主机名可以解析为 IP 地址。在客户端计算机上使用 nslookup 命令检查主机名是否可以解析为 IP 地址。

  • 4.使用 IP 地址而不是主机名:如果 DNS 解析导致问题,请尝试使用 Redis 服务器的 IP 地址而不是 Redis 配置文件中的主机名。

通过实施这些解决方案,您应该能够从 PHP 应用程序建立到 Redis 服务器的连接,而不会遇到“php_network_getaddresses getaddrinfo failed redis”错误。

  • 注意
    当你在项目日志中遇到了下面的报错:
[ error ] [0]php_network_getaddresses: getaddrinfo failed: Name or service not known

首先可以检查php项目文件下面的隐藏文件:.env 文件

查看env文件中连接的所有服务,例如mysql、redis等,是否可连接,相信我,你会查到一些异常的。文章来源地址https://www.toymoban.com/news/detail-813192.html

到了这里,关于PHP服务报错500的排查过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker搭建lnmp(nginx+mysql57+php7.4)

    2.1安装docker-compose 2.2创建项目目录 2.3在项目目录下面创建docker-compose.yml 2.4在该目录下面创建nginx目录,然后创建 default.conf 配置文件 2.5在该目录下面创建web目录,然后创建 index.php 文件 2.6启动docker-compose 2.7访问 2.8停止docker-compose 2.9删除docker-compose 3.0查看docker-compose日志 3.1查

    2024年02月13日
    浏览(30)
  • 【PHP面试题79】在Linux中如何设置MySQL和PHP服务开机启动

    本文已收录于PHP全栈系列专栏:PHP面试专区。做全网最全最有营养的PHP面试大全。 计划将全覆盖PHP开发领域所有的面试题, 对标资深工程师/架构师序列 ,欢迎大家提前关注锁定。 ⭐⭐⭐ 记得先收藏文章,关注作者,整个工作过程中面试多少是会有几次的。 ⭐⭐⭐ 在Linu

    2024年02月16日
    浏览(35)
  • 使用Docker Dockerfile构建php LNMP集成开发环境,并运行Thinkphp5

    系统:MAC、Windows10 Docker版本:Docker version 23.0.5 Docker Desktop:Dockerdesktop官方地址 这篇主要介绍如何在Mac、Windows10使用docker搭建LNMP集成开发环境。下面我会写Dockerfile编译安装Nginx+php基础环境。mysql、redis基于官方Docker hub,分别构建我们自己的镜像。  code目录存放工程代码,会映

    2024年02月15日
    浏览(44)
  • 用XAMPP搭建PHP服务器,配置部署多个项目的过程(附blocked port error解决方法)

    一、前言 安装完成XAMPP后,浏览器输入localhost或127.0.0.1,若远程服务器,替换对应IP地址即可。因浏览网页服务默认的port都是80,因此只需输入网址即可,不用输入“:80”了, ​ ​ XAMPP默认指向的文件地址是安装目录下的htdocs文件夹 ##找到 C:xmappapacheconf 目录(默认安装路径

    2024年01月23日
    浏览(34)
  • 打造高性能网站:使用 nginx、MySQL 和 PHP 编译,搭建 LNMP 环境并安装 WordPress实战

    🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家😉😉 💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺 💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘 本次实验环境见下表

    2024年02月07日
    浏览(39)
  • DedeCMS不支持PHP5.3、5.4及以上版本后台500错误白屏的解决方法

    今天把系统换成了windows server 2008 r2 同时将PHP环境提升至PHP5.5版本,测试PHPinfo的时候一点问题都没有,但是登陆dede后台却显示500错误,这应该怎么解决呢?百度了一下发现dede不支持PHP5.3、PHP5.4及以上版本了,主要原为是php5.4的版本废除了session_register函数 可以采用如$_SESSIO

    2023年04月21日
    浏览(34)
  • PHP代码加密实战过程 Swoole Loader

    帮一个客户处理一个小程序bug修复,前面不知道客户是直接购买一个倒闭的公司产品,还是破解版本的。 其中一些核心工具类代码进行了加密,通过排查就找到了 Swoole Compiler  今天演示下如何进行代码加密: 大致步骤 如下: 注册 Swoole Compiler  账号 地址:Swoole-Compiler - 最

    2024年02月11日
    浏览(33)
  • 华纳云:PHP如何调用MySQL存储过程

    这篇文章主要介绍了PHP如何调用MySQL存储过程的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP如何调用MySQL存储过程文章都会有所收获,下面我们一起来看看吧。 什么是MySQL存储过程 MySQL存储过程是一段可以重复使用的SQL代码块,可以在

    2023年04月21日
    浏览(49)
  • 关于一个SFTP问题报错排查过程

    📓问题概述 日常运维工单为用户在文件服务器上建立账户之后,用户反馈登录报错;通过相邻网段服务器进行sftp登录报错如下: 百度一下过去经验,通过重启sshd服务和检查sshd_config配置都没问题。一筹莫展!!! 📌排查思路 尝试通过winscp客户端sftp登录,报连接异常情况

    2024年02月10日
    浏览(32)
  • vscode运行php报错php not found

    vscode运行php not found报错,要先检查原来的配置能否正常运行 1.插件,这两款插件试运行php的 2.查看php版本 3.php下载 下载php:php下载 下载后配置环境变量 4. Xdebug 下载 找到生产环境,赋值一份改成php.ini 5.配置vscode 文件-首选项-设置,搜索php-找到settings.json中编辑 6.添加配置

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包