Learn More About PHP And The Web Platform!

Struggling with your web server, or to scale your PHP application to meet growing demand?

Whether you're running one server or a whole server farm; whether you're hosting on Windows Server or on Linux.

Learn from Stuart's experience with system design, delivery, support and management to help you do a better job and have an easier time.

Beneath Whitby breakwater

This is one of a series of blog posts about my experience competing in the European WinPHP Challenge 2009. Sponsored by iBuildings, Microsoft and Leaseweb, competitors are asked to build a PHP app for Windows Server 2008 and IIS 7 to showcase the FAST in FastCGI. The winner gets travel and tickets to Microsoft MIX 2010 in Las Vagas in March. My entry is “Give It A REST”, a SOAP <-> REST gateway.

In my last post, I’d reached the point where I had a phpinfo() page in the right place, but had run into a problem with PHP for Windows crashing. In this post, I investigate and solve the crashing problem with PHP for Windows, and then get the rest of the tools in place to complete my development environment for this project.

Getting PHP For Windows Working

Today’s job is to figure out why the PHP for Windows installer has installed a non-working copy of PHP, and whether anything can be done about it, or whether I need to switch to using someone else’s PHP build.

I know from many years of experience that IIS and Event logs on Windows are next to useless when diagnosing problems with PHP on Windows. If you’re used to Apache’s (mostly) helpful errors log, it can be a bit frustrating the first few times. Eventually the bruises from banging your head against a brick wall convince you to find a better approach 🙂

So instead, I always prefer to fire up a Command Prompt and see whether or not PHP is actually working when run from the command line. This quickly shows a possible cause of the problem:

C:Program FilesPHP>php-cgi.exe
PHP Warning:  PHP Startup: Unable to load dynamic library 'C:Program FilesPHPextphp_mssql.dll' - The specified module could not be found.
 in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'C:Program FilesPHPextphp_pdo_mssql.dll' - The specified module could not be found.
 in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'C:Program FilesPHPextphp_pdo_sqlite_external.dll' - The specified module could not be found.
 in Unknown on line 0

This is caused by a missing DLL – ntwdblib.dll – which the MSSQL extension needs to use in order to talk to Microsoft SQL Server. It looks like the PHP for Windows installer doesn’t distribute this required dependency, and neither does it check to make sure the dependency is satisfied before allowing you to install PHP.

The best way to get hold of ntwdblib.dll is to copy it from wherever you have installed SQL Server. That way, you can be sure that the DLL is compatible with your copy of SQL Server. Back in the SQL Server 2000 days, you could also get it by installing the SQL Server Client Tools onto your web server (always a good idea; very handy being able to fire up SQL Server Management client to diagnose database connection issues when working in firewalled DMZ environments).

(If memory serves – it’s been 18 months since I did this for a living – the need for ntwdblib.dll will finally go away when PHP has a modern extension that uses the SQLDMO or later API. The MSSQL extension uses TDS to talk to SQL Server currently. Unfortunately, TDS was designed for Sybase and lacks support for useful features in SQL Server 2000 and beyond like unicode. Of course, there’s a downside; switching from TDS will make it almost impossible to use Linux webservers against an SQL Server back-office setup).

The quick fix is to edit php.ini and disable those extensions for now. With that done, http://localhost/phpinfo.php now works. Woohoo! Test case satisfied 🙂

Improving On PHP Performance

One of the best ways to boost the performance of your PHP scripts for free is to download and use Zend Optimizer. If you haven’t heard of it before, Zend Optimizer analyses your PHP code when it is loaded into the PHP scripting engine, and rewrites the bytecode to be more efficient. Zend have made it available as a free download for several years, but now it’s also available as part of the larger Zend Server bundle, where it is known as Zend Optimizer+.

Zend Server’s copy of PHP also comes with APC (the bytecode cache that will be bundled by default with a future version of PHP; I’ve lost track of whether that will be PHP 5.3 or PHP 6), which also boosts the performance of your code. This is something you have to download separately if you use the PHP installer from www.php.net. And it’s also worth looking at Zend Server for its simple web-based control panel to manage your PHP configuration, and (if you buy a license for the product) for its ability to monitor your PHP scripts to see what needs your attention.

I was very pleased with how easy it was to install and configure Zend Server. Like the community PHP installer, it doesn’t seem to support anything other than the default web site, which is a serious oversight for use in larger organisations, but otherwise its ease of use is exactly what your average Windows PHP dev would appreciate.

Interestingly, when it comes to databases, Zend Server doesn’t include the PDO extension for SQL Server. I had a very quick go at taking PHP.net’s build of pdo_mssql and installing it into Zend Server’s build of PHP, but unfortunately Zend Server reported that the extension failed to load. The problem is that PHP.net’s release of PHP (and extensions) is built with thread-safety on, but Zend Server’s release of PHP is built with thread-safety off. It’s not for me to say which one is right, but it does mean that the two different releases appear to be binary incompatible.

And that is something that can’t be good for the PHP community on Windows overall.

(PS: make sure you un-install the community version of PHP for Windows before installing Zend Server. If you use Command Prompt to run Zend Server’s php.exe, it goes and loads the php.ini file from the community version of PHP first, which created some interesting problems whilst preparing this article. Basically, if you manage to screw up PHP so it can’t run, the Zend Server control panel stops working precisely because it is written in PHP. A bit of an egg/chicken situation there).

Choosing A Database Server

Most web-based applications today use a RDBMS to store and retrieve their data. Microsoft have made a baby version of their heavyweight SQL Server product available for developers to work with.

Microsoft has made it easy to get SQL Server Express through their Web Platform Installer. They currently have a beta 2.0 release out that also includes bundled PHP. However, I can’t recommend this approach at the moment because of the licensing terms, which state that this is pre-release software that you’re not allowed to use in a “live operating environment”, and that your rights to use the software expire at the end of June 2009 or whenever a commercial version of the platform installer is released – whichever happens first. I don’t have a problem with closed-source software, but I do object to software with expiry dates. (I accept that I’m in a minority on this).

SQL Server “Express” is a fat lady … 218 MB in size. Definitely not something I can download over mobile broadband whilst traveling to and from the office! By contrast, MySQL RPMs for RedHat Enterprise Linux 5 weighs in at a positively svelte 28.2 MB – almost a tenth of the size. And it comes with more features. But, as I’m actually quite a fan of SQL Server, I’m going to add it to my dev environment.

The list of download options might be too cryptic for some developers:

Download Options For SQL Server Express

For 32-bit systems, download the _x86_ file. For 64-bit systems, download the _x64_ file. Perhaps Microsoft might want to put suitable descriptions on this list, for folks who aren’t sure which file is right for them?

Oh, and don’t forget to download the dependencies listed earlier up the page; they’re not present on a fully-updated Windows Server 2008 install. I swear, it’s just as bad as using a RedHat box 😉

Choosing A Version Control System

If you don’t use one already, you should. Version control systems are an essential part of any development environment, even for one-man hobby projects such as this one 🙂

My VCS of choice is git. Subversion runs well on Windows, and has for years, but I’m very mobile and absolutely need the ability to make commits whether or not I have internet access at the time. (Walk in my shoes for a week, and you’ll find the idea that we’re now “always connected” somewhat laughable). I don’t make anywhere near full use of git’s many excellent features; like many folks I’m waiting for the books on git to appear later this year.

There’s a port of git for Windows from the msysgit project on Google Code. I haven’t used it before, so it’ll be interesting to discover how well it works.

Choosing A PHP IDE

I’ve used phpEclipse on Windows for PHP development for several years, but the guys at worked convinced me to switch to using the Netbeans nightly builds instead. The demise of Sun earlier this week has cast a shadow over whether or not Netbeans has a future (Oracle in the past has not been a supporter of Netbeans), but until someone pulls the plug, it’s my IDE of choice. As with git, I’ve never used it on Windows, so it’ll be interesting to see how well it works.

Using Netbeans also means downloading Java – which you need to do before you can install the PHP bundle of Netbeans. Downloading Java for Windows is a two-step process; you download a small installer first, and when you run the installer it goes off and downloads the complete Java standard edition as a second step. I’ve never understood why Sun do this; perhaps it’s their way of ensuring that you always have the latest version of Java available when you actually do the install? Answers on a postcard please 🙂

Netbeans currently only supports the excellent xdebug extension for PHP for single-step debugging. It doesn’t support Zend Server’s own zend_debugger extension. (Does anything, other than Zend Studio?) I had no luck at all getting any of the xdebug DLLs working with Zend Server; both the thread-safe and non-thread-safe versions cause Zend Server’s copy of PHP to crash. I haven’t actually tried it, but I expect that the xdebug DLL works absolutely fine with the PHP for Windows from php.net.

Hrm … it’s been a tricky decision, but for now I’ve decided to stick with Zend Server, because I want to evaluate how useful its built-in monitoring is. If the lack of xdebug becomes a problem, I can always setup a second website under IIS w/ PHP from PHP.net and just switch between the two.

Completing The Development Environment – Visual Studio

To finish my development environment, I need something for building & debugging .NET code. (Part of my application needs to be built in .NET). Again, thanks to the folks from Microsoft who attended the PHP UK Conference 2009, I have a 1 year evaluation license for Visual Studio 2008 Standard Edition. From the install screens, I’m led to believe that updates for Visual Studio are downloaded using Windows Update. But Windows Update states that there are no updates available.

I’m having a bit of trouble believing that 🙂

The Development Environment – Recap

With the development environment now up and running, I thought it would be useful to recap on what the full environment looks like.

Note that I have chosen not to spend money on anti-virus software for Windows, because the VM will be used for a one-off project and then destroyed. If Windows was your regular dev platform, you’d need to invest in anti-virus and anti-spyware software, and pay a regular subscription in order to keep it up to date.

With downloaded installers and temporary files deleted, the overall size of the Windows Server 2008 virtual machine now stands at 10.54GB according to OS X, and 11.3 GB according to Windows Server 2008. I’m left with only 4GB of free space under OS X, and will be spending the evening looking for ways to free up a bit more space!

How do I feel about the development environment? A little disappointed, if truth be told. Under Windows, I’m largely stuck with building the development environment from the pre-built components other people have made for me. That’s fine, until combining those components reveals compatibility and/or quality problems.

It’s worth pointing out how useful Twitter has been during this work. I’ve had no less than three folks from Zend responding to my tweets, including their CEO and the Zend Server product manager. I’m not a Zend customer, nor am I known to be a Zend advocate. At work, we spend more with organisations like VMWare and Netsuite than we could ever need to spend with Zend, and yet their support simply doesn’t match up to how responsive Zend has been.

Next Steps

With the development environment built, it’s time to turn my attention to the app I’m going to build. Before I write any code, I need to sketch out a design for the app, and probably do some R&D on the components that will be completely new to me. I’m unlikely to write any PHP code for some time yet.

Be the first to leave a comment »

This is one of a series of blog posts about my experience competing in the European WinPHP Challenge 2009. Sponsored by iBuildings, Microsoft and Leaseweb, competitors are asked to build a PHP app for Windows Server 2008 and IIS 7 to showcase the FAST in FastCGI. The winner gets travel and tickets to Microsoft MIX 2010 in Las Vagas in March. My entry is “Give It A REST”, a SOAP <-> REST gateway.

When it comes to software development, I’m old fashioned. I’m a firm believer that you should develop and test on the platform that you’re going to ship your code for. And that means getting Windows Server 2008 installed somewhere convenient. My primary test case for this step is to be able to publish the output of phpinfo() at http://localhost/phpinfo.php via FastCGI on IIS 7.

As it has been over 18 months since I last used Windows Server, I hope my experiences prove helpful for anyone else going through this for the first time.

  • Getting Windows Server 2008 Installed
  • Installing IIS 7
  • Downloading PHP 5.2.9 for Windows
  • Choosing A PHP Install
  • Creating The Phpinfo File
  • Testing The Phpinfo File
  • Next Steps

Getting Windows Server 2008 Installed

Convenient for me means VMWare Fusion running on my MacBook Pro. My laptop is my main machine, and I’m too mobile to make software development via Remote Desktop practical. Thankfully, I have a Windows Server 2008 license which the folks at Microsoft dropped into my hands at the recent PHP UK 2009 Conference. But what I am short of is disk space. (Last week, I replaced my MacBook Pro’s hard drive with one of those very nice Samsung SSD’s. Actually, “nice” doesn’t remotely do it justice, but what you get in performance you lose in capacity 🙁 )

It took three attempts to get Windows Server 2008 up and running under VMWare Fusion. First attempt failed because the internal DVD drive couldn’t read the install media. I suspect the DVD drive is faulty, although the install media is somewhat scratched fresh out of the packaging. Second attempt failed because VMWare Fusion crashed. I’ve never seen Fusion crash before, so that was entertaining. Third time lucky, up and running …

… and waiting for the inevitable critical updates to download and install. And then the next batch. It’s an unavoidable process, no matter which OS you choose, to be fair, but it would be less wearying if Microsoft batched up the fixes into service packs much more frequently, in order to save time and reboots. (This blog post is particularly verbose because I have plenty of time waiting for things like Windows updates and other downloads. Future posts will be much shorter!)

So, a minimal installation of Windows Server 2008 has taken up 9.44 GB of space so far, leaving me with just 6 GB of space left on my computer. With IIS 7, Visual Studio and SQL Server still to be installed, plus a PHP IDE, I can see that this is going to be a problem. (By contrast, my Ubuntu desktop install, all in, weighs in at only 7.7 GB of used disk space). I might just have to archive my CentOS server test VM for the duration.

Installing IIS 7

Next step – get IIS 7 installed. Hrm … it doesn’t appear on the list of features that Server Manager knows about. But it doesn’t appear to be installed yet either. Where the frack is it? Answer: Windows Server 2008 uses the concept of roles. Pop into the roles section of Server Manager, and you’ll find IIS 7 there. Click through to the ‘Next’ page to go through the Web Server options in detail, and … where is FastCGI? There’s no mention of it at all.

It seems to be bundled with the CGI option. Perhaps a future update from Microsoft could update the description to mention that? Folks used to a Linux platform are also used to having different web server modules for CGI and FastCGI features.

Downloading PHP 5.2.9 For Windows

Before we can configure IIS 7 / FastCGI, we need a copy of PHP for Windows. I thought that it might save time to simply download Zend Server CE for Windows and see how that went. Unfortunately, when I checked this evening, the Zend Server downloads page didn’t list any downloadable packages for Windows, so that wasn’t an option. (Update: the downloads work now. Many thanks Zend).

Not a problem, thinks I … I’ll just download the pre-built PHP for Windows binaries from www.php.net.

Until now, I’ve resisted talking about how annoying the infamous User Account Control (UAC) feature of Windows Vista / Server 2008 is. I don’t want these blog posts to be a review of Windows Server. But as annoying as it quickly becomes, UAC is nowhere near as annoying as the Trusted Sites feature of IE. Especially because this feature stops you from downloading the PHP for Windows binaries from www.php.net. It doesn’t ask me whether I would like to allow the download. It just refuses to download the ZIP file that I have clicked on, presumably because www.php.net actually sends back a redirect to a local mirror.

I couldn’t quickly spot a way to disable the Trusted Sites feature of IE (the controls are disabled in IE’s Options dialog box). Not a problem, thinks I; I’ll just download Firefox and avoid using IE … Guess what? The Trusted Sites feature of IE stops you downloading Firefox too … again, presumably because the download link on Mozilla’s page sends back a redirect to another server. (Mozilla might want to do something about that; they must be missing out here).

The way around it is to go into Security Manager, and down on the right hand side of the initial page is a link to Configure IE ESC. Click on that, then you can switch Trusted Sites off for administrators or all other users. It would have been much better if the UI for IE told me about this, or even offered me a click through to the feature.

I can understand where Microsoft are coming from: best practice for avoiding infections of malware and viruses from the ‘net is to avoid using IE on your servers at all. It’s a consequence of putting a desktop environment on a server (you’d never find a good Linux sysadmin putting a desktop environment onto a Linux server), and a legacy of that environment being Windows. But, for a development environment, it’s reasonable to switch this feature off, so I did.

And then promptly downloaded Firefox 🙂 Apart from seeking an escape from the annoyances of IE, there are two very good reasons for ditching IE for Firefox. Firebug, and FirePHP. I intend to use both as part of this competition.

With Firefox installed, I re-enabled IE ESC, and then promptly forgot about it and IE. Forever. When will Microsoft learn that a good UI can make someone an advocate, and a bad UI (like the one around IE ESC) can make someone a detractor?

Choosing A PHP To Install

php.net provides two different bundles of PHP for Windows for download. You can download a ZIP file, and install the binaries yourself, or you can download a nice Windows installer, and let it do all the work for you. When I used to do this sort of thing on a regular basis, I used to build PHP on Windows from source, so I thought it would be interesting to look at the Windows installer first.

And it’s quite nice, I have to say. It provides the option to configure IIS with FastCGI for you (which sounds like it’ll save a lot of hassle … will that be famous last words? 🙂 ). On the down side, it doesn’t support installing multiple copies at once (how are you supposed to test your code against new releases of PHP if you can’t install multiple copies on the same dev box?), and by default it has every PHP extension marked to not be installed (which might trip up quite a few folks).

It also doesn’t ask you which website(s) you want configured to use PHP/FastCGI. This is a common problem with anything on Windows that tries to automate configuration of IIS. This doesn’t matter for development, where you’ll just publish the one website (an IIS website is roughly equivalent to an Apache virtual host), but on production servers publishing multiple websites, this quickly becomes a problem. It would be nice to see Microsoft sponsor someone to create a first-rate installer for PHP for Windows.

Creating The Phpinfo File

With IIS automatically configured by the PHP for Windows installer, all we should need to do to satisfy my test case is to use Notepad to create a suitable PHP script and drop it into the right place, right? After all, I’m deliberately using a user with Administrator privileges because this is a dev box and I don’t want to waste time working around security that this dev box just doesn’t need.

Sigh. Think again.

Notepad tells me that I don’t have permission to save into the wwroot folder (c:inetpubwwwroot, if you’re not sure where it is). Hrm. What’s behind this hold up? Do members of the Administrators group have permission to create files in this folder? Yes. Am I a member of the Administrators group? (You’ll find that in Server Manager, under Configuration -> Local Users and Groups). Yes. Can I save files to the wwwroot folder? No.


In the end, I worked around this by explicitly giving my user full control over the wwwroot folder. I’m not happy about having to do this, but I’ve already lost enough time to dealing with Windows security features tonight.

Testing the Phpinfo File

Although I don’t have a complete PHP dev environment yet, I should now have enough to be able to see the phpinfo page in Firefox, right? Point browser at http://localhost/phpinfo.php. Drum roll please!

Oh dear. 500 internal server error, and a crash dump automatically uploaded to Microsoft. PHP 5 crashed according to the event logs. Oh ffs.

Next Steps

Well, the good news is that (so far) running Windows Server 2008 in a VM isn’t particularly painful, performance wise. I’ve been able to multitask just fine whilst waiting for downloads and updates and reboots and so on. This is mostly down to the Samsung SSD, as my machine certainly doesn’t have enough RAM to do this when paging out to a traditional hard drive! It will be interesting to see how well it continues to cope with Netbeans and Visual Studio open at the same time when I actually get to write some code 🙂

The bad news is that, three and a half hours after starting the task, I don’t have PHP/FastCGI up and running on Windows Server. Close, but no cigar.

I’m going to call it a night, and take another look at this on Wednesday. Andi Gutmans from Zend has kindly tweeted me a download URL for Zend Server for Windows. That’s downloading now, and I’ll be switching over to that on Wednesday.

In the meantime, good luck to everyone else in the European WinPHP Challenge. I hope you have more success with your dev environment than I’ve had tonight.

Be the first to leave a comment »

I had word today that my entry into the European WinPHP Challenge 2009 competition had been accepted. As I haven’t seen anyone else blog about it yet, I’m starting to wonder how many participants there are 😉 (Someone should setup a Planet WinPHP Challenge site or something).

Seriously, the competition is a good idea. During my four and a bit years working on a proprietary PHP CMS for Box UK (2003-2008), about half of the customer base chose Windows Server as their server platform. Generally, folks choose to deploy web-based applications on Windows Server because they already have Windows Server. Selling them something that will only work on Linux is a tough sell, so a competition like this that seeks to show off how well PHP works on Windows should be another small step forward for all those small ISVs like Box UK who want to sell products written in PHP – provided Microsoft actually do something marketing-wise with the results.

The tag line for the competition is: “To help show how well PHP runs on Windows, we are holding the “European WinPHP Challenge” to showcase the FAST in FastCGI.” (their emphasis) So I figure an interesting showcase would be to build an app that combines PHP and .NET into a web services gateway.

And, it would actually be useful.

PHP’s SOAP client falls somewhere between being a toy and a joke, depending on how much your job depends on it working against real enterprise services. Because these services are built in .NET (or Java) for other .NET programmers to use, they exploit the full expressiveness of SOAP (well, the automated wizard that builds the service does, but you get the idea 😉 ) without any thought of toning things down to remain interoperable with PHP. It’s a source of great frustration at work.

So my competition entry is called “Give It A REST”, and the idea is to create a SOAP<->REST gateway using PHP and .NET, running under IIS7, before the end of May. My primary test case is being able to interface with the SOAP APIs published by Netsuite and Daptiv from PHP via a RESTful interface. The PHP client will be remote; it will not be running on the same box as Give It A REST. And the PHP client won’t be using SOAP at all.

Should make for an interesting six weeks or so 🙂

Be the first to leave a comment »

Some Thoughts On Netbeans

Posted by Stuart Herbert on March 26th, 2009 in Opinion, Toolbox.

When it comes to IDEs for working on PHP projects, I’ve been a relatively happy user of phpEclipse for several years. (Tried Zend Studio, but never managed to convince Zeev about how much it sucks). But when the guys in the office started switching over to Netbeans, I thought it would be interesting to take a look for myself.

I’ve been using several of the nightly builds on both Linux and OS X for about a month now, after reading on Planet PHP about the UI improvements vs Netbeans 6.5. Apart from one bizarre problem, in general the nightly builds have performed well; I haven’t come across any major bugs in the builds. I don’t care about integrated source control, deployment or Apache management. What I care about is a solid IDE that saves me time, and helps me quickly work with larger PHP projects where I’m not yet intimately familiar with the code.


  • Performs well enough … keeps up with my typing.
  • Code completion works more often than not.
  • Doesn’t have the annoying lockups that Eclipse-based editors suffer when they decide to rebuild the project.
  • Code refactoring (BIG time saver) worked every time I tried it.


  • A real memory hog – my copy is using half a gig of RAM with just 4 editor tabs open. Ignore the memory usage that displayed inside Netbeans itself (which currently claims 99MB being used); it’s either selective in what it monitors or is just plain fubar.
  • Doesn’t use any native controls on OS X; looks fugly and doesn’t mimic standard OS X dialog boxes or behaviour.
  • Too many dialog boxes; UI could be simplified with in-place editing or just skipping the dialog box completely (a la phpEclipse).
  • No shortage of time-wasting UI design, such as not auto-populating the Find in Projects search field.
  • No context-sensitive help on F1.
  • No bundled documentation for PHP itself.
  • xdebug support no use to me. I was unable to debug a CLI script, and I was unable to debug a website unless I went through the website’s homepage first.
  • phpUnit support no use to me either. To use phpUnit from inside Netbeans, it requires all the tests to be in a separate folder tree. I choose to keep my tests in the same folder as the code under test.

I did find one bizarre problem with it. I was editing code stored on a networked drive whilst on the train, and I went through a blackspot which caused the networked drive to become disconnected. Netbeans did the sensible thing of marking all the open files as read-only, but once I had re-attached the networked drive, I couldn’t then save these files at all. Fair enough, I thought – I’ll just open the file again in another tab and copy and paste my changes across. Sadly, Netbeans wouldn’t actually copy the content of the read-only files into the clipboard at all.

Overall, I feel that Netbeans is a good editor, and I’m still using it every day on Linux (but not on OS X). The IDE features that relate directly to code all appear solid enough. The issues with phpUnit aren’t a big deal for me, but it would be nice to see the xdebug support overhauled and made useful one day.

Just a shame they can’t do anything about the fact it uses Java … 🙂

Be the first to leave a comment »

Finding Ada

Posted by Stuart Herbert on March 24th, 2009 in Opinion, PHP In Business.

If you’re a regular reader of Planet PHP (and if you’re not, you should be), you’ll know by now that today (March 24th) is Ada Lovelace day. The idea is to throw a spotlight on female role models in tech, in order to encourage more women to get involved in technology work and roles in the future.

The need to do this was made very clear when I sat down to put this post together. I’m sad to say that I simply don’t work with any women in technology atm, and I’m struggling to think of any female programmers that I’ve worked with over the last 18 years. (I’ve sent Sara a patch or two for runkit, but I don’t think that counts as having worked with someone). I’ve worked with female product managers, project managers, and marketing consultants, but with only one notable exception I wouldn’t say they worked in technology, but around the male-dominated teams who did.

The research that has inspired Ada Lovelace day talks about women having a stronger need for suitable role models than men do. But the question that’s been praying on my mind today is this: what else do we need to do to make working in technology more appealing to women? Leaving aside the behavioural problems in male-dominated environments for a moment, are there changes to technical tools and practices we could make that would play more to the psychological strengths of women?

Be the first to leave a comment »

Thank you to everyone who came to my talk about Gradwell’s experience of Living With Frameworks at the PHP UK conference last Friday. It was very humbling to have such a large audience, especially as I was one of the least-known folks on such a strong list of speakers, and I really enjoyed meeting everyone who came up to me afterwards to share their own experiences.

If you were one of the 40 or so folks who had to be turned away from the talk, the slides are now available, and I’m sure the video of the talk will be online soon. We’re also trying to sort something out so that I can come and present a shorter version of the talk at one of the monthly PHP London meetings later in the year.

A big thank you to everyone involved in organising and sponsoring such a great conference. I’ve run a couple of small conferences in the past, so I know what it’s like and just how stressful it can be. I thought you did a great job, and I’m already looking forward to an even better conference in 2010 🙂

Oh, and if you ever get the chance to see Aral Balkan talk, do so. His opening keynote at the conference was hugely entertaining and (imho) spot on too, and he gave everyone such a lift for the rest of the day.

1 comment »

The PHP UK conference is tomorrow at the Olympia Conference Centre in London – and there are still a few tickets left. Why not come along tomorrow and join us for what will be a great and informative schedule of talks?

Be the first to leave a comment »

Zoe invited me to go down to IBM Hursley yesterday to deliver my talk about building Twittex from PHPNW and to also meet the Project Zero team. I had a great time, and the folks from IBM made for a very engaging and collaborative audience. It was particularly nice to meet Ant in person; he’s currently one of the better bloggers about PHP imho and as a community we sure could use more folks writing to his standard 🙂

If you haven’t heard of it before, Project Zero is a new implementation of PHP running on top of J2SE. It gives you the ability to run PHP in an environment that eventually should out-perform the Zend Engine (which will be very welcome here), plus the ability to pull in and make use of many excellent Java libraries that have no equivalent in the PHP world (like, for example, a SOAP client that isn’t a toy …)

Higher performance is important to ISVs in particular, because as you get away from non-trivial apps and get your caching strategy mature, the bottleneck moves from the database back into the amount of CPU available for the web server. Over here in the UK, servers are expensive, and hosting them even more so. There is real money to be saved by not requiring extra servers.

But my personal interest with Project Zero is evaluating it as a platform for API integration and development. Many of the products I need to integrate with are .NET based, and their APIs make a fairly rich use of SOAP. So the first thing I’m going to try with Project Zero is a little app to merge data between our ERP platform and our project management platform – two platforms that PHP’s SOAP client struggles with at best. I’ll let you know how I get on 🙂

Be the first to leave a comment »

I was just reading Derick’s post about the recent get together with Microsoft, and it occurred to me that so far, I haven’t seen anyone mention anything about the single most important problem with running PHP in production on IIS. After a bit of digging, it looks like the problem has been sorted since the initial IIS 7 release (presumably, if you’re still running Windows Server 2003, you’re still screwed on this one), but I’d love to hear from folks who have definitely done this in production.

Let me explain the background first. When you run PHP apps using IIS, you’re much better off using IIS’s native CGI support (slow, but rock-solid as of Windows Server 2003 SP1) or the new FastCGI support that was released last year or the year before (faster, but I haven’t tested it personally under serious stress, as I’ve managed to move back to working exclusively on Linux this year). I’ve tried PHP via IIS’s ISAPI interface, but as that requires running PHP in a threaded environment, I’ve never had any luck in getting it working in a stable manner over the years. Besides, iirc, both Microsoft and Zend recommend running PHP using FastCGI on IIS anyways.

Running PHP via CGI and FastCGI means that IIS has to do the Windows equivalent of fork()ing off PHP processes to do the actual PHP bit. If your box has too many PHP processes running, the box will start to swap. Once a webserver starts swapping, you’ve no chance in hell of keeping up with all the incoming requests, and your websites on that particular webserver become unavailable in a matter of moments. Restarting IIS will clear off all the PHP processes, but if demand remains the same, the webserver will start swapping again very soon and you’re back to square one – your websites back to being unavailable to the outside world.

With Apache and mpm-prefork, mpm-peruser or mpm-itk, you can adjust Apache’s settings to make sure that your server never swaps. With Apache and PHP/FastCGI, you can do this too by adjusting the number of FastCGI processes created. (Although, atm, I don’t recommend using Apache + PHP/FastCGI in production environments).

But how, exactly, do you do this with IIS and PHP/CGI or PHP/FastCGI? The answer can be found in the IIS 7 documentation. It looks like you can limit the number of FastCGI instances per application pool (IIS best practice is to setup a separate application pool per website. IIS’s architecture is nothing like Apache). That’s fine for servers running just the one website, but is there a way to set a similar limit that applies across all application pools? It would be great if there was. And I’m not sure that there’s a way to do this with CGI, if you have problems with FastCGI crashing.

Love it or hate it, Windows Server is the right choice for many firms, and the better PHP runs in a Windows Server production environment, the more opportunities there are for firms and individuals that create PHP apps in the future.

Be the first to leave a comment »

Job Vacancies at Gradwell

Posted by Stuart Herbert on December 15th, 2008 in News, PHP In Business.

I’m currently looking to fill two new vacancies at our office in Bath. I’m looking for a Senior Sysadmin (permie) and a Storage Engineer (contract) to come in and help us as we grow our award-winning business in 2009. These roles will be assisting us with our email and hosting platforms. If you’re interested, drop me an email. No agencies, please!

Who are we? Gradwell is a rapidly-growing ISP who focuses on broadband, email, web hosting and VoIP solutions for the UK SME market. We are a pioneer in VoIP, and are the leading VoIP provider for UK business. We also do fun things like Twittex, which I talked about recently at the PHPNW 08 conference.

Be the first to leave a comment »
Page 14 of 18« First...1213141516...Last »

This Month

January 2018
« Jul