商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > PHP日志报错怎么办Ubuntu系统

PHP日志报错怎么办Ubuntu系统

  发布于2026-07-13 阅读(0)

扫一扫,手机访问

Ubuntu下PHP日志报错排查与修复

一、快速定位日志位置

  • 先摸清你的运行环境——是 Apache 还是 Nginx + PHP-FPM,或者用 mod_php?不同组合,日志存放的位置天差地别。常见路径梳理如下:
    • Apache:Web 服务的错误日志默认在 /var/log/apache2/error.log。PHP 本身的错误是否写进这个文件,取决于 PHP 的配置。关键点:如果用的是 mod_php,错误通常就写在这里;如果走 PHP-FPM,则另算。
    • Nginx:Web 服务的错误日志在 /var/log/nginx/error.log。注意,PHP-FPM 产生的错误一般不会出现在这个文件里。
    • PHP-FPM:常见路径是 /var/log/php-fpm.log/var/log/php7.x-fpm.log(把 7.x 换成你实际的 PHP 版本)。
    • 自定义日志:如果 php.ini 里设置了 error_log 选项,那就按那个路径找。
  • 实时追踪最新日志,最直接的办法就是 tail 命令,比如:
    • sudo tail -f /var/log/apache2/error.log
    • sudo tail -f /var/log/nginx/error.log
    • sudo tail -f /var/log/php7.4-fpm.log
  • 如果实在不确定日志到底写到了哪里,用下面两步确认:
    • 执行 php --ini,看看当前加载的是哪个 php.ini
    • 在 Web 根目录下创建一个 phpinfo.php 文件,内容就写 ,然后浏览器访问它,搜索 error_log 这一项,实际路径一目了然。

二、让PHP把错误写到日志

  • 编辑对应 SAPI 的 php.ini(路径示例:/etc/php/7.x/apache2/php.ini/etc/php/7.x/fpm/php.ini),需要修改以下几项:
    • 开启日志log_errors = On
    • 指定日志文件error_log = /var/log/php_errors.log(要确保目标目录对 Web 用户可写)
    • 生产环境建议display_errors = Off;开发环境可以临时设为 On 方便调试。
    • 报告级别error_reporting = E_ALL ,把能报的错误都报出来。
  • 改完配置后,一定要重启对应的服务才能生效:
    • Apache:sudo systemctl restart apache2
    • Nginx + PHP-FPM:sudo systemctl restart php7.x-fpm && sudo systemctl restart nginx
  • 如果用的是 PHP-FPM,还需要检查 /etc/php/7.x/fpm/php-fpm.confwww.conf 中的 error_log 配置是否开启并且指向了有效路径。很多人只改了 php.ini,却忘了 FPM 自身的日志配置,结果依然看不到报错。

三、常见报错场景与处理

  • 语法错误或致命错误导致空白页:这种情况最头疼——页面一片空白,连个错误提示都没有。去 Apache/Nginx 错误日志或 PHP-FPM 日志里,会明确告诉你哪个文件、哪一行出了问题。先修正语法或解决依赖问题。
  • 类/函数未定义或扩展缺失:日志里会出现 Call to undefined functionClass '…' not found。对应的解决办法是安装缺失的扩展,比如 php-mbstringphp-curlphp-gd 等,装完别忘了重启服务。
  • 权限与所有权问题:确保 Web 服务用户(通常是 www-data)对代码目录有读取权限,对需要写入的目录(比如上传、缓存目录)有写权限。一个经典的操作组合:
    • sudo chown -R www-data:www-data /var/www/html
    • sudo find /var/www/html -type d -exec chmod 755 {} ;
    • sudo find /var/www/html -type f -exec chmod 644 {} ;
  • 资源限制(内存、执行时间):日志中间出现 Allowed memory size exhaustedMaximum execution time exceeded 时,打开 php.ini,调大 memory_limitmax_execution_time 这两个参数,然后重启。
  • 配置错误:修改了 php.ini 或 FPM 池配置后,服务可能直接起不来。这种情况优先去看对应的启动日志(比如 journalctl -u php7.4-fpm),找到具体的错误信息,修正后再启动。

四、高效排查命令清单

  • 实时跟踪错误
    • sudo tail -f /var/log/apache2/error.log
    • sudo tail -f /var/log/nginx/error.log
    • sudo tail -f /var/log/php7.4-fpm.log
  • 检索关键字(比滚动看日志快得多):
    • grep -i "error|fatal|warning" /var/log/php_errors.log
  • 确认配置与扩展
    • php --ini 查看当前加载的 php.ini
    • php -m | grep -i mbstring 检查某个扩展是否已启用
  • 重启服务
    • sudo systemctl restart apache2
    • sudo systemctl restart php7.4-fpm
    • sudo systemctl restart nginx

五、实用建议

  • 生产环境务必坚持 display_errors = Offlog_errors = On,避免敏感信息泄露到页面上。开发环境可以临时打开显示错误,方便调试。
  • phpinfo()php --ini 双重确认实际生效的 php.inierror_log 路径,避免辛辛苦苦改错了文件。
  • 如果采用 PHP-FPM,同时检查 FPM 主配置和进程池配置中的 error_log 与日志级别。必要时把 log_level 临时调到 noticedebug,获取更详细的信息(排查完记得调回默认值)。
  • 修改配置或安装扩展后,养成习惯:重启服务并马上观察日志,确认变更生效且没有产生新的报错。这一步很多人嫌麻烦跳过了,结果排查了半天发现配置根本没加载。
本文转载于:https://www.yisu.com/ask/56479186.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。
  • using namespace 使用中遇到的问题怎么解决 正版软件
    using namespace 使用中遇到的问题怎么解决
    命名空间的基本概念与常见引入问题在C++等编程语言中,命名空间(namespace)是一种将代码标识符(如变量、函数、类名)封装在特定名称下的机制,其主要目的是避免命名冲突,尤其是在大型项目或使用多个第三方库时。使用“using namespace”指令可以将指定命名空间中的所有名称引入当前作用域,
    10天前 0
  • c语言函数递归 实操经验总结:这些技巧很实用 正版软件
    c语言函数递归 实操经验总结:这些技巧很实用
    理解递归的基本原理在C语言中,递归是一种函数调用自身的编程技术。要掌握它,首先需要理解其核心思想:将一个复杂的大问题,分解为一个或几个与原问题相似但规模更小的子问题,直到子问题足够简单,可以直接求解。这个过程通常包含两个关键部分:递归出口和递归体。递归出口定义了问题何时不再继续分解,即最简单、可直接
    10天前 0
  • c语言函数递归 怎么选?常见方案对比分析 正版软件
    c语言函数递归 怎么选?常见方案对比分析
    递归函数的基本概念与适用场景在C语言编程中,递归是一种函数调用自身的编程技巧。它并非适用于所有问题,但在处理某些具有自相似结构的问题时,能提供极其清晰和优雅的解决方案。递归的核心思想是将一个大规模问题分解为一个或多个同类型但规模更小的子问题,直到子问题简单到可以直接求解。典型的适用场景包括树形结构的
    10天前 0
  • Objective-C 内存管理入门:从 alloc 到 dealloc 的生命周期详解 正版软件
    Objective-C 内存管理入门:从 alloc 到 dealloc 的生命周期详解
    理解内存管理的基石在Objective-C的编程世界中,内存管理是开发者必须掌握的核心技能之一。它直接关系到应用的性能、稳定性与资源利用效率。与一些采用自动垃圾回收机制的语言不同,Objective-C在很长一段时间里,依赖一套基于引用计数的、需要开发者部分介入的管理规则。这套规则的核心思想是明确的
    10天前 0
  • 如何正确使用 dealloc 以避免 iOS 应用中的内存泄漏 正版软件
    如何正确使用 dealloc 以避免 iOS 应用中的内存泄漏
    理解 dealloc 的角色与时机在 iOS 应用开发中,内存管理是保障应用性能与稳定性的基石。dealloc 方法是 Objective-C 中对象生命周期结束时的关键回调,它标志着对象即将被系统回收内存。正确理解其触发时机至关重要:当一个对象的引用计数降为零时,运行时系统会自动调用该对象的 de
    10天前 0