1. 语法错误(Syntax Errors)
错误表现:脚本无法解析,报错如“Parse error: syntax error, unexpected ‘$variable’ (T_VARIABLE) in /path/to/file.php on line 10”(意外的变量符号)。
解决方法:
echo "Hello World"缺少结尾引号)、缩进错误;2. 运行时错误(Runtime Errors)
错误表现:脚本执行时终止,报错如“Fatal error: Uncaught TypeError: Argument 1 passed to MyClass::__construct() must be an instance of AnotherClass, null given in /path/to/file.php on line 25”(参数类型不匹配)。
解决方法:
__construct(AnotherClass $param)要求参数必须是AnotherClass实例);var_dump($param)或error_log("Param type: ".gettype($param))输出参数类型,确保其符合预期;$anotherClass = new AnotherClass(); $obj = new MyClass($anotherClass);)。3. 警告与通知(Warnings & Notices)
错误表现:
Countable接口的对象(如if (is_array($array)) { echo count($array); });$variableName = null;)或在声明时赋初值,避免直接使用未定义变量;php.ini中设置error_reporting = E_ALL,display_errors = Off(生产环境关闭显示),log_errors = On(记录到日志),便于提前发现问题。4. 数据库连接错误(Database Connection Errors)
错误表现:无法连接数据库,报错如“SQLSTATE[HY000] [2002] Connection refused”(连接被拒绝)或“PDOException: could not find driver”(未找到驱动)。
解决方法:
systemctl status mysql(MySQL)或systemctl status postgresql(PostgreSQL)确认服务是否运行,未运行则启动(systemctl start mysql);php.ini或配置文件中的host(默认localhost)、port(MySQL默认3306)、username、password、dbname是否正确;pdo_mysql扩展,使用sudo apt install php-mysql(Ubuntu)或sudo yum install php-mysql(CentOS)安装,安装后重启Web服务器(sudo systemctl restart apache2/nginx)。5. 文件/目录权限问题(Permission Denied Errors)
错误表现:无法读取/写入文件,报错如“Permission denied”(权限被拒绝)或“Failed to open stream: No such file or directory”(文件不存在/无法访问)。
解决方法:
ls -l /path/to/file查看权限,确保PHP进程用户(如www-data)有读取(r)权限(如-rw-r--r--中的第一个w);chmod 644 /path/to/file(所有者可读写,组和其他用户可读),对目录使用chmod 755 /path/to/dir(所有者可读写执行,组和其他用户可读执行);chown www-data:www-data /path/to/file(将文件所有者改为www-data,组改为www-data),适用于网站目录(如/var/www/html)。6. PHP扩展缺失(Missing Extensions)
错误表现:调用未定义函数,报错如“Fatal error: Uncaught Error: Call to undefined function mysqli_connect()”(未定义mysqli_connect函数)或“PHP Startup: Unable to load dynamic library ‘mbstring.so’”(无法加载mbstring扩展)。
解决方法:
php -m(命令行)或phpinfo()(网页)查看已加载扩展列表,确认缺失的扩展(如mysqli、mbstring);sudo apt install php-mysqli php-mbstring,CentOS下sudo yum install php-mysqli php-mbstring;sudo systemctl restart apache2)或Nginx(sudo systemctl restart nginx),使扩展生效。7. PHP-FPM配置错误(PHP-FPM Errors)
常见子问题及解决方法:
netstat -tulnp | grep 9000(端口)或lsof /run/php/php7.x-fpm.sock(套接字)查找占用进程,杀死进程(kill -9 PID)或修改PHP-FPM配置文件(/etc/php/7.x/fpm/pool.d/www.conf)中的listen指令(如改为9001);/run/php)存在且属主正确(sudo mkdir -p /run/php; chown -R www-data:www-data /run/php),以及www.conf中的user和group设置为www-data;/etc/php/7.x/fpm/php-fpm.conf中的process.max),或调整系统限制(ulimit -n增加文件描述符数量)。8. 内存不足(Allowed Memory Size Exhausted)
错误表现:脚本执行时终止,报错如“Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 134217728 bytes)”(内存耗尽)。
解决方法:
php.ini中的memory_limit参数(如memory_limit = 256M),或脚本中动态设置(ini_set('memory_limit', '256M'));LIMIT语句分页查询)、释放无用变量(unset($var))、避免递归过深。9. 超时错误(Maximum Execution Time Exceeded)
错误表现:脚本执行超时,报错如“Maximum execution time of 30 seconds exceeded”(执行时间超过30秒)。
解决方法:
php.ini中的max_execution_time参数(如max_execution_time = 300,单位秒),或脚本中动态设置(set_time_limit(300));10. 自定义错误处理问题
错误表现:自定义错误未正确记录或处理,报错如“Error: Custom error message”但日志中无记录。
解决方法:
php.ini中设置error_reporting = E_ALL,display_errors = Off(生产环境关闭),log_errors = On(记录到日志),并指定error_log路径(如error_log = /var/log/php_error.log);error_log()函数:主动记录错误(如error_log("用户登录失败,用户名:".$username));set_error_handler()定义函数捕获非致命错误(如function customErrorHandler($errno, $errstr, $errfile, $errline) { error_log("Error: [$errno] $errstr in $errfile on line $errline"); }),或register_shutdown_function()捕获致命错误(如function fatalErrorHandler() { $error = error_get_last(); if ($error) { error_log("Fatal Error: ".$error['message']." in ".$error['file']." on line ".$error['line']); } })。[4,6]