This isn't a bug, both your answers are wrong.
The problem is that, on a 32-bit machine, it is impossible to represent the number -5799680607 (your value of $a) in binary, so a true xor() can't be performed. To test this, run the following code on each machine:
Each one may give you a different answer, but they're both wrong if you're on a 32 bit machine, because the correct answer is:
for how negative numbers are represented in binary. So, here are the "correct" representations for your values of $a, $b, and the correct result, which is -5799843495:
If you can keep your eyeballs in line, you will see that the bottom result is correct, with each bit the xor() of the above two. And if you run your test script on a 64-bit machine, you will get the correct result.
So I'm guessing they changed the way that PHP handles integers in an overflow condition, but it doesn't matter because neither is correct. So, what is it you're actually trying to achieve here? I'm guessing you're just trying to get some 3rd party code working the same between versions, instead of actually doing some sort of binary math?