Cumartesi , Temmuz 22 2017

WordPress içe aktar (import) hatası ve çözümü

WordPress içe aktar, dışa aktar özellikleri, yarattığımız WordPress içeriklerini bir domainden diğerine yada birbaşka CMS sisteminden WordPress’e taşımaya yarayan güzel bir özellik. Kullanması çok kolay ve işlemler genellikle sorun çıkarmıyor. Fakat içe aktaracağınız (XML uzantılı) WXR dosyası büyük ve sunucu özellikleriniz sınırlı ise, bazen işlemler tamamlanamıyor, hatalar oluşuyor.

Burada bahsettiğim büyüklük iki türlü. Dosyanın, mb cinsinden diskte kapladığı alan var. Bir de, XML dosyasından medya dosyalarınıza verilen referanslar var. Eğer referans fazla, indirilecek dosya sayısı çok ve boyutları büyükse “WXR dosya boyutu” küçük olsa dahi problem olabiliyor. (500 Internal Server Error hatası)

Mesela yeni aldığınız temaların küçük boyutlu demo dosyalarını bile içe aktaramamanız bu yüzden. Sorunun kaynağı da belli aslında.

Web sunucuları, her php sayfasının işletilmesi için maksimum bir süre belirliyor. Bu sürede içe aktarma işlemi tamamlanmalı. Yoksa sunucu süreci kesiyor ve bir hata sayfası döndürüyor. Kalıcı çözüm ya süreyi arttırmak yada import işlemi sırasında ajax kullanmak. Fakat süre sunucuyu kiraladığınız firmanın insiyatifinde ve genellikle müdahale etmemize izin verilmiyor. Öte yandan WordPress Importer’ın geliştiricileri de ajax’ı tercih etmemiş. Bu nedenle bizim kendi çözümümüzü üretmemiz gerekiyor.

Son dönemde bu konuda sıklıkla sorun yaşadığımdan 4 farklı alternatif üretmiştim. Birlikte bakalım;

Problemin çözümü için WXR dosyasını bölme

WordPress dışa aktar ile export ettiğimiz WXR yada eXtensive RSS denilen dosyalar, aslında basit XML dosyaları. Kolayca bölmek, küçük boyutlu birkaç dosya haline getirmek mümkün. Bunu yapıp dosya boyutlarını 2mb seviyelerine indirdiğinizde WordPress Importer, tek tek kolayca içe aktarma yapabiliyor. Bölme işlemi şu şekilde yapılıyor;

0001220201-wordpress-wxr-xml-dosyasi

WordPress WXR dosyasını Notepad++’da açtığınızda karşınıza çıkan manzara budur. Yeşil “not” alanını silip “View->Fold All” menüsüne tıkladığınızda…

0001220202

… daha anlaşılabilir bir manzaraya kavuşursunuz. Göreceğiniz üzere WordPress sayfa, imaj, vb. şeyleri item tagları arasında saklar. Bu dosyanın yapısını hiç bozmamalısınız. Belirli sayıda item’i atlayarak takip eden item gruplarını Ctrl+X ile kesip, aynı formatta bir başka XML dosyasına yapıştırmalısınız.

Mesela ilk 4 item ilk dosyada kalsın…

0001220203

Sonraki 3 item’i bir başka dosyaya koyalım…

0001220204

… ve sonraki 3 item’i de bir başkasına.

Burada verdiğim item sayıları semboliktir. 300 yada 3000 item olarak da ayırabilirsiniz. Sayı sunucunuzun gücüne göre artar yada azalır. Oluşturduğunuz dosya boyutları 1-2 mb (yaklaşık 2500 satır) olursa genelde sorun yaşamazsınız.

0001220205-wordpress-ice-aktar-import

Böldüğünüz dosyaları, ilk önce orjinal dosya, sonra import-1.xml ve sonra da import-2.xml olacak şekilde import etmelisiniz. Bu işlemden sonra genellikle sorun yaşamazsınız.

(Eğer hala WordPress import sorunu devam ediyorsa, dosya boyutları yeterince küçültülmemiş demektir. İşlemi tekrarlamak gerekir. )

Gördüğünüz gibi biraz zahmetli. Bu işi otomatik yapan bir yazılım yok mu diye düşündüğünüzde, WXR File Splitter (RSS XML) v1.52 programını buluyorsunuz. Fakat malesef kendisi güncel değil ve sağlıklı çalışmıyor.

“WP Advanced Importer” gibi alternatif “içerik aktarma” eklentileri kullanma

WXR dosyalarını içe aktarma için WordPress’in doğal çözümüne bazı alternatifler geliştirilmiş. Bunlardan biri WP Advanced Importer Plugin. Import işlemini ajax kullanarak yaptığından işlem biraz yavaş ama hatasız tamamlanıyor. Kullanımı şu şekilde;

0001220301-wp-advanced-importer-icerik-aktarma-eklentisi

WP Advanced Importer Plugin eklentisini yükledikten sonra oluşan menüye giriyoruz. “Browse” butonuna tıklıyoruz.

0001220302

WXR dosyasını seçiyoruz.

0001220303

Dosya yükleniyor, analiz ediliyor. İçindeki bilgi gruplarına dair küçük bir rapor gösteriliyor. “Close” butonu ile bu ekranı kapatıyoruz.

0001220304

“Next>>” butonuna tıklıyoruz.

0001220305

“Simple User Import” öğesini seçip “Next>>” butonuna tıklıyoruz.

(Burada isterseniz WordPress’in doğal içe aktar aracında olduğu gibi kullanıcılara müdahale yapabilirsiniz.)

0001220306

“Next>>” butonuna tıklıyoruz.

0001220307

“Download Attachement” öğesini seçip “Next>>” butonuna tıklıyoruz.

0001220308

“Import” butonu ile işlemi başlatıyoruz.

0001220309

İşlem dosyanızın boyutu, import edilecek dosya sayısı, dosyaların büyüklüğü gibi parametrelerle değişebilecek bir sürede tamamlanıyor.

Sistem ajax kullandığından biraz yavaş fakat güvenilir bir şekilde tamamlanıyor. WordPress’in içe aktarma problemi, “Internat Server Error 500” gibi sorunlar yaşanmıyor.

Eklentinin en güzel alternatifi Attachment Importer diyebilirim. Fakat her ikisinin de şu anki güncel versiyonlarında ortak bir problem var. Eğer verdiyseniz imaj dosyalarının Alt, Description, Caption gibi etiketlerini import etmiyorlar. Yine WP Advanced Importer Plugin, nedense import edilen imaj dosya isimlerinde – karakteri varsa siliyor. “01-01-2015.jpg” gibi olan dosyalar “01012015.jpg” olarak içe aktarılıyor.

WordPress içe aktarma işlemini localhost’ta yapma

Localhost’a WordPress kurup kullananlar bilecektir, hosting firmalarının kiraladığınız sunucu üzerinde müdahalesine izin vermediği birçok özelliği değiştirebilirsiniz. Mesela PHP dosyaları için “max_execution_time” değerini yükseltip, sunucunuzun hafızasını 1024 megabyte’a çıkarabilirsiniz.

Bu nedenle, içe aktarma işlemini, geniş kaynaklar ayrılmış yerel bir WordPress kurulumunda yaparsanız, hata alma olasılığınız düşük olur. Import işlemi başarıyla tamamlandığında WordPress yedekleme konusunda anlattığım yöntemlerle yerel sunucudaki bilgi canlı sisteme aktarılabilir.

php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 300

Yerel sunucuda süre aşımı problemi yaşamamak için verdiğim kodu .htaccess dosyanıza eklemeniz muhtemelen yeterli olacaktır. Sorun yaşarsanız, “max_execution_time” değerini arttırmanız gerekir.

WP Importer ile WXR dosyasını tekrar tekrar import etme

Büyük boyutlu WXR dosyasını WordPress Importer ile içe aktarmak istediniz ve süreç başarısız oldu. Bu işlemi tekrarlayın. Muhtemelen WP Importer tekrar başarısız olacaktır. Birkaç kez tekrarladığınızda, işlem nihayetinde başarıyla tamamlanacaktır.

Peki neden?

WP Importer, ilk çalışmada 1-100 arası kaydı import eder. 100’de sunucunuz bağlantıyı keser. İkinci denemede herşey baştan başlatılır. Tekrar 1-100 arası kayıt import edilmeye çalışılır fakat onlar zaten sitenizde var olduğundan atlanır. Dolayısıyla kalan sürede 100-198 arası kayıtlar import edilir. Bu şekilde azar azar süre elverdiğince işlem tamamlanıncaya kadar devam edilir. (rakamlar örnek olması amacıyla verilmiştir)

WordPress en sonunda “xxx zaten var” şeklinde uzun bir liste ile birlikte “Hepsi tamamlandı. İyi eğlenceler!” yazısını gösterecektir. Tabi çok çok büyük XML dosyaları ile işlemi bu şekilde tamamlamak için peygamber sabrı gerekir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir