2016-10-13 6 views
6

Ich habe eine Datei, die eine Datei mit dem Namen sitemap.html und in der Sitemap ist einschließlich, habe ich den folgenden Code:PHP werfen Fehler auf XML Starttag

<?xml version="1.0" encoding="UTF-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> 
    <url> 
     <loc><?php echo SITE_URL . '/'; ?></loc> 
     <changefreq>monthly</changefreq> 
     <priority>1.00</priority> 
    </url> 

    <?php foreach ($this->data->content as $content): ?> 
     <url> 
      <loc><?php echo SITE_URL . $content->permalink; ?></loc> 
      <lastmod><?php echo date("Y-m-d", $content->publish_date); ?></lastmod> 
      <changefreq>monthly</changefreq> 
      <priority><?php echo $content->sitemap_index; ?></priority> 
     </url> 
    <?php endforeach; ?> 
</urlset> 

Alles in Ordnung scheint, aber ich erhalte eine Fehlermeldung 500, der sagt:

PHP Parse error: syntax error, unexpected 'version' (T_STRING) in sitemap.html on line 1

wie Sie sehen, ich bin <?xml verwenden und nicht <?php warum also versucht, es als PHP zu analysieren?

Zuerst dachte ich, es waren die magischen Zitate, die ein Problem verursachen, aber wenn ich einen var_dump von get_magic_quotes_gpc() mache, bekomme ich bool(false), so dass die magischen Zitate nicht einmal auf sind.

Auch in meinem php.ini sehe ich, dass magic_quotesOFF ist.

Als Alternative es zu beheben, ersetzt ich meine erste Zeile mit dem folgenden:

<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> 

Aber ich bin immer noch neugierig über, was passiert.

Ich habe andere auf demselben Server (PHP Version 5.4.45) gehostete Websites, und ich habe nicht den PHP-Parse-Fehler auf der Sitemap der anderen Internet-Seiten ...

Jede Idee, was kommen könnte sein, verursacht diesen Fehler?

+0

das ist keine magischen Zitate. es ist short_open_tags, was php trigger auf '

+0

@MarcB Oh, ich wurde durcheinander gebracht .. Mein schlechtes! Ich denke jedoch nicht, dass das das Problem ist, denn wie ich bereits erwähnt habe, habe ich andere Websites, die genau den gleichen Code ausführen, und es funktioniert für die anderen Websites ... –

+0

bedeutet nicht viel. php-Einstellungen können auf Webserver-Ebene pro Site überschrieben werden. Überprüfen Sie die Einstellung short_open_tag auf den funktionierenden/nicht funktionierenden Sites. –

Antwort

6

Sie sollten short_open_tag Option überprüfen. So wie ich es sehe, sieht PHP <? Teil Ihrer <?xml als PHP-Open-Tag und erzeugt einen Fehler.

+0

Ich sehe, dass short_open_tag auf ON ist, aber es funktioniert für alle meine Webseiten außer einem ... Weißt du, warum es so ein Verhalten hat? –

+0

@ChinLeung Verwenden die anderen Dateien, die arbeiten, eine durch PHP analysierbare Erweiterung? Ich meine, können sie PHP-Code ausführen? –

+0

@KodosJohnson Ja, alle auf dem Server gehosteten Websites sind in PHP kodiert. –

1

Wie bereits erwähnt, ist dies aufgrund der short_open_tag option

Tells PHP whether the short form (<? ?>) of PHP's open tag should be allowed. If you want to use PHP in combination with XML, you can disable this option in order to use <?xml ?> inline. Otherwise, you can print it with PHP, for example: <?php echo '<?xml version="1.0"?>'; ?> . Also, if disabled, you must use the long form of the PHP open tag (<?php ?>).

+0

'PHP_INI_PERDIR' \t Eintrag kann in php.ini, .htaccess, httpd.conf oder .user.ini (seit PHP 5.3) eingestellt werden. Also funktioniert nicht mit 'ini_set()' – AbraCadaver

+0

@AbraCadaver Hmm, könnte es geschworen haben, es funktioniert auch mit 'ini_set'. Oh well – Machavity

+0

Haben Sie eine Idee, warum es meine anderen Websites funktionieren würde und nicht eine bestimmte? –

2

Wenn Sie PHP-Prozesses HTML-Seiten sind haben, und es auf jedem anderen Standort arbeitet, dann sind Sie (natürlich) mit einem schwierigen Umgang zur Fehlerbehebung bei Konfigurationsproblemen

Sie können entweder weiter nach der short_open_tags Einstellung suchen, die irgendwo auf dem Server vergraben ist, oder Sie können einfach die XML-Deklaration mit PHP wiederholen.

<?php echo '<?xml version="1.0" encoding="UTF-8" ?>' ?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> 
    <url> 
     <loc><?php echo SITE_URL . '/'; ?></loc> 
     <changefreq>monthly</changefreq> 
     <priority>1.00</priority> 
    </url> 

    <?php foreach ($this->data->content as $content): ?> 
     <url> 
      <loc><?php echo SITE_URL . $content->permalink; ?></loc> 
      <lastmod><?php echo date("Y-m-d", $content->publish_date); ?></lastmod> 
      <changefreq>monthly</changefreq> 
      <priority><?php echo $content->sitemap_index; ?></priority> 
     </url> 
    <?php endforeach; ?> 
</urlset> 

Hier ist eine ältere Seite zum Thema: PHP opening tags and XML declaration

Ich ziehe alle PHP-Code zu geben, Dateien die Endung .php so ist es völlig klar ist, dass sie Code enthalten und nicht den Overhead mit PHP-Prozess entstehen jede HTML-Datei, aber das ist nur meine Meinung.

+0

Auch die Lösung, die Sie vorgeschlagen haben, ist, was ich in meiner Frage als alternative Lösung geschrieben habe. Wie auch immer, ich suche nicht nach der Lösung, ich suche nach der Ursache. –

+0

Bitte lesen Sie Ihre Frage erneut. Ihr erster Satz beginnt "Ich habe eine Datei, die eine Datei namens sitemap.html enthält ..." Jeder sagt Ihnen, dass dies ein Konfigurationsproblem in Bezug auf kurze offene Tags ist, aber leider können wir nicht auf Ihren Webserver zugreifen, um die Konfiguration anzuzeigen. –