"There's no function to modify one part of the URL"
Because you're running a front loaded controller, duh. Check your Cake how-to don't blame PHP.
Third party frameworks are required for basic web functionality, in a language whose explicit primary market is web apps?
"string" + "string" is valid code
No, it's $string.$string. What you wrote is Javascript. Again, don't blame PHP if you can't keep your syntax separate.
Wrong, "." is correct for string concatenation, "+" however is perfectly valid PHP syntax. PHP will accept the code, run it, and do something stupid with it. Using "." for concatenation is rare, but I can live with it, and I accept that it's my fault for getting them confused - however, "foo" + "bar" should in that case be a syntax error or a cast-to-int error, not a valid way to specify numeric zero.
In general, the PHP philosophy of "we know parse errors are annoying, so we'll silently make a guess at what you might mean, and then do something unrelated" is a really bad philosophy for a programming language to have.
As for your parse_str() rant, it works as advertised. I would recommend you RTFM.
I have RTFM, I know that it works as advertised. The way that it is advertised as working is retarded and inconsistent, even by PHP standards :-) "It's documented, so it's a feature" is a terrible excuse, but it's the excuse that seems to be used for pretty much the entire platform (see: some function names have underscores and others don't, see also func($haystack, $needle) vs func($needle, $haystack), see also how all across the documentation there are caveats, warnings, and gotchas that a developer needs to know, where in any good language the standard library just works no questions asked...).
The symlink() not working as advertised on windows is a Windows / Linux operating system compatibility issue that Microsoft won't fix. It has nothing to do with PHP.
If it doesn't work, why is the function there? In several other cases, platform-specific functions are left undefined on some platforms, so you can do "if(function exists) {use function} else {use backup}", which is fair enough. But now I have to do "if(function exists and platform isn't windows)" because it's defined but broken. If PHP was at least consistent in its brokenness, I could put up with it; but every part of it seems to be broken in a different way.
Your issues surrounding PDO and MySQL, Postgres, MsSQL etc.. exist with all Languages, even on Windows. So I don't see how this has anything to do with PHP, at all.
False, the issues I've mentioned in PDO aren't there in any of the Python or Java database abstraction layers I've used. Sure, the SQL syntax can be different depending on the back-end; but in PHP, the abstraction layer itself acts differently depending on the back end.
"lots of things break in weird ways under "safe" mode"
Yeah, that safe mode, total crap. People should be told to not rely on it, it should totally be deprecated, there should be better more reliable ways to protect your database from SQL injection, and OH WAIT! There is, there are, there have been for a few years now... If you can't keep up, don't blame the language.
My own servers are relatively up to date, but when I'm writing code to be distributed, I need to keep dealing with PHP's inbred mutant history. Yeah, all languages improve and writing to a legacy spec is annoying, but I've never met a language whose legacy is as horrible and as alive as PHP's.
This also reminds me of the red vs blue quote; PHP proponents keep admitting that version $current-1 was completely stupid and broken, claiming that version $current is good. It isn't, it's still crap, it's just going to take you until version $current+1 to realise it. Again, yes, other languages improve -- but when I look back on old versions of C or Erlang I think "those are good, but the new features make life easier", I don't think "whoever designed this must've been dropped at birth, but I'm sure upgrading to the latest version will make everything perfect and they'll never make a mistake like that again".
Bonus problem! Keeping up to date is a pain in itself, when the PHP devs are happy to break compatability and only increment the minor version number.
You should consider Logo.
Funnily enough, Logo was my first programming language - while restrictive, I found it far more pleasant to work with than PHP; behaviour was consistent, predictable, and sensible. I didn't need to memorise the list of documented WTFs, I didn't need to deal with the interpreter crashing with no debug output, I didn't need to file bug reports when basic language features (not even API features, but the language itself) are broken...