I'll bet five pennies that it's because PHP is trying to interpret the XML declaration. <?php ?> is what PHP should use to start reading text, but <?foo ?>, <?bar ?>, <?baz ?>, <?etc ?>, are all often caught by PHP as well. So's <?xml ?> and <?xml-stylesheet ?>. It's a pet peeve of mine.
The short open tag parsing is not smart enough to know that -
<?any_thing_else_here (that is not "php", "=", white-space, or a newline) is NOT an opening php tag.
Either put the <?xml... tag in a string and echo it, escape the ? (I think <\?xml... will work), or turn off short open tags.
If you are learning PHP, developing PHP code, or debugging PHP code, do yourself a favor and check your web server log for errors and/or turn on full PHP error reporting in php.ini or in a .htaccess file to get PHP to help you.
Its not validating because its not parsing the php. You need to change it from .xml to .php and you also need to pass the right headers. I've taken out the while loop but you should get the idea. You also need a <guid></guid> (click me) on the <item></item>.
echo '<?xml version="1.0" encoding="UTF-8"?>';
<title>Shopping Center Advisor</title>
<description>The definitive source for Shopping Center Information</description>
<copyright>2007 Ronald L. McDonald</copyright>
<description>This is a description</description>