Ara 182014
 
3.554 views

wp-cron.php Nasıl Bir Baş Belasına Dönüşür?

wordpress wp-cron.phpFarklı çözümler peşinde olmak, bazı riskleri de beraberinde getiriyor.

Multisite WordPress uygulamasında ısrar etmek te aynen öyle oldu.

Bu sistemin, tekli bir wordpress uygulamasına; ya da tek başına çalışan sıradan bir web sitesine kıyasla daha fazla kaynak tüketmesi olağan. Ancak bu tüketim sürekli olmaktan çok, anlık çıkışlar halinde. Özellikle wp-cron.php dosyasının devreye girdiği zamanlarda.

Paylaşımlı bir web hosting veya reseller sistemi böyle bir yapı için çok uygun. Çünkü kısa süreli yüksek kaynak ihtiyacını kolaylıkla dengeleyebilir. “Paylaşımlı” sistemin avantajı zaten bu!

Ancak son günlerde bizim hosting firmamız hem sunucuların yerini değiştirdi, hem de cloudlinux sistemine geçti. Bunun sonucu ise benim açımdan tam bir kaos oldu.

Benim sistemim, anlık çıkışlar yapan, ama trafiği çok düşük bir yapıya sahip. Ortaya çıkan tablo da bu nedenle ara sıra kaynak dar boğazına düşen, ama diğer zamanlarda kendine tahsis edilmiş olan kaynağı bile neredeyse hiç kullanmayan bir durumu yansıtıyor.

İlk tepkim hemen sitenin yerini değiştirmekti ama, 2 ay önce zaten yer değiştirmiştim. Arama motorları ve değerlendirme robotları bu tür ani değişikliklerden hiç hoşlanmıyorlar. Örneğin Alexa değerlerim bu kısacık sürede aniden tırmanışa geçti. Bakalım onları yeniden nasıl yoluna sokacağım?…

İşte bu yüzden, ben de WordPress ağımı tekrar daraltmaya karar verdim.

İlk aşama, Google’ın yeni SEO taleplerine uygun olarak ana yapıyı daha dar ama aynı konuya odaklanan subdomain sitelerine dönüştürme çalışmamı sonlandırıp, onları yeniden merkeze toplamak. Böylece wp-cron.php daha az tetiklenmiş olacak. Öte yandan, taşıması daha kolay bir sisteme sahip olmayı umuyorum. Çünkü çok sayıda subdomain siteye sahip olan bir multisite wordpress sisteminde hosting değiştirildiğinde yazılar vb pek fazla sorun çıkartmıyor olsa da, fotoğraflar birer iğneli fıçıya dönüşüyor.

Bu konuya da bir çözüm getirmek iyi olacak. Örneğin tüm alt alan (subdomain) sitelere ait fotoları merkezi bir arşivde toplamak, kaynak güvenliğini biraz riske atsa da, taşınmayı kolaylaştırma ve kargaşayı engelleme açısından çok yararlı olabilir.

Yeni sistemde wp-cron.php dosyasını sadece 1 saatlik aralarla çalıştırıyorum.

Ayrıca, W3 Total Cache eklentisini kaldırdım. Çünkü bu eklenti, büyük yararlarına karşın çok fazla CPU tüketiyor. Bir müddet sonra harici bir cache sistemi kullanmayı deneyebilirim. Ama şimdilik böyle bir riske giremem.

Cpanel’in anti-virüs seçeneklerinden de uzak duruyorum. Site analiz çalışmalarımı iyice yavaşlattım. Çünkü bu çalışmalar bile CPU kullanım değerlerini %90’lara sıçratıyor.

Anlayacağınız, bundan sonraki çalışmalarım belli bir süreliğine düşük tempoda yürüyecek.

Bütün bu olup bitenlere rağmen, bir başka gelişmeye daha tanıklık ediyorum son günlerde: Ana sitemdeki tekil ziyaretçi sayısı neredeyse 2 katına çıktı. Bu değişikliği henüz sağlıklı bir şekilde yorumlayamıyorum. Belki de Google’ın yaptığı yeniliklerden biri, tesadüfen benim çalışmalarımı ödüllendirecek bir fark yaratmıştır. Umarım öyledir… 🙂

ahmet aksoy

Ara 072014
 
2.376 views

Resim ve Yazı Güncellemede Sorun

wp-cron.php sorununu çözmeye çalışırken bir başka problem ortaya çıktı.
Son yazıma resim eklemeye kalktığımda bir türlü media alanına erişemedim.
Bunun olası 2 nedeni var:
1- Multisite WordPress wp-cron-mu.php kullanarak 15 dakikada bir gerçekleştirilen cron işlemleri, normal işleyişi olumsuz etkiledi.
2- Yazıda pre veya code ile betimlediğim kod örnekleri, sistemle bir şekilde etkileşime girerek akışı olumsuz yönde etkiliyor.
Nedeni daha kolay bulabilmek için bu iki olasılığı birbirinden ayırmak gerekiyor.
Bu yazyı biraz da bu amaçla yazıyorum.
Bu yazıda her hangi bir kod örneği olmayacak. Resim de koymayacağım.
Eğer bu yazıyı kaydeder veya yeniden düzenlerken herhangi bir problemle karşılaşmazsam, yaşanan sorunun kaynağı olarak alıntı kodları görmek kolaylaşacak.
Aksi halde, bu soruna cron uygulamasının yol açtığını söylemek daha doğru olacak.

Yukarıdaki bölümü kaydetmek için “Güncelle” butonuna bastığımda, Chrome adres kutusunda
“http://webmaster.gamet.com.tr/wp-admin/post.php”
satırı belirdi ve orada kaldı. Normalde işlemlerini tamamlayıp, aynı ekrana dönmesi gerekirdi.
Bilgisayarımın ikinci ekranından siteyi kontrol ettiğimde yazının düzgün olarak kaydedilmiş olduğunu gördüm. Yani “post.php” dosyası kayıt işlemlerini düzgün olarak gerçekleştirmiş olmakla birlikte, süreci tamamlayıp geri dönemiyor.
Bu yazıda bir kod alıntısı olmadığına, ama davranışın da değişmediğine bakılırsa, asıl sorumlu cron için yaptığımız düzenleme gibi görünüyor.
(post.php dosyasının kayıt işlemlerini tamamladıktan sonra ekrana boş bir sayfa getirip orada takıldığını da belirteyim. Bu sayfa gerçekten de boş, çünkü kaynak kodlarını görmek istediğinizde de tamamen boş bir sayfa çıkıyor.)

Bir yandan interneti de taramaya başladım. Bu durumu bazıları “WordPress Beyaz Ölüm Sayfası” olarak adlandırmış. Çok yeni bir sorun gibi de görünmüyor.
Sistemimde W3 Total Cache kullanıyorum. Onun bir etkisi olup olmadığını sınamak için tüm keşleri boşaltmasını isteyince, aynı Beyaz Ölüm Sayfası yeniden karşıma dikildi.
Böyle zamanlarda en yararlı ip uçları hata log dosyalarında bulunur.
Ve işte bütün sorunlarımın kaynağı!…
Bu bir bileşen: WP-dTree. Aslında çok işime yarayan bir bileşendi. Gözümü kırpmadan kaldırdım.
Ama boşuna sevinmişim! Değişen bir şey olmadı. Sadece WP-dTree cach ile ilgili hata mesajları sonlanmış oldu.
Şimdi bir başka suçlu bulmalı!
Örneğin W3 Total Cache’in kendisi olabilir mi?
Ama diğer subdomain sitelerimde hiç bir sorun yaratmadan çalışıyor.
Peki başka ne olabilir?
İnternetteki yazışmalardan birinde, functions.php dosyasının sonunda kalmış boş bir satırdan bahsediliyordu. Acaba bende de olabilir mi? Hemen kontrol ediyorum. Önce post.php dosyasını kontrol ettim. Gerçekten de en sonda boş bir satır vardı. Hemen temizledim.
ANcak Beyaz Ölüm Sayfası tüm ihtişamıyla yine karşımda.
functions.php dosyasını da kontrol ettim ama, orada boş satır falan yoktu zaten.

Bu kez temayı sorguluyorum. WordPress orijinal teması yerine yavru tema kullanıyordum. Bu yüzden doğrudan ana temayı etkinleştirdim.
Voila!
Sorun çözüldü! Sorunu yaratan yavru temanın kendisiymiş.

Hemen bir önceki yazıya dönüp resim sorunu ne durumda kontrol edeceğim.
Orada da her hangi bir sorun yok.
Demek ki yavru temanın functions.php dosyasında bir sorun olma olasılığı çok güçlü. Daha düşük bir olasılık olsa da, diğer ihtimal style.css dosyası. Bunlarda da fazla bir değişiklik yok zaten.
Hedef iyice daraldığına göre, sorunu çözmek artık çok daha kolay!

ahmet aksoy

Ara 072014
 
2.032 views

WordPress wp-cron.php Macerası Devam Ediyor

wordpress wp-cron.php
Evet! Bir önceki yazımda WordPress cron işlemini iptal edip, tetiklemeyi daha uzun bir periyot ile ve Cpanel üzerinden denediğimi, sonra da bütün işlemleri geri aldığımı yazmıştım.

Bir kaç gün önce hosting firmamdan bir mesaj aldım. İşlemci yoğunluk limitlerini aştığım ve tekrarlanması halinde önlem alınacağını bildiriyordu.

Böylesine durumlar yabancı hosting firmalarında genellikle çok daha kibarca hallediliyor. Bizimkiler, doğru dürüst bir inceleme yapmadan paldır küldür yasaklamaya gitmeyi tercih ediyor.

Bu durum büyük bir olasılıkla harici bir bot vb ile yaratılmış olmalı. Çünkü aynı sistem uzunca bir süredir sorunsuz çalışıyordu. Üstelik son günlerde başka işlerim nedeniyle web üzerinde herhangi bir çalışma yapmaya fırsatım bile olmamıştı.

Sonra bir mesaj daha geldi. Ancak bu mesajda incelik gösterip sorun kaynağını wp-cron.php olarak belirtmişlerdi.

Cron.php’nin işlemci yüküne sebep olabildiğini zaten bildiğim için doğrudan kendi önlemlerimi almaya karar verdim.

İnterneti bu amaçla yeniden taradım. Ve bu sefer, multisite wordpress uygulamalarında, her subdomain için wp-cron.php çağrısının ayrı ayrı tekrarlanması gerektiği bilgisine ulaştım. Gayet mantıklı bir açıklama. Çözüm olarak önerilen çeşitli scriptler var. Ben, aşağıdaki çözümü sadeliği ve kolay anlaşılırlığı açısından tercih ettim:

Yukarıdaki kodun 7. satırındaki ‘yoursite.com’ değerini kendi ana domain adınızla değiştirmeyi unutmamalısınız.

Bu scripti wp-cron-mu.php olarak isimlendirebiliriz. Bu script, ana domain de dahil olmak üzere aktif durumdaki tüm subdomain sitelerin wp-cron.php dosyalarını tek tek çalıştırıyor.

Cpanel cron komutu da şöyle değişiyor:

*/15 * * * * /usr/bin/php /var/www/yoursite/wp-cron-mu.php > /dev/null

Burada da yoursite.com adresini doğru adresle değiştirmeniz gerekiyor. Çağrılar 15 dakikada bir.

Bakalım işlemcilerin aşırı yüklenmesini bu önlem giderebilecek mi? Sanırım bir kaç gün içinde netleşir!

Eğer siz de multisite wordpress kullanıyorsanız, bu yönteme ihtiyacınız olabilir.

ahmet aksoy

Kaynaklar:

Kas 112014
 
2.297 views

WordPress Cron.php Macerası

Her yaptığımız şey istediğimiz sonucu verecek değil ya! Bazan yanlışlıklar da yapıyoruz. Ne de olsa insanız!…

cron

Her ne olursa olsun, yaptığımız yanlışlar bile bize bir sürü şey öğretiyor. Cron macerası da aynen öyle oldu.

webmaster.gamet.com.tr sitesinin performansını geliştirmek için SEO uygulamalarına devam ediyorum. Bu amaçla internet üzerinde yaptığım araştırmalardan birinde, cron.php dosyasının her sayfa ve post hareketinde otomatikman çağrıldığı için site performansını düşürdüğünden söz ediliyordu.

Açıklama gayet mantıklı. Eğer ziyaretçi sayınız ve sayfalarınızın tıklanma sayısı fazlaysa, cron.ph dosyası da çok sık çağrılacak ve bir sürü işlem boş yere tekrarlanacak.

Önerilen çözüm de gayet açık ve pratik:

1- cron.php dosyasının otomatik çağrılmasını engelle
2- Aynı dosyayı Cpanel üzerindeki veya shell üzerinden sistem cron ile istediğin aralıklarla çalıştır.

Ben de aynen bunları yaptım.

Önce wp-config.php dosyasını açtım ve içine şu satırı ekledim:

Böylece cron.php dosyası her tıklamada çalışmak zorunda olmaktan çıktı. Şimdi de Cpanel cron üzerinden istediğim aralıkta çağrılmasını sağlamak gerekiyor.

Bu amaçla cPanel’e girip “Zamanlanmış Görevler” bölümünü açtım:

Her şey güzel görünüyor!

Ama kısa bir süre sonra admin olarak bazı sıkıntılar yaşamaya başladım. Örneğin yaptığım değişiklikleri normal bir kullanıcı olarak test etmek için logout seçeneğini kullandığım halde, admin çubuğu yine ekranın tepesinden bana bakmaya devam ediyor. Bütün çerezleri sildim. Hatta bilgisayarımı kapatıp açtım. Ne yaptıysam bir şey değişmedi! Yetkisiz bir kullanıcı olarak siteye giremiyorum.

İnternet araştırmalarımdan da işime yarayacak bir sonuca ulaşamadım.

Sonunda pes ettim! Cpaneldeki cron işlemini devredışı bıraktım. wp-config.php dosyasındaki otomatik cron iptal satırını da kaldırdım.

Öyle görünüyor ki, “logout” işlemi de cron.php üzerinden etkinleştiriliyor. Ya da multi-site wordpress kullandığım için bu öneri benim işime yaramamış olabilir.

Eğer siz de bu konuda denemeler yapmış iseniz, deneyimlerinizden yararlanmak beni de mutlu eder. Yorum alanına düşünce ve önerilerinizi ekleyebilirsiniz.

Eğer ben bu konuda yeni bilgilere ulaşırsam, onları da sizlerle paylaşacağım.

ahmet aksoy

Not: Eğer hosting sisteminiz cron üzerinden wget komutunu işletmenize izin veriyorsa aşağıdaki linkte yer alan yazıdan yararlanabilirsiniz. Benim hostum buna izin vermediği için ben doğrudan php komutunu kullanmak zorunda kaldım:

http://www.iceablethemes.com/optimize-wordpress-replace-wp_cron-real-cron-job/

Kas 022014
 
2.349 views

Bildiğiniz gibi WordPress ana sayfasında yazıları özet halinde (wordpress excerpt mod) göstermek isterseniz, bir çok html yaftası

etkisiz hale gelir ve özet yazı sade bir görünüm kazanır.
Eğer siz de benim gibi bu uygulamayı biraz abartılı bulanlardansanız, birazdan aktaracağım çözüm sizin de işinize yarayabilir.

Bu çözümün kodlarını hazırlayan kişi Boutros AbiChedid. İlgili kodları 2011 yılında yazmış ve WordPress 3.1.3 sürümüne kadarki testlerini de yapmış. Aynı kodları ben şu anda WordPress 4.0 üzerinde kullanıyorum. Önceki bir kaç sürümde de hiç bir sorun yaşamamıştım.

Excerpt modundaki sadeleştirmeyi yapan orijinal fonksiyon: get_the_excerpt($text) fonksiyonu. Boutros AbiChedid, bu fonksiyonun istenen fonksiyonla yer değiştirmesini sağlıyor. Fonksiyonun içeriğindekileri yorumlamak için fazla uzman olmaya bile gerek yok.

custom_wp_trim_excerpt($text) fonksiyonun içinde yer alan allowed_tags değişkenine, yazı özetinde hangi html işlemlerinin kullanılabileceğini tanımlıyorsunuz.

Özet yazının uzunluğunu $excerpt_word_count değişkeni aracılığıyla değiştirebilirsiniz. Özetler için varsayılan sözcük sayısı 55 kelimedir.

Yazı özetinin sonuna eklenecek işareti de $excerpt_end değişkeniyle tanımlamanız mümkün.

Tüm kod aşağıda yer alıyor:

Yukarıdaki kodun son iki satırında orijinal kod fonksiyon listesinden siliniyor ve onun yerine yeni fonksiyon atanıyor.

Aşağıdaki ilk resimde özet yazının orijinal hali yer alıyor. Tamamiyle sade ve gösterişsiz (biraz da kullanışsız ):

Orijinal excerpt sadeleştirme

Aşağıdaki resimde ise yukarıdaki kod uygulandıktan sonra aynı özet yazının yeni görünümü yer alıyor. Uygulama sonrasında özet içindeki linkler artık aktif.

Sadeleştirme azaltılmış excerpt uygulama

İsterseniz yukarıdaki kodu aynen yavru temanızın functions.php dosyasına ekleyebilir, ya da isterseniz izin vereceğiniz özellikleri arzunuza göre değiştirdikten sonra kopyalarsınız. Seçim size kalmış!

Umarım işinize yarar.

Beni izlemeyi unutmayın!

ahmet aksoy

Kas 022014
 
2.075 views

Twenty Fourteen teması thumbnail (küçük resim) için hazır bir çözüm sunmuyor bize.

Daha önce temamızın anasayfasında yazıların özet olarak görünmesini (excerpt mod) sağlamıştık. Ancak bu özetlerin yanında küçük resimler görünmüyor.

thumbnail-1

http://www.dognmonkey.com/techs/twenty-fourteen-theme-customization.html  adresindeki makalenin yazarı bu soruna nasıl çözüm bulacağımızı  anlatıyor.

1-  Bu çözüm için öncelikle get_the_image.php dosyasına ihtiyaç var. Zip dosyasını indirip açın ve içindeki kod dosyasını yavru tema klasörünüze kopyalayın.

2- İkinci aşamada yavru tema klasörünüzdeki functions.php dosyasına aşağıdaki kodları ekleyin:

3- Üçüncü aşamada  content.php dosyasına aşağıdaki kodları ekliyorsunuz. Orijinal metinde sadece   is_search()  sorgulanıyor. Siz isterseniz verdiğimiz koddaki tüm seçenekleri aktif olarak kullanabilir, ya da sadece is_home() fonksiyonunu eklemekle yetinebilirsiniz: Tamamen size kalmış.

Bu üç aşamayı uyguladığınız zaman yazınıza eklenmiş bir resim varsa ve onun thumbnail görüntüsünü de oluşturmuşsanız (Force Regenerate Thumbnail veya Smush It gibi bir eklenti, eksik thumbnail görüntülerinizi tamamlamanızı sağlar) küçük resim (thumbnail) özet yazınızın üst tarafında yerini alacaktır.

Thumbnail alone

Fakat ben küçük resmin sol tarafta olmasını ve yazıların da hemen onun sağ yanından başlamasını istiyorum.

Yukarıda linkini verdiğim yazıda bu ayrıntıya hiç girilmemiş. Onları da ben ekleyeyim:

content.php dosyasına eklediğimiz kodu incelersek, resmimizin içine yerleştiği div kodunun “cover” sınıfı ile ilişkilendirildiğini görüyoruz. Ancak “cover” sınıfı hiç bir yerde tanımlı değil. Biz de yazılarımızın resmin sağ tarafında kalmasını sağlayacak css kodunu yavru temamızın style.css dosyasına ekliyoruz.

cover” sınıf tanımında div alanının sola dayalı olmasını, sağ tarafında 10 piksellik bir boşluk bulunmasını ve çevreleyen metne göre sol tarafta yer almasını belirtiyoruz.

Artık ana sayfadaki yazı özetlerimizin sol tarafında, küçük resimlerimiz de (thumbnail) yerini almış durumda.

Thumbnail on left

Yukarıdaki açıklamaların yetersiz kaldığı sorun veya sorularınız varsa, aşağıdaki yorum alanını kullanarak bana aktarabilirsiniz. Sizi en kısa zamanda yanıtlayacağımdan emin olun!

Beni izlemeyi unutmayın!

ahmet aksoy