The Strange World of PHP Debugging
Upcoming SlideShare
Loading in...5

The Strange World of PHP Debugging



A talk I gave at Refresh Cambridge on 1st July, 2009, on PHP Debugging.

A talk I gave at Refresh Cambridge on 1st July, 2009, on PHP Debugging.



Total Views
Views on SlideShare
Embed Views



2 Embeds 28 27 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

The Strange World of PHP Debugging The Strange World of PHP Debugging Presentation Transcript

  • The Strange World of Debugging PHP Refresh Cambridge, 1 July 2009 Simon R Jones, Studio 24
  • We’re trying to avoid this White screen of death
  • Which makes us feel like this
  • While we’d rather be happily getting on with development
  • Debugging PHP • What is a bug? • Common errors • Error reporting • Basic debugging techniques • A proper PHP debugger • Best practises
  • What is a bug? • Human error (typos) • Logic errors • Environmental errors (files, web service, db) • And rarely, it’s a system bug (PHP, Apache)!
  • Common errors
  • Syntax errors • Something’s usually in the wrong place.. • T_ENCAPSED_AND_WHITESPACE
  • Syntax errors • T_NUM_STRING • T_OBJECT_OPERATOR • T_STRING • T_VARIABLE • T_PAAMAYIM_NEKUDOTAYIM ! (means double colon in Hebrew)
  • Whose line is it anyway? • The syntax error isn’t always on the line reported • Usually the case with missing quotes
  • Headers already sent • PHP mime type = text/html • A single space after a closing ?> will send HTML + headers to the browser • Don’t include the closing ?> tag (unless you’re outputting HTML)
  • Error Reporting
  • Recommended settings Production (live) site • Hide on screen • Display friendly error page • Log errors Development site • Display on screen
  • Display errors • Default php.ini setting is to hide errors • Override in first PHP file • A gotcha: any syntax errors in this file will ignore these settings • Error reporting is a bitwise setting
  • Bitwise operators • Report all errors.. • But not notices • And not warnings • reporting.php
  • Error types • Parse error • Fatal error • Warning • Notice • Strict notice
  • Error log • Default is to log errors to the Apache ErrorLog location (usually set in a VirtualHost directive) • A gotcha: this overrides php.ini error_log setting which can be confusing • Can be overridden with PHP options log_errors and error_log
  • Custom error reporting • set_error_handler() • Set a callback function (or class) to manage errors • Show nice error page to users on live site • Email critical errors to the tech team • handler.php
  • Throwing errors • Throw errors in your code (i.e. if a database call fails) • trigger_error() • Exceptions in PHP 5 • Always program defensively, don’t assume that database call will always work or a certain field will exist in an external XML file
  • Supressing errors • @ operator • Arrgh, not generally a good idea • Sometimes a valid use case (i.e. throw an exception on function failure) • Scream to disable supressed errors! •ini_set('scream.enabled', 1);
  • Watch out! Errors suppressed with the @ operator are still sent to a custom error handler. Can cause headaches and unexplained bugs!
  • Exceptions • PHP 5 only • Only classes can throw an exception • set_exception_handler() to deal with uncaught exceptions • Uncaught exceptions raise a Fatal error
  • Pretty Blue Screen • Nice exception handler from Harry Fuecks • pretty-blue-screen/
  • Basic debugging techniques
  • var_dump • Tracking variables throughout code • Add formatting: • Better: Zend_Debug::dump()
  • Debug window • Javascript debug window •
  • Firebug console logging • Firebug and FirePHP plugins for Firefox • Doesn’t send output to HTML page so won’t interfere with sessions, headers, etc • Zend_Log_Writer_Firebug •
  • ZFDebug • Zend Framework plugin to display debug information (time spent, memory usage, database queries, etc) •
  • A proper debugger • Step through your code line by line • Set breakpoints • View environment, script variables and function paramters at each step • View browser output • Profiling
  • Xdebug • Open Source • Packaged with Komodo IDE • Or via
  • Zend Debugger • Commercial • Part of Zend Studio • Debugging from Firefox or from within Zend Studio
  • Best practises • Use an IDE with PHP syntax checking • Enforce coding standards • Comment your code! (PHPDoc) • Defensive programming • Lightweight inital PHP file to help report errors • Break complex code into smaller chunks (OO) • Peer review • Write Unit tests for small, discrete bits of code • Ensure the staging site is on the same server setup as the live site
  • Links • Zend Studio - • Eclipse + PDT - • Komodo - • Zend Framework docs - manual/en/ • Blog article: Debugging development - development/
  • Thanks! Simon R Jones, Studio 24,