PHP has to be one of the most insulted languages of today. It's right on up there with Java (Visual Basic seems to be a language of yesterday, so it's not included here).
I must say, it's not so bad. From a management perspective, PHP is great. Hosting is plentiful and cheap; PHP programmers are easy to find.
From a server admin perspective, PHP is also great. It's easy to install, and the base install comes with pretty much everything the programmers will need (and then some). Compare this to Ruby, which has a mess of packages (called "gems") that need to be installed.
When PHP came out, it was arguably one of the best suited languages for what it does: making web pages dynamic. You can just embed the little things into the HTML! Wonderful! With Perl you had to put the stuff in cgi-bin and have it execute and output code, but PHP just fits right into the HTML that you already had. It integrates seamlessly with GET/POST requests and session/cookie variables. Database access is easy too, just go mysql_connect and you're set.
I feel though, that it is starting to show it's age. Ruby has some nice stuff now (like Rails) that make it able to compete at PHP's level. Embedded Ruby means you can embed Ruby code just like PHP into the HTML files. The MySQL module for Ruby means that it's just as easy to interact with the database as it is in basic PHP. I'm still not sure how you'd access the GET/POST/session/cookie stuff without Rails, I'll look into this one more.
Nit-pickiness: Some nicer syntax would be good. Having to go $this->something whenever I want to access a member variable is a bit annoying (had a few bugs caused by this). Having to go array(...) to create an array makes some code harder to read, especially with nested arrays.
I wish the language was a bit more object oriented, so you could go ->method for basic types like arrays and strings instead of calling a function. Using array_merge(array_slice()... is somewhat difficult to follow sometimes.
All-in-all, PHP is not so bad. When you apply good software design techniques, there is no spaghetti code and the application is easy to understand. I've seen Java programs with hundreds of classes that feels more like spaghetti code than good PHP code (ok this method called this other method from a different class, let's go figure out what that method does, oh, that method calls 3 other methods of other classes like AbstractWhatTheFuckFactory, now I have to go find those classes and figure out what they do, but it turns out this other class was just an interface and now I need to figure out which class it actually was in order to figure out what's going on, etc...). I still get the feeling that it's trying to be more and more like Java when it appears that the community is moving away from the Java way of doing things.