Yep, it has nothing to do with PHP. It's easy to produce this kind of frankenfile with an incorrect cp command. Or with incorrect stream management using any zip library that emits streams.
Even so, it could easily be produced by this kind of error in a PHP script.
Including an ending tag (?>) followed by whitespace could have the same effect.