Saturday, June 27, 2009

How to debug a Zend Framework application in Ubuntu

Why I wanted to debug Zend Framework
I got started with CodeIgniter, and I later found out that it's designed to not work well with debuggers. There are CodeIgniter forum posts dating as far back as 2007 where you can get instructions on how to patch the source code and tweak the config files so that query string (GET params) work, which XDebug and Zend Debugger both need to work. I spent hours trying to debug with Aptana PHP (plugin 1.0 and 1.1 Beta) and Eclipse PDT, and failed. I decided to trash a framework so backwards as CodeIgniter.

How to
If you don't want to install Zend Platform (the paid PHP server), it may not be much too intuitive how to hit the ground running with a sample Zend Framework project and be able to debug it. Here's who I finally managed. (I use Ubuntu 9.04)

echo 'deb http://repos.zend.com/deb/ce ce non-free' | sudo tee -a /etc/apt/sources.list
wget http://repos.zend.com/deb/zend.key -O- | sudo apt-key add -
sudo aptitude update

sudo apt-get install zend-ce

Add PHP to your path:
sudo ln -s /usr/local/zend/bin/php /usr/local/bin/php

  • Install Zend Studio for Eclipse from http://www.zend.com/en/products/studio/downloads. I used Studio 6.1. Zend Studio is not free! It costs $400 and comes with a 30-day trial. You can try also with Eclipse PDT, which is the free (scaled-down) version of Studio.
  • Download the project Zend Quickstart and unzip it. I renamed my directory zend-quickstart. We'll call the root <path to project's root>
In <path to project's root> run, as instructed by the README.TXT file:
php scripts/load.sqlite.php --withdata
chmod -R a+rwX data
  • Counter intuitively, the Debug command in Zend Studio doesn't actually deploy your project to the PHP server, so you need to do that yourself. By default the document root for Zend CE is /var/www
ln -s <path to project's root> /var/www/myprojecturl   (you can change myprojecturl obviously)
Now you can access the project at http://localhost/myprojecturl
  • Back in Studio, go to Run==>Debug Configurations. Configure this:
File: zend-quickstart/public/index.php
Server Debugger: Zend Debugger

Click PHP Server Configure. Go to Path Mapping tab, and Add:
* Path on Server: myprojecturl
* Local path: /zend-quickstart

Make sure the URL generated is correct. Should be /myprojecturl/public/index.php
  • Cool! Click the Debug button now, and the debugger should be stopped at the first line of the index.php script. Breakpoints should work.

1 comment: