Bi'şey mi bakmıştın? (blog içi arama)

24 Ekim 2014 Cuma

Mysql Fiyat Sıralama Problemi

Merhabalar,

PHP ile mysqlden veri çekerken noktalamalı rakamlarda sıralama sorunu yaşanabiliyor. Örneğin; çoktan aza sıralamada 970.00 sayısı 1,280.00 dan önce gelebiliyor. Bunun önüne geçmek çok basit.

Hemen örnek vereyim;

Çekmek istediğimiz alanın adı: fiyat
Sıralama: Artan

"select * from urunler order by fiyat Asc";
Yerine
"select * from urunler order by REPLACE(fiyat, ',', '')+0 Asc";
kullanın.

Azalan sıralama istiyorsanız Asc yerine Desc kullanabilirsiniz.

Hepinize mutlu yarınlar...

18 Ekim 2014 Cumartesi

PHP substr_replace türkçe karakter sorunu çözümü

Merhabalar,

Php ile türkçe yazılan bir yazıyı kısaltmak için substr_repace() fonksiyonunu kullanmak bazen can sıkabiliyor. Kestiği notkada türkçe karakter olması durumunda (türkçe karakteri çift karakter gibi alarak) ortadan bölüyor ve saçma sapan bir hata ile karşılaşıyorsunuz.
Çözümü çok basit aslında, mb_substr() kullanmak! (Çözüm için yazının sonuna gidin)

Örnek ile açıklayalım hemen:

Sitenize eklemek için haber modülü yaptığınızı farz edelim. Tablo adımız haberler olsun. Alanlar şu şekilde:
haber_id
haber_adi
haber_icerik

Haber içeriğimiz 500 karakterde kesilsin istiyoruz. Sayfaya çağırıyoruz;

### ÖRNEK BAŞLANGIÇ ###
<?
$query = mysql_query("SELECT * FROM haberler");
while($row = mysql_fetch_assoc($query))
{
$i++;
?>
<div name="haber_<? echo $i; ?>" class="haberler">
<img src="http://www.alanadi.com/haber_resimleri/sg1234sda.jpg" style="max-width:150px;float:left" />
<? echo substr_replace($row['haber_icerik'], ''...', 500); ?>
<br>
<a href="http://www.alanadi.com/haberler/<? echo $row['haber_id']; ?>">Devamı için tıklayınız... </a>
</div>
<?
}
?>
### ÖRNEK BİTİŞ ###

Yukarıdaki örnekte, haber içeriği türkçe bir karakter ile bitiyorsa şu görüntü oluşabiliyor:
...tarihinde ankara kız�...
 Halbuki orada yazması gereken:
 ...tarihinde ankara kızı...

ÇÖZÜM:
<? echo substr_replace($row['haber_icerik'], ''...', 500); ?>
YERİNE
<? echo mb_substr($row['haber_icerik'], 0,500, 'UTF-8'); ?>
 Kullanın :)

Hepinize mutlu yarınlar...

16 Ekim 2014 Perşembe

SSH tmp temizleme WHM Cpanel

Merhabalar,

TMP dolması yerli yersiz, saçma sapan problemlere yol açabiliyor. Bu sebeple zaman zaman manuel olarak boşaltmanız gerekebilir.
Bunun için en kestirme yol, SSH ile sunucumuza bağlanarak tmpyi tekrar oluşturmaktan geçiyor. Ardından servisleri restart ediyoruz. Komutlar sırası ile şu şekilde (teker teker kullanın, biri tamamlanınca diğerini...):

/bin/umount -l /tmp
/bin/umount -l /var/tmp
/bin/rm -fv /usr/tmpDSK
/scripts/securetmp --auto
/scripts/restartsrv_mysql
/scripts/restartsrv_httpd


Eğer mysql servisi ile ilgili bir sorun yaşıyorsanız, mutlaka aşağıdaki komutu da kullanın. FAILED alırsanız üstteki adımları tekrar deneyin.

service mysql start

Mesela, sunucuda mysql servisi beklenmedik bir biçimde duruyor ve çalıştırılamıyor olabilir, ki ben bunu yaşıyorum. Bu sorunun çözümü için yukarıdaki adımlar işe yarıyor. Tabii ki bu kısa süreli bir çözüm, Sunucunuzun yedeğini alıp mutlaka en kısa sürede taşımanız sizin yararınıza olacaktır.
Veya yönetim paneline giriş yapamıyorsunuz, sessionlar çalışmıyor. Tüm ayarların doğru olduğundan eminsiniz. tmp dizininin dolu olduğundan şüphelendiniz mi hiç?

Hepinize mutlu yarınlar...

Not: tmp klasörünün içine girip silmeyi denemeyin lütfen :) uğraşırsınız...

14 Ekim 2014 Salı

PHP mevcut zamanı almak

Merhabalar,

PHP içerisinde mevcut zamanı almak için date() fonksiyonunu kullanabilirsiniz. Ben bu yazımda bu fonksiyonun kullanım amaçlarından sadece birine değineceğim.
Özellikle dosya yükleme sırasında sıkça karşılaşılan bir problemdir dosya ismi çakışması. Dosyaları yüklerken bir bakmışsınız galeride önceki yüklediğiniz fotoğrafın yerine son yüklediklerinizden birisi gelmiş. Bu sorunun önüne geçmek için genelde rand() kullanılsa da yeterli olmuyor ne yazık ki. Özellikle dosya sayısı yüksek ise işiniz tam anlamı ile şansa kalmış oluyor.
Bu sebeple rand() fonksiyonunun yanında date() de kullanmak en mantıklısı diye düşünüyorum.
Bir de md5() ile kriptolarsak tadından yenmez :)
Neden sadece date() kullanmadığımıza gelirsek, aynı saniyede resim yüklenmesi ihtimaline karşılık olduğunu söyleyebilirim. Eşeği sağlam kazığa bağlamak gerekir, değil mi?

Örnek kullanım;

$tarih = date('Y-m-d H:i:s');
$rand = rand(9,99999);
$isim = md5($rand . $tarih);
    
Not: Fonksiyonların üzerine tıklayarak "php.net" sayfasından detaylı güncel kullanım bilgilerini görebilirsiniz.

13 Ekim 2014 Pazartesi

SSH ile toplu yedek alma

Merhabalar,

Bu yazımda sıkça ihtiyaç duyduğum bir konuya değineceğim.

Kontrol ettiğim sunucularda toplamda 1500ün üzerinde hosting hesabı var. Bunların yedeklerini almak için her zaman data centera hard disk gönderemiyorum. Bundan dolayı yedekleri ara ara kendim almak zorunda kalıyorum.
Takdir edersiniz ki bütün hesapların full backuplarını almak (dosyalar + sql + ...) eğer teker teker yapacaksanız uzun zaman alıyor. Bunun için SSH Secure File Transfer, SSH Secure Shell kullanıyorum.

Yaptıklarımı adım adım anlatayım şimdi.
  1. SSH Secure File Transfer ile (Winscp gibi farklı uygulamalar da kullanabilirsiniz ama ben buna alıştım açıkçası) sunucumuza bağlanıyoruz.
  2. Yeni terminal penceresi açıyoruz.
  3. Aşağıda vermiş olduğum komutu yapıştırıyoruz (Shıft + Insert veya Sağ tık + Yapıştır)
  4. Enter a basıyoruz.
Gireceğiniz komut:
for i in $(ls /var/cpanel/users); do /scripts/pkgacct $i;done

Terminal penceresini işlem tamamlanana kadar kapatmıyoruz. Bütün hosting hesaplarının tam yedekleri (full backup) sunucumuzun /home dizinine alınmaya başlandı. Şimdi /home dizinine girip yedeklerinizi bilgisayarınıza indirebilirsiniz.
Eğer siz de benim gibi fazlaca hesap ile ilgileniyorsanız size tavsiyem, eğer hala yapmadıysanız, mutlaka bir fiber internet alın. Zira dosya indirmeleri konusunda gerçekten zaman kaybı yaşanabiliyor :)

Hepinize mutlu yarınlar...

SSH indirme linki (Tarama yapıldı, güvenli): SSH 3.2.9 indir

Yakında yeni yazılarımla sizlerleyim

Merhabalar,

Uzunca bir süredir yazmaya ara vermiş durumdaydım. Bundan sonra yayınlarıma tarz değiştirerek devam edeceğim.
Şu anda meşgul olduğum işim dolayısı ile fazla düşemiyordum blogumun üzerine. Ben de madem bir iş ile uğraşıyorum, o iş ile ilgili yazayım istedim.

Bundan sonraki yazılarımın çoğunluğu php ve mysql üzerine olacak. Bütün sorularınız için e.adiguzel@yandex.com mail adresimden bana ulaşabilirsiniz.

Hepinize mutlu yarınlar...
Özel Arama