NOTE: This article has a follow-up worth reading
A day ago my PHP life was good. I was coding with Zend Studio 5.1 with the Zend Studio Server for remote debugging on my local machine. It was all fairly lightweight when compared to my Java equivalent of IBM Rapid Application Developer 6 (RAD6) installation yet it covered all the basic things I needed out of an IDE.
Today I’m asking myself “Why did I upgrade to Zend Studio 5.5?”. I’ve never hidden my dislike for monolithic development environments like the bloated IBM RAD 6 that tries to dumb down everything by providing a GUI to manage everything from hibernate and struts configuration to simple run of the mill properties files. In the end all they manage to do is increase complexity…the opposite of their aim.
One of the selling points of PHP is it’s powerful simplicity but it seems Zend would like be the Application-Server-Development-Environment-All-In-One of the PHP world…something they definitely should not aspire to. So without dragging this out even more let me run down the problems I saw.
- First problem is the pipe to Zend was terribly slow. 20KB/sec wasn’t unusual and when you have a download of around 70MB it’s nothing short of painful. Now before people say that’s a very unscientific thing to say understand that I do know about how networks work so when I say the pipe to Zend I really do mean the pipe to Zend, not issues on the way to Zend. Ok, whatever, time isn’t a huge deal I kick off the download and go play with my kids for a while.
- One of the first questions your are asked is if you want to install Zend Platform for remote debugging. Don’t let this simple question fool you, you had better really think this through. Saying “no” means you won’t be able to do debugging other than using the internal debugger inside of Zend Studio with their built-in browser which is most likely is not the same version of PHP you may have installed in your corporate PHP environment and very likely doesn’t include some of the PHP libraries you’d like. On the flip side of this, it is easier to manage and would probably meet my expectations on keeping things simple. Now I was looking at Zend Platform as the replacement for Zend Studio Server which is largely true but this was an assumption that eventually made upgrade to Zend Studio very painful.
- Eventually you’ll be given a download dialog to grab Zend Platform…a roughly 50MB file at the brutal 20KB/sec. Kids are happy as dad’s got more time to play the “tickle game”. I come back and start the install and it pukes because I don’t have Zend Core 2. Unfortunately the installer was smart enough to download and install Zend Platform but not smart enough to download install Zend Core 2? That’s a huge oversight in my opinion. Another 55MB (that’s nearly 200MB for those keeping score).
- Ok, but let’s first discuss what Zend Core is really. Zend Core is a bundled PHP environment from Zend that is “certified”. It can include things like installing PHP, various extensions, the still very beta, very promising Zend Framework, MySQL and phpMyAdmin, Apache 2 and optionally drivers for Oracle and IBM databases. What’s irritating about this? If you like to keep the latest Apache or PHP installations on your machines and don’t want to wait for Zend Core to catch up to the latest version of PHP you had better avoid installing Zend Core.
- Now you’ll recall that I didn’t have Zend Core installed so I installed it and am now ready to install Zend Platform. In this situation you will be asking yourself “How do I do this”. See, it was downloaded as part of the Zend Studio installation but failed to install so my assumption is this installation exists somewhere on my PC, right? Let’s find out. I first try the “Temp” folder for my user under Windows XP Professional. Nope. Just in case I try the Temporary Internet Files which yielded nothing. Then I went to my C:\WINDOWS\Temp folder and still nothing. Having exhausted the easy guesses I do a search for any file with “Platform” in the name that is greater than 1MB with a modified date of today (4/10/2007). That did manage to find it under c:\Program Files\Zend\ZendStudio-5.5.0\packages as ZendPlatform-Windows.exe. Good, I just saved myself another brutal download!
- Now for the kicker, I run the installation of Zend Platform and I get to the licensing portion of the install when I have a Eureka moment. The difference between Zend Studio 5.1 and Zend Studio 5.5 is you can’t to remote local debugging. Ok, I know you are asking me what does “remote local debugging” mean. Under 5.1 I could debug using my preinstalled Apache and PHP5 configuration by making a “remote” connection to my local web server instead of running it under the PHP binary provided with the IDE. That’s because Zend Studio 5.1 included Studio Server. Under 5.5 you can no longer do this because a Zend Platform license, unlike Studio Server, isn’t part of what is included under your Zend Studio license. Why is this not ideal? By not using the PHP binary that Apache is using you may get unexpected differences in behavior when you debug against PHP under Apache than you would under the IDE’s PHP binary. In 5.1 I got in the habit of never using the local debugger as it was acting inconsistently with our established PHP web server environment.
So what have I concluded out of all of this? As clearly as I can state it here is the big problem. With Zend Studio 5.1 you could install Studio Server with no additional fee outside of the Zend Studio license. This allows you to debug via your local Apache instance running PHP. To get the same feature set out of Zend Studio 5.5 you would have to buy Zend Platform separate. My hunch is the folks at Zend expect developers to debug on their local desktops with only the internal debugger which *can* produce different behavior than that under your web server environment. It’s not good if your debugger can exhibit different behavior than your web server. I should also note that remote debugging with Zend Studio 5.1 while serviceable was not the most stable. It would occasionally kill Apache, possibly require me to restart Zend Studio or rare cases even force me to reboot.
Zend Core isn’t very useful to me as it’s just a “certified” bundle of PHP, Apache and other stuff. If you feel comfortable configuring all that yourself then you don’t need it. If you find managing the installations of PHP, Apache separate a pain and you wanted a more well tested (and older) environment then it’s a good fit.
Zend Platform can be useful for server management (clustering, session management, etc), tuning and monitoring of a server grade PHP installation, however, note you will not be using APC. This is a source of frustration for me as APC is rumored to be included with PHP6 by default. APC gives you opcode caching *and* shared memory support. Zend Optimizer does opcode caching but not shared memory and as far as I know nothing Zend specifically offers gives you shared memory support out-of-the-box. Zend Platform requires Zend Optimizer so if anybody out there can tell me how you can run Zend Platform with APC replacing Zend Optimizer I’d love to know how. Also licensing of Zend Platform is not the most compatible with the trend of virtualized computing environments.
All this isn’t to say that a PHP application server doesn’t have value but it seems Zend is trying to cater to the bigger PHP shops with deep pockets and continues to ignore the needs of smaller customers or customers with smaller pockets. Even more frustrating is that they seem to ignore government as key source of revenue…they don’t have anybody on their tasked with the sole responsibility of working with state and local governments which, frankly, can benefit more from PHP than bigger, spendier IT shops.
I know this is just the perspective I have and I don’t claim to be an expert on Zend products but I am affluent with PHP and Apache in general and things just shouldn’t be this painful. If others have perspectives that differ I’d love to hear about it and if others can confirm the problems I see not only with the Zend products but the general direction of Zend I’d love to hear your take.