PHP

2010-04-30 6 views
14

के साथ एक XML साइटमैप बनाना मैं एक साइटमैप बनाने की कोशिश कर रहा हूं जो स्वचालित रूप से अपडेट हो जाएगा। मैंने अपने आरएसएस फ़ीड के साथ कुछ ऐसा किया है, लेकिन यह साइटमैप काम करने से इंकार कर देता है। आप इसे http://designdeluge.com/sitemap.xml पर देख सकते हैं मुझे लगता है कि मुख्य समस्या यह है कि यह PHP कोड को पहचान नहीं रहा है। यहाँ पूर्ण स्रोत है:PHP

<?php 


include 'includes/connection.php'; 

header("Content-type: text/xml"); 

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

?> 

<urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd"> 

    <url> 
     <loc>http://designdeluge.com/</loc> 
     <lastmod>2010-04-20</lastmod> 
     <changefreq>weekly</changefreq> 
     <priority>1.00</priority> 
    </url> 

    <url> 
     <loc>http://designdeluge.com/about.php</loc> 
     <lastmod>2010-04-20</lastmod> 
     <changefreq>never</changefreq> 
     <priority>0.5</priority> 
    </url> 

    <?php 

    $entries = mysql_query("SELECT * FROM Entries"); 

    while($row = mysql_fetch_assoc($entries)) { 
    $title = stripslashes($row['title']); 
    $date = date("Y-m-d", strtotime($row['timestamp'])); 

    echo " 

    <url> 
     <loc>http://designdeluge.com/".$title."</loc> 
     <lastmod>".$date."</lastmod> 
     <changefreq>never</changefreq> 
     <priority>0.8</priority> 
    </url>"; 

} ?> 

</urlset> 

समस्या यह है कि गतिशील यूआरएल (जैसे डीबी से खींचा वाले) उत्पन्न नहीं किया जा रहा है और साइटमैप मान्य नहीं होगा। धन्यवाद!

संपादित करें: अभी, मैं कोड को स्वयं ही काम करने की कोशिश कर रहा हूं। मैंने इसे अपने स्थानीय परीक्षण सर्वर पर एक PHP फ़ाइल के रूप में स्थापित किया है। उपरोक्त कोड का उपयोग किया जा रहा है। अभी, स्क्रीन पर या स्रोत में कुछ भी नहीं दिखाता है। मुझे लगता है कि मैंने एक वाक्यविन्यास त्रुटि बनाई है, लेकिन मुझे कुछ भी नहीं मिला। छोटी या बडी सब तरह की मदद सराहनीय है!

संपादित करें 2: ठीक है, मैंने इसे लोगों को हल किया है। जाहिर है, मुझे PHP के साथ एक्सएमएल घोषणा को गूंजना पड़ा। अंतिम कोड ऊपर पोस्ट किया गया है। आपकी सहायताके लिए धन्यवाद!

उत्तर

27

आप sitemap.xml कि उत्पन्न पर एक नज़र डालें (देखें स्रोत का उपयोग, आपके ब्राउज़र में, उदाहरण के लिए), तो आप इस देखेंगे:

<?php header('Content-type: text/xml'); ?> 
<?xml version="1.0" encoding="UTF-8" ?> 
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http:/ 
... 

<?php, कि उत्पादन में मौजूद है, दिखाता है कि PHP कोड का अर्थ नहीं है।


ऐसा इसलिए है क्योंकि अपने वेब सर्वर फ़ाइलों को PHP कोड शामिल करना चाहिए के विस्तार के रूप .xml को नहीं पहचानता है।

कम से कम दो संभव समाधान: अपने सर्वर

  • पुन: कॉन्फ़िगर करते हैं, तो एक्सएमएल फाइल पीएचपी दुभाषिया के माध्यम से जाना (जैसे एक अच्छा विचार नहीं हो सकता है: कि मौजूदा फाइलों के साथ समस्या पैदा कर सकते)
  • उदाहरण के लिए sitemap.php पर अपने साइटमैप का विस्तार बदलें, इसलिए इसका आपके सर्वर द्वारा व्याख्या किया गया है।


मैं एक और समाधान जोड़ना होगा:

  • एक sitemap.php फ़ाइल है, कि कोड
  • और sitemap.php फाइल करने के लिए एक फिर से लिखना तो sitemap.xml URL वास्तव में अंक का उपयोग होता है

इसके साथ, आपके पासहोगा 10 यूआरएल, जो अच्छा है (आवश्यक है?), लेकिन जैसा कि कोड sitemap.php में होगा, यह व्याख्या की जाएगी।

Apache's mod_rewrite देखें।

+0

खैर मेरे सर्वर पर केवल दो .xml फ़ाइलें php का उपयोग कर रहे तो मैं किसी भी नुकसान नहीं दिख रहा। पहला विकल्प करना एक .htaccess फ़ाइल में जोड़ने जैसा कुछ होगा? AddType एप्लिकेशन/x-httpd-php .xml – williamg

+2

यह सुनिश्चित नहीं है कि यह '.htaccess' फ़ाइल * में किया जा सकता है (आपके सर्वर की कॉन्फ़िगरेशन के आधार पर, सर्वर के कॉन्फ़िगरेशन में इसे सीधे करना आवश्यक हो सकता है) * ;; लेकिन आप कोशिश कर सकते हैं, शायद यह काम करेगा :-) –

+0

@iMaster: आपके कोड को काम करने के लिए, शॉर्ट_टैग भी बंद होना चाहिए (यह डिफ़ॉल्ट रूप से है - केवल कुछ पता होना चाहिए)। इसके अतिरिक्त, जब मैं वर्तमान में http://designdeluge.com/sitemap.xml पर जाता हूं तो मुझे एक HTTP 500 प्रतिक्रिया मिलती है, इसलिए आपकी कॉन्फ़िगरेशन टूट जाती है (शायद 'क्योंकि आप अभी इस पर काम कर रहे हैं)। अंत में, बड़ी साइटों के लिए, रीयलटाइम में संपूर्ण साइटमैप उत्पन्न करना शायद अक्षम है - इसलिए यदि आप हजारों पृष्ठों या उससे अधिक तक बढ़ने की उम्मीद कर रहे हैं, तो बाद में इसे फिर से लागू करने के लिए तैयार रहें। –

3

मैंने विलियम के कोड (धन्यवाद) का उपयोग किया है और कुछ छोटे बदलावों के साथ यह मेरे लिए काम करता है।

header("Content-type: text/xml"); 

शीर्ष <?php

संयोग के बाद दूसरी पंक्ति, किसी और के लिए एक छोटा सा बिंदु यह है, लेकिन वहाँ से पहले एक भी अंतरिक्ष चरित्र है कि प्रतियां होना चाहिए:

मैं लाइन लगता है पहली पंक्ति में <?php - यदि आपने अनजाने में इसे कॉपी किया है, तो आप यह पता लगाने की कोशिश कर रहे हैं कि कोड आपके लिए क्यों काम नहीं करेगा!

मुझे MySQL चुनिंदा कथन को थोड़ा सा ट्विक करना पड़ा।

अंत में, आउटपुट में, मैंने एक परिवर्तनीय $ डोमेन का उपयोग किया है ताकि कोड के इस टुकड़े को इसके बारे में सोचने के बिना टेम्पलेट के रूप में उपयोग किया जा सके (बशर्ते आप प्रत्येक टेबल नाम का उपयोग करें)। Variabe को connectdb.php फ़ाइल में जोड़ा गया है जिसे डेटाबेस से कनेक्ट करने के लिए शामिल किया गया है।

<?php 
header("Content-type: text/xml"); 
echo '<?xml version="1.0" encoding="UTF-8" ?>'; 
include 'includes/connectdb.php'; 
?> 

<urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd"> 

    <url> 
     <loc>http://www.DOMAIN.co.uk/</loc> 
     <priority>1.00</priority> 
    </url> 

    <?php 

    $sql = "SELECT * FROM pages WHERE onshow = 1 ORDER BY id ASC"; 
    $result = mysql_query($sql,$conn);  
    while($row = mysql_fetch_array($result)) 
    { 
    $filename = stripslashes($row['filename']); 
    ?> 
    <url> 
     <loc>http://www.<?php echo "$domain"; ?>/<?php echo "$filename" ?></loc> 
     <changefreq>monthly</changefreq> 
     <priority>0.5</priority> 
    </url> 

<?php } ?> 

</urlset> 
3

सबसे अच्छा समाधान के बाद RewriteEngine On

RewriteRule ^sitemap\.xml$ sitemap.php [L] 

और फिर .htaccess फ़ाइल निम्न पंक्ति अपने अपाचे में जोड़ने के लिए बस एक फ़ाइल चल रहा है:

यहाँ विलियम की कोड के मेरे कार्य संस्करण है sitemap.php आपके रूट फ़ोल्डर में जो आमतौर पर http://yoursite.com/sitemap.xml के माध्यम से पहुंच योग्य होगा, डिफ़ॉल्ट URL जहां सभी खोज इंजन पहली बार खोज करेंगे।

फ़ाइल sitemap.php शुरू करेगा

<?php header('Content-type: application/xml; charset=utf-8') ?> 
<?php echo '<?xml version="1.0" encoding="UTF-8"?>' ?> 

साथ यह काम करता है :)

संबंधित मुद्दे

 संबंधित मुद्दे