• 17-10-2012, 15:34:13
    #1
    Arkadaşlar bildiğiniz gibi google sitemap üzerinden 50 bin linkten fazlasını kabul etmiyor ve 2. bi sitemap oluşturulmasını istiyor. Araştırdım ama birşey çıkmadı karşıma. Bence php ile basit bir sitemap oluşturabileceğimi düşündüm. Veritabanından listelenecek tabloyu 50 bin parçaya bölmek istiyorum.

    Mesela :

    $sorgu = mysql_query("SELECT * FROM sayfalar ");
    sayfalar isimli tablodan ;

    1-50000 arası veriyi listele
    50000-100000 arası veriyi listele
    100000-150000 arası veriyi listele

    şeklinde veritabanı sorgusu yapacak bir koda ihtiyacım var. Yardımlarınız için şimdiden teşekkür ederim.
  • 17-10-2012, 15:36:54
    #2
    <?
    // Önce mysql bağlantı bilgilerini içeren php dosyamızı include ediyoruz
    $mysqlhost="localhost";
    $mysqluser="makaleler";
    $mysqlpass="12345";
    $mysqldatabase="makaleler";
    if(! $baglanti=@mysql_connect($mysqlhost, $mysqluser, $mysqlpass)) die("veritabani baglantisi yok.");
    mysql_select_db($mysqldatabase);
    
    // İkinci olarak sayfa output'unun hangi formatta olduğunu belirten header komutunu gönderiyoruz. Sayfamız xml formatında olacaktır.
    header("Content-Type: text/xml");
    
    // Get metoduyla aldığımız sayfa verisini $sayfa isimli değişkene atıyoruz.
    if(! isset($_GET[sayfa])) $sayfa=1; else $sayfa=$_GET[sayfa];
    
    //Tarihi belirtiyoruz. Burada format önemli. Format dışına çıkılmamalı. Eğer veritabanınızda her makalenin giriş tarihi varsa dinamik olarak onu da ekleyebilirsiniz. Burada sabit bir gün kullandım.
    $date="2008-10-21";
    
    // Eğer sayfa değişkeni "index" değeri aldıysa output olarak sitemap-index verilecek.
    if($sayfa=="index"):
    
    // İlk olarak bütün makale sayısını alıyoruz.
    $index_sayi=mysql_num_rows(mysql_query("SELECT `id` FROM `makaleler`"));
    // İkinci olarak kaç adet index'te kaç adet sitemap listeleneceğini bulmak için, toplam rakamı sitemap başı url sayısına bölüyoruz. Ben genelde veritabanını yormamak ve hızlı yüklenme için 6000 kullanırım.
    $index_sayi=ceil($index_sayi / 6000);
    
    //Google sitemap-index header'larını giriyoruz. Encoding'i dileğinize göre değiştirebilirsiniz.
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
       <sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n";
    
    // Ana etiketleri girdikten sonra sitemap'ları döngü ile listeliyoruz.
    for($i=0; $i<$index_sayi; $i++){
    echo "<sitemap>
          <loc>http://www.butunmakaleler.com/sitemap.php?sayfa=".($i+1)."</loc>
          <lastmod>$date</lastmod>
       </sitemap>\n";
    }
    
    // Son olarak sitemap-index sonlandırma etiketini girip index'i bitiriyoruz.
    echo "</sitemapindex>";
    
    // Eğer GET ile aldığımız sayfa değişkeni numerik ise bu kodlar çalışacak.
    else:
    
    // Sayfa numarasına göre 6000'lik veri alınıyor.
    $sorgu=mysql_query("SELECT `id` FROM `makaleler` ORDER BY `id` ASC LIMIT ".(($sayfa-1)*6000).",6000");
    
    // Sitemap ana xml etiketleri giriliyor.
    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\">\n";
    
    // Alınan 6000'lik parça döngü ile yazdırılıyor.
    while($sonuc=mysql_fetch_assoc($sorgu)):
    
    echo "  <url>
                    <loc>http://www.butunmakaleler.com/makale.php?id=".$sonuc[id]."</loc>
                    <lastmod>$date</lastmod>
                    <changefreq>daily</changefreq>
                    <priority>0.5</priority>
            </url>\n";
    
    endwhile;
    
    // Son olarak sitemap'ı sonlandırma etiketini yazdırıp dosyayı kapatıyoruz.
    echo '</urlset>';
    
    endif;
    ?>
    Kendi sitelerim için bunu kullanıyorum.

    Kaynak: http://www.kodaman.org/yazi/buyuk-siteler-icin-php-ile
  • 17-10-2012, 15:55:58
    #3
    Hocam ben zaten bu kodları düzenledim kullanıyorum. 50 binden sonrası için nasıl bir işlem yapıyor ki ?
  • 17-10-2012, 21:08:19
    #4
    50 binden sonra ikinci bir sitemap oluştruyor. örneğin

    sitemap.php dosyasında sayfaları listeliyor aşağıdaki gibi

    sitemap.php?page=1 (50.000 adet)
    sitemap.php?page=2 (sonraki 50.000)

    gibi.
    • SaLeh
    SaLeh bunu beğendi.
    1 kişi bunu beğendi.