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...
24 Ekim 2014 Cuma
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...
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...
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;
Not: Fonksiyonların üzerine tıklayarak "php.net" sayfasından detaylı güncel kullanım bilgilerini görebilirsiniz.
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.
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
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.
- SSH Secure File Transfer ile (Winscp gibi farklı uygulamalar da kullanabilirsiniz ama ben buna alıştım açıkçası) sunucumuza bağlanıyoruz.
- Yeni terminal penceresi açıyoruz.
- Aşağıda vermiş olduğum komutu yapıştırıyoruz (Shıft + Insert veya Sağ tık + Yapıştır)
- Enter a basıyoruz.
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...
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...
Etiketler:
engin adıgüzel,
kodlama,
mysql,
mysql kodlama,
php,
php çözüm,
php problem,
php sorun,
sql problemleri,
sql sorunları,
veritabanı
Kaydol:
Kayıtlar (Atom)
Özel Arama