SlideShare a Scribd company logo
PHP Debugging from the Trenches
PHP Cambridge, 24 Feb 2014
Simon R Jones, Studio 24
Me
•

Founder & Technical Director of
digital agency Studio 24


•

Programming PHP since 1999


•

Contributor to ZF1


•

Contributor to Web Standards
Project


•

Zend Certified Engineer


•

Organiser of PHP Cambridge
and Refresh Cambridge

studio24.net
What causes bugs

First steps

PHP errors

Error reporting

Debugging in PHP

Remote debugging

AJAX and Web Services

Legacy software

Good practises

studio24.net
“Debugging is a methodical process of finding
and reducing the number of bugs, or defects,
in a computer program or a piece of electronic
hardware, thus making it behave as expected.”
– Wikipedia

studio24.net
“Debugging is a methodical process of finding
and reducing the number of bugs, or defects,
in a computer program or a piece of electronic
hardware, thus making it behave as expected.”
– Wikipedia

studio24.net
!

We want to avoid this!
WSOD:

White Screen 

Of Death!
Which makes you feel
like this..
While we’d rather be
happily solving problems
What causes bugs?

studio24.net
Grace Hopper

http://www.history.navy.mil/photos/pers-us/uspers-h/
g-hoppr.htm
What causes bugs?
•

Human error (typos)

•

Business logic errors

•

Environmental errors (files, web service, DB)

•

Client-side errors (web browsers)

•

External software bug (PHP, Apache, etc)

•

And sometimes it’s just a feature request or
misunderstanding!
studio24.net
First steps

studio24.net
“It is a capital mistake to theorize before one
has data. Insensibly one begins to twist facts to
suit theories, instead of theories to suit facts.”
– Sherlock Holmes, A Scandal in Bohemia

studio24.net
Understand the issue

1. What did you do?

(how to reproduce the issue)

2. What happened?

(what’s wrong)

3. What was supposed to
happen?

(expected behaviour)

studio24.net
Know your environment
•

URL

•

Web browser

•

Operating System / Device

•

JavaScript support?

studio24.net
Php Debugging from the Trenches
Gather data
•

Logs
•
•

Application logs

•
•

Webserver access / error logs (Nginx, Apache)

Software logs (Varnish, MySQL)

File system
•

Permissions

•

File space, check with df -h
studio24.net
Replicate the issue
•

Replay steps

•

Can you replicate it?

•

If not, what’s different?
•

Is the data the same?

•

Are there time-based business rules?

•

Are you using the same web browser/OS?
studio24.net
PHP errors

studio24.net
PHP errors	
•

Parse errors
•

Identified by T_* parser tokens

•

T_PAAMAYIM_NEKUDOTAYIM 

issues with static operator ::

•

Sending headers more than once

•

Segmentation faults

•

Exception thrown without a stack frame in
Unknown on line 0. Yay!
studio24.net
syntax error, unexpected T_SL …
$heredoc = <<<EOD

My long piece

of text on a few lines

there’s a space here

EOD;
<<<<<<< HEAD

$title = "My updated code";

=======

$title = "My old code";

>>>>>>> master
syntax error, unexpected $end in /path/to/file.php on line 27
$heredoc = <<<EOD

My long piece

of text on a few lines
EOD;

there’s a space here

// More code here

for ($x=0; $x<10; $x++) {

// Do stuff

}
echo $something;

but the error reports here
Syntax errors	
Easily fixed with a decent IDE or running lint before you deploy code:

php -l /path/to/file.php
No syntax errors detected in file.php
Warning: session_start() [function.session-start]: Cannot
send session cookie - headers already sent by…
<?php
a space here

$title = "My title";
// More code here

for ($x=0; $x<10; $x++) {

// Do stuff

}
or here will flush the headers

?>
Headers sent twice errors
Easily fixed by separating PHP from your templates 

and don’t include final ?> in files that only contain PHP

<?php

// Some code

$title = "Lots of code here!";
// Look Ma, no closing ?> here!
Obscure error messages
•

Segmentation fault - issue writing to memory, usually an
internal bug

•

Exception thrown without a stack frame - exception
thrown in destructors / exception handlers

studio24.net
Error reporting

studio24.net
Error reporting
// Development

display_errors = On

display_startup_errors = On

error_reporting = -1 // E_ALL works PHP5.4+

log_errors = On
// Production

display_errors = Off

display_startup_errors = Off

error_reporting = E_ALL

log_errors = On
Error reporting	
•

Any syntax errors in the file that defines error reporting
will ignore these settings

•

Default is to log errors to Apache ErrorLog location,
overrides php.ini error_log setting

studio24.net
Custom error handling
•

set_error_handler() - PHP errors

•

set_exception_handler() - uncaught exceptions

•

Log errors

•

Log stack traces

•

Display friendly page to users

•

Use monitoring for alerts
studio24.net
Suppressing errors
•

@ operator

•

Don’t do it!

•

Unless you immediately test the result and deal with it

•

Suppressed errors still sent to custom error handler

•

Scream to disable!
ini_set('scream.enabled', 1);
Debugging in PHP

studio24.net
Quick and dirty
•

var_dump() and print_r()

•

Very basic, and not that useful

•

Needs formatting if complex data
echo "<pre>";var_dump($stuff);exit;

•

Xdebug formats var_dump()

studio24.net
Displaying errors

Pretty Blue Screen
Developer toolbars
•

Send JavaScript messages to console.log()

•

Use Firebug and FirePHP to send messages from PHP to
the console

•

Can profile DB queries via
Zend_Db_Profiler_Firebug
Framework debug toolbars
•

Useful for quickly seeing information

•

May slow application down

studio24.net
Symfony toolbar
Xdebug
•

Stack traces for errors

•

Profiling

•

Remote debugging

•

Enabled via zend_extension in php.ini

•

Don’t use in production!

•

XHProf is designed for profiling on production servers
studio24.net
Xdebug stack trace
Remote debugging

studio24.net
Xdebug remote debugging
•

Enable in PHP.ini via
xdebug.remote_enable=1

xdebug.remote_port="9000"

1. Set breakpoints
2. Run in browser via session, or browser extension
3. Step through code in IDE
studio24.net
Remote debugging in PHP Storm
Php Debugging from the Trenches
Debugging AJAX and Web Services

studio24.net
CURL
•

Great for quickly inspecting headers

curl --HEAD http://domain.com/url
•

Redirects are aggressively cached in most browsers, CURL isn't

•

Use it to debug web services

•

Use Python’s json.tool to format returned JSON

curl -s -H 'X-Auth-Token: AUTH_TOKEN’ 

-H 'Accept: application/json' 

'http://domain.com/url' | python -m json.tool
studio24.net
Charles Proxy
•

Records all requests

•

Inspect request and response headers

•

Makes it really easy to debug AJAX

•

You can include just your test domain to reduce amount
of data captured

studio24.net
Php Debugging from the Trenches
Dealing with SSL
•

Charles acts as a proxy to allow you to inspect SSL requests.

•

This is the same as a man-in-the-middle attack

•

You need to authorise your web browser to allow this

•

Access third-party URLs directly to do this

studio24.net
“Nothing clears up a case so much as stating it
to another person.”
–Sherlock Holmes, The Memoirs of Sherlock Holmes

studio24.net
If you’re stuck get a fresh view
•

“Rubber duck” debugging

•

The act of talking through an issue forces 

you to think logically

studio24.net
Debugging Legacy software

studio24.net
Problems debugging Legacy software	
•

“Spaghetti code”

•

No organised class/function system

•

Duplicated code

•

Dead code

•

Global variables

•

Unescaped SQL (and other security woes)

•

Suppressed errors
studio24.net
Strategies
•

Ensure you have a local development environment

•

Get the codebase into version control

•

Remove dead code

•

Review error logs

•

Debug with Xdebug to understand code flow

•

Refactor by making small, incremental changes
studio24.net
Refactoring
It Was Like That When I Got Here: Steps
Toward Modernizing a Legacy Codebase

http://paul-m-jones.com/archives/2667

!
Modernizing Legacy Applications In PHP

https://leanpub.com/mlaphp

studio24.net
Good practises 

to help make debugging easier

studio24.net
Good practises
•

Use a good IDE (PHPStorm, Zend Studio, NetBeans)

•

Coding standards

•

Document your code

•

Filter In / Escape Out

•

Defensive coding (test all return values)

•

Automated testing
studio24.net
PHPUnit

Unit testing
Selenium

Browser testing
“Chance has put in our way a most singular
and whimsical problem, and its solution is its
own reward”
–Sherlock Holmes, The Adventures of Sherlock Holmes

studio24.net
Thanks!
@simonrjones

!

http://www.slideshare.net/simonrjones/TODO
Useful links	
Environment

http://supportdetails.com/
Browser testing

http://www.browserstack.com/ 

http://docs.seleniumhq.org/
PHP parser errors

http://php.net/manual/en/tokens.php
Debug toolbars

http://www.sitepoint.com/prettyblue-screen/ 

https://github.com/zendframework/
ZendDeveloperTools 

http://www.firephp.org/

Debugging and Profiling

http://xdebug.org/

https://github.com/facebook/xhprof

https://github.com/perftools/xhgui
Charles Proxy

http://www.charlesproxy.com/ 

http://techportal.inviqa.com/
2013/03/05/manipulating-http-withcharles-proxy/
PHP Standards

http://www.php-fig.org/ 

http://www.phptherightway.com/
Refactoring

http://paul-m-jones.com/archives/
2667

More Related Content

What's hot (20)

ODP
The Professional Programmer
Dave Cross
 
PDF
Jest: Frontend Testing leicht gemacht @EnterJS2018
Holger Grosse-Plankermann
 
PDF
Erlang White Label
Mickaël Rémond
 
PDF
NDC London 2014: Thinking Like an Erlanger
Torben Hoffmann
 
KEY
HTML5: It goes to ELEVEN
Mathias Bynens
 
PDF
Monitoring CF What are my options? Why Should I?
ColdFusionConference
 
PPTX
Improving The Quality of Existing Software
Steven Smith
 
PPT
Pragmatic Parallels: Java and JavaScript
davejohnson
 
PDF
EuroPython 2011 - How to build complex web applications having fun?
Andrew Mleczko
 
PDF
Managing Modules Without Going Crazy (NPW 2007)
brian d foy
 
KEY
Frozen rails 2012 - Fighting Code Smells
Dennis Ushakov
 
PDF
[CB19] API-induced SSRF: How Apple Pay Scattered Vulnerabilities Across the W...
CODE BLUE
 
PPTX
Breaking Dependencies to Allow Unit Testing - DevIntersection Spring 2016
Steven Smith
 
PDF
Fix me if you can - DrupalCon prague
hernanibf
 
PDF
DEF CON 27 - JOSHUA MADDUX - api induced ssrf
Felipe Prado
 
PPTX
Improving the Quality of Existing Software
Steven Smith
 
PPT
Is it time to start using HTML 5
Ravi Raj
 
PDF
[In Control 2010] HTML5
Christopher Schmitt
 
PPTX
Old code doesn't stink - Detroit
Martin Gutenbrunner
 
PDF
php_tizag_tutorial
tutorialsruby
 
The Professional Programmer
Dave Cross
 
Jest: Frontend Testing leicht gemacht @EnterJS2018
Holger Grosse-Plankermann
 
Erlang White Label
Mickaël Rémond
 
NDC London 2014: Thinking Like an Erlanger
Torben Hoffmann
 
HTML5: It goes to ELEVEN
Mathias Bynens
 
Monitoring CF What are my options? Why Should I?
ColdFusionConference
 
Improving The Quality of Existing Software
Steven Smith
 
Pragmatic Parallels: Java and JavaScript
davejohnson
 
EuroPython 2011 - How to build complex web applications having fun?
Andrew Mleczko
 
Managing Modules Without Going Crazy (NPW 2007)
brian d foy
 
Frozen rails 2012 - Fighting Code Smells
Dennis Ushakov
 
[CB19] API-induced SSRF: How Apple Pay Scattered Vulnerabilities Across the W...
CODE BLUE
 
Breaking Dependencies to Allow Unit Testing - DevIntersection Spring 2016
Steven Smith
 
Fix me if you can - DrupalCon prague
hernanibf
 
DEF CON 27 - JOSHUA MADDUX - api induced ssrf
Felipe Prado
 
Improving the Quality of Existing Software
Steven Smith
 
Is it time to start using HTML 5
Ravi Raj
 
[In Control 2010] HTML5
Christopher Schmitt
 
Old code doesn't stink - Detroit
Martin Gutenbrunner
 
php_tizag_tutorial
tutorialsruby
 

Viewers also liked (17)

PPT
Evolució Web
crizos
 
PDF
Internet awareness educators ISPAB
smt.islam
 
PDF
Ispab presentation for journalist : 2013-14
smt.islam
 
PPT
How to Create a Cycle
jillyshaw
 
PPT
Why Consider A Real Estate Investment In The Current Market July 2009
RichardZimmerman
 
PPT
Cpa Cpe Why Consider A Real Estate Investment In The Current Market July 2009
RichardZimmerman
 
PPT
How to Verify a Cycle
jillyshaw
 
PDF
Taller de contes
crizos
 
PPTX
CHI 2012 - EIST workshop
Pedro Santana
 
PDF
El Caimà i el seu amic
crizos
 
PDF
What we look for 
in people when recruiting
Simon Jones
 
PDF
Modern PHP
Simon Jones
 
PPT
Why Consider A Real Estate Investment In The Current Market July 2009
RichardZimmerman
 
PDF
Responsive Web Design: A Case Study with Crossrail
Simon Jones
 
PPTX
Powerpoint from Student Teaching
bridgetaward
 
PDF
Brain Games, BBC and Facebook Fun
Simon Jones
 
PPS
Povestea Pipei Micuta Padureanca
NerLol
 
Evolució Web
crizos
 
Internet awareness educators ISPAB
smt.islam
 
Ispab presentation for journalist : 2013-14
smt.islam
 
How to Create a Cycle
jillyshaw
 
Why Consider A Real Estate Investment In The Current Market July 2009
RichardZimmerman
 
Cpa Cpe Why Consider A Real Estate Investment In The Current Market July 2009
RichardZimmerman
 
How to Verify a Cycle
jillyshaw
 
Taller de contes
crizos
 
CHI 2012 - EIST workshop
Pedro Santana
 
El Caimà i el seu amic
crizos
 
What we look for 
in people when recruiting
Simon Jones
 
Modern PHP
Simon Jones
 
Why Consider A Real Estate Investment In The Current Market July 2009
RichardZimmerman
 
Responsive Web Design: A Case Study with Crossrail
Simon Jones
 
Powerpoint from Student Teaching
bridgetaward
 
Brain Games, BBC and Facebook Fun
Simon Jones
 
Povestea Pipei Micuta Padureanca
NerLol
 
Ad

Similar to Php Debugging from the Trenches (20)

PDF
Preparing for the next php version
Damien Seguy
 
PDF
Preparing code for Php 7 workshop
Damien Seguy
 
ODP
Debugging With Php
Automatem Ltd
 
PDF
Php 7 compliance workshop singapore
Damien Seguy
 
PDF
Module-4_WTA_PHP Class & Error Handling
SIVAKUMAR V
 
PPT
Php Debugger
guest8cd374
 
PDF
Hunt for dead code
Damien Seguy
 
PDF
Modernizing Legacy Applications in PHP, por Paul Jones
iMasters
 
PDF
Php In A Nutshell A Desktop Quick Reference 1st Edition Paul Hudson
ybortwen
 
PDF
PHP 5.3 Overview
jsmith92
 
PDF
So You Just Inherited a $Legacy Application...
Joe Ferguson
 
PDF
Your code are my tests
Michelangelo van Dam
 
PDF
Php 7.2 compliance workshop php benelux
Damien Seguy
 
PDF
Debugging PHP With Xdebug
Mark Niebergall
 
PDF
So You Just Inherited a $Legacy Application… NomadPHP July 2016
Joe Ferguson
 
PDF
Review unknown code with static analysis Zend con 2017
Damien Seguy
 
PDF
PHP Static Code Review
Damien Seguy
 
PPT
Synapseindia object oriented programming in php
Synapseindiappsdevelopment
 
PDF
Debugging - Figuring it out yourself (WordCamp Dublin 2019)
Damien Carbery
 
PDF
The why and how of moving to php 8
Wim Godden
 
Preparing for the next php version
Damien Seguy
 
Preparing code for Php 7 workshop
Damien Seguy
 
Debugging With Php
Automatem Ltd
 
Php 7 compliance workshop singapore
Damien Seguy
 
Module-4_WTA_PHP Class & Error Handling
SIVAKUMAR V
 
Php Debugger
guest8cd374
 
Hunt for dead code
Damien Seguy
 
Modernizing Legacy Applications in PHP, por Paul Jones
iMasters
 
Php In A Nutshell A Desktop Quick Reference 1st Edition Paul Hudson
ybortwen
 
PHP 5.3 Overview
jsmith92
 
So You Just Inherited a $Legacy Application...
Joe Ferguson
 
Your code are my tests
Michelangelo van Dam
 
Php 7.2 compliance workshop php benelux
Damien Seguy
 
Debugging PHP With Xdebug
Mark Niebergall
 
So You Just Inherited a $Legacy Application… NomadPHP July 2016
Joe Ferguson
 
Review unknown code with static analysis Zend con 2017
Damien Seguy
 
PHP Static Code Review
Damien Seguy
 
Synapseindia object oriented programming in php
Synapseindiappsdevelopment
 
Debugging - Figuring it out yourself (WordCamp Dublin 2019)
Damien Carbery
 
The why and how of moving to php 8
Wim Godden
 
Ad

Recently uploaded (20)

PDF
FME as an Orchestration Tool with Principles From Data Gravity
Safe Software
 
PPTX
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
PDF
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
Edge AI and Vision Alliance
 
PDF
Darley - FIRST Copenhagen Lightning Talk (2025-06-26) Epochalypse 2038 - Time...
treyka
 
PDF
Quantum AI Discoveries: Fractal Patterns Consciousness and Cyclical Universes
Saikat Basu
 
PDF
Redefining Work in the Age of AI - What to expect? How to prepare? Why it mat...
Malinda Kapuruge
 
PDF
ArcGIS Utility Network Migration - The Hunter Water Story
Safe Software
 
PDF
5 Things to Consider When Deploying AI in Your Enterprise
Safe Software
 
PDF
How to Visualize the ​Spatio-Temporal Data Using CesiumJS​
SANGHEE SHIN
 
PDF
LLM Search Readiness Audit - Dentsu x SEO Square - June 2025.pdf
Nick Samuel
 
PPSX
Usergroup - OutSystems Architecture.ppsx
Kurt Vandevelde
 
PPTX
01_Approach Cyber- DORA Incident Management.pptx
FinTech Belgium
 
PDF
Open Source Milvus Vector Database v 2.6
Zilliz
 
PDF
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
Earley Information Science
 
PDF
2025_06_18 - OpenMetadata Community Meeting.pdf
OpenMetadata
 
PDF
Database Benchmarking for Performance Masterclass: Session 1 - Benchmarking F...
ScyllaDB
 
PPTX
reInforce 2025 Lightning Talk - Scott Francis.pptx
ScottFrancis51
 
PPTX
𝙳𝚘𝚠𝚗𝚕𝚘𝚊𝚍—Wondershare Filmora Crack 14.0.7 + Key Download 2025
sebastian aliya
 
PPTX
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
pcprocore
 
PDF
Kubernetes - Architecture & Components.pdf
geethak285
 
FME as an Orchestration Tool with Principles From Data Gravity
Safe Software
 
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
Edge AI and Vision Alliance
 
Darley - FIRST Copenhagen Lightning Talk (2025-06-26) Epochalypse 2038 - Time...
treyka
 
Quantum AI Discoveries: Fractal Patterns Consciousness and Cyclical Universes
Saikat Basu
 
Redefining Work in the Age of AI - What to expect? How to prepare? Why it mat...
Malinda Kapuruge
 
ArcGIS Utility Network Migration - The Hunter Water Story
Safe Software
 
5 Things to Consider When Deploying AI in Your Enterprise
Safe Software
 
How to Visualize the ​Spatio-Temporal Data Using CesiumJS​
SANGHEE SHIN
 
LLM Search Readiness Audit - Dentsu x SEO Square - June 2025.pdf
Nick Samuel
 
Usergroup - OutSystems Architecture.ppsx
Kurt Vandevelde
 
01_Approach Cyber- DORA Incident Management.pptx
FinTech Belgium
 
Open Source Milvus Vector Database v 2.6
Zilliz
 
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
Earley Information Science
 
2025_06_18 - OpenMetadata Community Meeting.pdf
OpenMetadata
 
Database Benchmarking for Performance Masterclass: Session 1 - Benchmarking F...
ScyllaDB
 
reInforce 2025 Lightning Talk - Scott Francis.pptx
ScottFrancis51
 
𝙳𝚘𝚠𝚗𝚕𝚘𝚊𝚍—Wondershare Filmora Crack 14.0.7 + Key Download 2025
sebastian aliya
 
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
pcprocore
 
Kubernetes - Architecture & Components.pdf
geethak285
 

Php Debugging from the Trenches

  • 1. PHP Debugging from the Trenches PHP Cambridge, 24 Feb 2014 Simon R Jones, Studio 24
  • 2. Me • Founder & Technical Director of digital agency Studio 24 • Programming PHP since 1999 • Contributor to ZF1 • Contributor to Web Standards Project • Zend Certified Engineer • Organiser of PHP Cambridge and Refresh Cambridge studio24.net
  • 3. What causes bugs
 First steps
 PHP errors
 Error reporting
 Debugging in PHP
 Remote debugging
 AJAX and Web Services
 Legacy software
 Good practises studio24.net
  • 4. “Debugging is a methodical process of finding and reducing the number of bugs, or defects, in a computer program or a piece of electronic hardware, thus making it behave as expected.” – Wikipedia studio24.net
  • 5. “Debugging is a methodical process of finding and reducing the number of bugs, or defects, in a computer program or a piece of electronic hardware, thus making it behave as expected.” – Wikipedia studio24.net
  • 6. ! We want to avoid this! WSOD: White Screen Of Death!
  • 7. Which makes you feel like this..
  • 8. While we’d rather be happily solving problems
  • 11. What causes bugs? • Human error (typos) • Business logic errors • Environmental errors (files, web service, DB) • Client-side errors (web browsers) • External software bug (PHP, Apache, etc) • And sometimes it’s just a feature request or misunderstanding! studio24.net
  • 13. “It is a capital mistake to theorize before one has data. Insensibly one begins to twist facts to suit theories, instead of theories to suit facts.” – Sherlock Holmes, A Scandal in Bohemia studio24.net
  • 14. Understand the issue 1. What did you do? (how to reproduce the issue) 2. What happened? (what’s wrong) 3. What was supposed to happen? (expected behaviour) studio24.net
  • 15. Know your environment • URL • Web browser • Operating System / Device • JavaScript support? studio24.net
  • 17. Gather data • Logs • • Application logs • • Webserver access / error logs (Nginx, Apache) Software logs (Varnish, MySQL) File system • Permissions • File space, check with df -h studio24.net
  • 18. Replicate the issue • Replay steps • Can you replicate it? • If not, what’s different? • Is the data the same? • Are there time-based business rules? • Are you using the same web browser/OS? studio24.net
  • 20. PHP errors • Parse errors • Identified by T_* parser tokens • T_PAAMAYIM_NEKUDOTAYIM 
 issues with static operator :: • Sending headers more than once • Segmentation faults • Exception thrown without a stack frame in Unknown on line 0. Yay! studio24.net
  • 21. syntax error, unexpected T_SL … $heredoc = <<<EOD
 My long piece
 of text on a few lines there’s a space here EOD; <<<<<<< HEAD
 $title = "My updated code";
 =======
 $title = "My old code";
 >>>>>>> master
  • 22. syntax error, unexpected $end in /path/to/file.php on line 27 $heredoc = <<<EOD
 My long piece
 of text on a few lines EOD; there’s a space here // More code here
 for ($x=0; $x<10; $x++) {
 // Do stuff
 } echo $something; but the error reports here
  • 23. Syntax errors Easily fixed with a decent IDE or running lint before you deploy code: php -l /path/to/file.php No syntax errors detected in file.php
  • 24. Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by… <?php a space here $title = "My title"; // More code here
 for ($x=0; $x<10; $x++) {
 // Do stuff
 } or here will flush the headers ?>
  • 25. Headers sent twice errors Easily fixed by separating PHP from your templates and don’t include final ?> in files that only contain PHP <?php
 // Some code
 $title = "Lots of code here!"; // Look Ma, no closing ?> here!
  • 26. Obscure error messages • Segmentation fault - issue writing to memory, usually an internal bug • Exception thrown without a stack frame - exception thrown in destructors / exception handlers studio24.net
  • 28. Error reporting // Development
 display_errors = On
 display_startup_errors = On
 error_reporting = -1 // E_ALL works PHP5.4+
 log_errors = On // Production
 display_errors = Off
 display_startup_errors = Off
 error_reporting = E_ALL
 log_errors = On
  • 29. Error reporting • Any syntax errors in the file that defines error reporting will ignore these settings • Default is to log errors to Apache ErrorLog location, overrides php.ini error_log setting studio24.net
  • 30. Custom error handling • set_error_handler() - PHP errors • set_exception_handler() - uncaught exceptions • Log errors • Log stack traces • Display friendly page to users • Use monitoring for alerts studio24.net
  • 31. Suppressing errors • @ operator • Don’t do it! • Unless you immediately test the result and deal with it • Suppressed errors still sent to custom error handler • Scream to disable! ini_set('scream.enabled', 1);
  • 33. Quick and dirty • var_dump() and print_r() • Very basic, and not that useful • Needs formatting if complex data echo "<pre>";var_dump($stuff);exit; • Xdebug formats var_dump() studio24.net
  • 35. Developer toolbars • Send JavaScript messages to console.log() • Use Firebug and FirePHP to send messages from PHP to the console • Can profile DB queries via Zend_Db_Profiler_Firebug
  • 36. Framework debug toolbars • Useful for quickly seeing information • May slow application down studio24.net
  • 38. Xdebug • Stack traces for errors • Profiling • Remote debugging • Enabled via zend_extension in php.ini • Don’t use in production! • XHProf is designed for profiling on production servers studio24.net
  • 41. Xdebug remote debugging • Enable in PHP.ini via xdebug.remote_enable=1
 xdebug.remote_port="9000" 1. Set breakpoints 2. Run in browser via session, or browser extension 3. Step through code in IDE studio24.net
  • 42. Remote debugging in PHP Storm
  • 44. Debugging AJAX and Web Services studio24.net
  • 45. CURL • Great for quickly inspecting headers curl --HEAD http://domain.com/url • Redirects are aggressively cached in most browsers, CURL isn't • Use it to debug web services • Use Python’s json.tool to format returned JSON curl -s -H 'X-Auth-Token: AUTH_TOKEN’ 
 -H 'Accept: application/json' 
 'http://domain.com/url' | python -m json.tool studio24.net
  • 46. Charles Proxy • Records all requests • Inspect request and response headers • Makes it really easy to debug AJAX • You can include just your test domain to reduce amount of data captured studio24.net
  • 48. Dealing with SSL • Charles acts as a proxy to allow you to inspect SSL requests. • This is the same as a man-in-the-middle attack • You need to authorise your web browser to allow this • Access third-party URLs directly to do this studio24.net
  • 49. “Nothing clears up a case so much as stating it to another person.” –Sherlock Holmes, The Memoirs of Sherlock Holmes studio24.net
  • 50. If you’re stuck get a fresh view • “Rubber duck” debugging • The act of talking through an issue forces 
 you to think logically studio24.net
  • 52. Problems debugging Legacy software • “Spaghetti code” • No organised class/function system • Duplicated code • Dead code • Global variables • Unescaped SQL (and other security woes) • Suppressed errors studio24.net
  • 53. Strategies • Ensure you have a local development environment • Get the codebase into version control • Remove dead code • Review error logs • Debug with Xdebug to understand code flow • Refactor by making small, incremental changes studio24.net
  • 54. Refactoring It Was Like That When I Got Here: Steps Toward Modernizing a Legacy Codebase http://paul-m-jones.com/archives/2667 ! Modernizing Legacy Applications In PHP https://leanpub.com/mlaphp studio24.net
  • 55. Good practises to help make debugging easier studio24.net
  • 56. Good practises • Use a good IDE (PHPStorm, Zend Studio, NetBeans) • Coding standards • Document your code • Filter In / Escape Out • Defensive coding (test all return values) • Automated testing studio24.net
  • 59. “Chance has put in our way a most singular and whimsical problem, and its solution is its own reward” –Sherlock Holmes, The Adventures of Sherlock Holmes studio24.net
  • 61. Useful links Environment
 http://supportdetails.com/ Browser testing
 http://www.browserstack.com/ 
 http://docs.seleniumhq.org/ PHP parser errors
 http://php.net/manual/en/tokens.php Debug toolbars
 http://www.sitepoint.com/prettyblue-screen/ 
 https://github.com/zendframework/ ZendDeveloperTools 
 http://www.firephp.org/ Debugging and Profiling
 http://xdebug.org/
 https://github.com/facebook/xhprof
 https://github.com/perftools/xhgui Charles Proxy
 http://www.charlesproxy.com/ 
 http://techportal.inviqa.com/ 2013/03/05/manipulating-http-withcharles-proxy/ PHP Standards
 http://www.php-fig.org/ 
 http://www.phptherightway.com/ Refactoring
 http://paul-m-jones.com/archives/ 2667