PHP5 + Mysql 5 Türkçe Karakter Problemi
2005-12-22 11:15:43
PHP5 + MYSQL 5 ikilisinin kurulu olduğu bir sunucuda şu şekilde bir sorun ile karşılaşmıştım. Bu problemi linux listelerindeki arkadaşlara da sordum ve saolsunlar yardımcı oldular. Bende şimdi sizlerle paylaşmak istedim.
Site üzerinden mysql 'den veri çeken php dosyasını çağırdığımda Türkçe karakterler ? şeklinde gözüküyordu. Bunun bir çok nedeni olabilirdi başlangıçta. Mysql 'i latin5 charset ile başlatmak sorunu çözebilirdi ama yetmedi. Daha sonra bu problemin mysql in bir bug 'ı olduğunu ve mysql i çalıştırırken verilen bir parametre ile bunun düzeltilebildiğini öğrendim. Doğruymuş:)

/etc/my.cnf dosyamı şu şekilde düzenledim:

[root@~~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
default-character-set=latin5
#character-sets-dir=/usr/share/mysql/charsets
#default-collation=latin5_turkish_ci
max_connections = 400

[mysql.server]
user=mysql
default-character-set=latin5

[safe_mysqld]
err-log=/var/log/mysqld.log

[mysql]
default-character-set=latin5

ve bu conf. dosyasına ek olarak mysql sürecini başlatan betiğe aşağıdaki parametre yi de ekliyorsunuz.

--skip-character-set-client-handshake

Bu parametre, varsayılan server karakter setini kullanan ve clientlar tarafından gönderilen karakter set bilgisini yok sayar.

Doubtlessly you will be familiar with tools such as ISO Buster for Windows which allow you to open an ISO file without having to burn it to CD to have a little lookie at its contents….However, in Linux we have this tech built in. And ISO image can be mounted just like any device or file system, and here is how…

Create a mount point for the ISO:

BASH# mkdir /mnt/iso

Now mount the ISO in the mount point with the following command:

BASH# mount myiso.iso /mnt/iso/ -t iso9660 -o ro,loop=/dev/loop0

Where myiso.iso is your ISO file.

What I haven’t tried yet is omitting the ro (read only) option, so that it might be possible to make changes to the ISO before finally burning, not sure if this works (will check) but the command would probably look like this:

BASH# mount myiso.iso /mnt/iso/ -t iso9660 -o loop=/dev/loop0

linux konsolda Birden cok dosya icinde bul ve degistir islemleri yapmak.

Bu kod yeni sunuculardan bir tanesine aktarilan domainlerin dnslerinde yapilmasi gereken degisikler icin gerekti.

Basariyla uygulandi.

ingilizce metin su sekilde:


You could also use find and sed, but I find that this little line of perl works nicely.
perl -pi -w -e 's/search/replace/g;' *.php
-e means execute the following line of code.
-i means edit in-place
-w write warnings
-p loop

Example I had the following style sheet in a section:
and I wanted the following instead:
As each expression is a regular expression you’ve got to escape the special characters such as forward slash and .
\.\.\/includes\/style\.css

So the final line of code ends up as
perl -pi -w -e ‘s/\.\.\/includes\/style\.css/admin\.css/g;’ *.php

Benim uguladigim sekilde ise :

/var/named/*.db dosyalarinda
ns1.eskidomain.net.
adresinin

ns1.yenidomain.org.
ile degistirilmesi gerek


[root@pbserver named]# perl -pi -w -e 's/ns1\.eskidomain\.net\./ns1\.yenidomain\.org\./g;' *.db
[root@pbserver named]# perl -pi -w -e 's/ns2\.eskidomain\.net\./ns2\.yenidomain\.org\./g;' *.db

 

000000000000000000000000000000000

EK 1 KASIM 2017

=================================

find and replace etmenin yolu daha degisik sekilde

for E in `cat aaa.txt`; do perl -pi -w -e 's/content type/content_type/g;' $E; done

 


cd /usr/local/directadmin/scripts
mv roundcube.sh roundcube.old.sh
wget http://files4.directadmin.com/services/all/roundcube.sh
chmod +x roundcube.sh
./roundcube.sh

sonra

1- /config/main.inc.php dosyasini calisandan kopyala
2- /skins/default/images altina logolari at
3- /templates/login.html dosyasini calisandan kopyala
4- /etc/httpd/conf/httpd.conf dosyasini editle.

Alias /webmaileski /var/www/html/webmail/
Alias /squirrelmail /var/www/html/squirrelmail/
Alias /webmail /var/www/html/roundcube/

Bitti.


[17:40:21] OrHaNsS`Hastane`Amayok )) ANLAR
[17:40:22] OrHaNsS`Hastane`Amayok )) Eğer, yeniden başlayabilseydim yaşamaya,
[17:40:22] OrHaNsS`Hastane`Amayok )) ikincisinde daha çok hata yapardım.
[17:40:22] OrHaNsS`Hastane`Amayok )) Kusursuz olmaya çalışmaz, sırtüstü yatardım.
[17:40:22] OrHaNsS`Hastane`Amayok )) Neşeli olurdum, ilkinde olmadığım kadar.
[17:40:22] OrHaNsS`Hastane`Amayok )) Çok az şeyi ciddiyetle yapardım.
[17:40:22] OrHaNsS`Hastane`Amayok )) Temizlik sorun bile olmazdı asla.
[17:40:22] OrHaNsS`Hastane`Amayok )) Daha çok riske girerdim,
[17:40:22] OrHaNsS`Hastane`Amayok )) seyahat ederdim daha fazla.
[17:40:22] OrHaNsS`Hastane`Amayok )) Daha çok güneş doğuşu izler,
[17:40:22] OrHaNsS`Hastane`Amayok )) daha çok dağa tırmanır,
[17:40:23] OrHaNsS`Hastane`Amayok )) daha çok nehirde yüzerdim.
[17:40:24] OrHaNsS`Hastane`Amayok )) Görmediğim bir çok yere giderdim.
[17:40:25] OrHaNsS`Hastane`Amayok )) Dondurma yerdim doyasıya,
[17:40:25] OrHaNsS`Hastane`Amayok )) Daha az bezelye.
[17:40:27] OrHaNsS`Hastane`Amayok )) Gerçek sorunlarım olurdu
[17:40:28] OrHaNsS`Hastane`Amayok )) hayali olanların yerine.
[17:40:29] OrHaNsS`Hastane`Amayok )) Yaşamın her anını gerçek ve
[17:40:30] OrHaNsS`Hastane`Amayok )) verimli kılan insanlardan olurdum.
[17:40:31] OrHaNsS`Hastane`Amayok )) Farkında mısınız bilmem, yaşam budur zaten.
[17:40:32] OrHaNsS`Hastane`Amayok )) Anlar, sadece anlar, siz de "an"ı yaşayın.
[17:40:33] OrHaNsS`Hastane`Amayok )) Hiçbir yere, yanına; termometre, su, şemsiye ve
[17:40:34] OrHaNsS`Hastane`Amayok )) paraşüt almadan gitmeyen insanlardanım ben.
[17:40:35] OrHaNsS`Hastane`Amayok )) Yeniden başlayabilseydim,
[17:40:36] OrHaNsS`Hastane`Amayok )) ilkbaharda, papuçlarımı atardım.
[17:40:37] OrHaNsS`Hastane`Amayok )) Ve sonbahar bitene kadar yürürdüm çıplak ayakla.
[17:40:38] OrHaNsS`Hastane`Amayok )) Bilinmeyen yollar keşfeder, güneşin tadına varır,
[17:40:39] OrHaNsS`Hastane`Amayok )) çocuklarla oynardım, bir şansım olsaydı eğer...
[17:40:40] OrHaNsS`Hastane`Amayok )) Ama işte, 85'imdeyim ve biliyorum...
[17:40:41] OrHaNsS`Hastane`Amayok )) Ölüyorum...
[17:40:42] OrHaNsS`Hastane`Amayok )) Jorge Luis Borges
[17:43:13] &HevaL )) eha insanın bunu gözlügüne yapıştırması gerek
[17:43:20] &HevaL )) sürekli durmalı gözünün önünde unutmamalı
[17:46:09] OrHaNsS`Hastane`Amayok )) cok guzel ama

/sbin/iptables -A INPUT -m recent --rcheck --seconds 60 \
-m limit --limit 10/second -j LOG --log-prefix "BG "
/sbin/iptables -A INPUT -m recent --update --seconds 60 -j DROP

prozilla 2.0.4 64 bit centos 5 imde derlenmeyi red ediyor.

Red ederkende bu hatayi veriyor:

error: download_win.h:55: error: extra qualification ‘DL_Window::’ on member ‘print_status’

Derlensin diye

prozilla-2.0.4/src/download_win.h

dosyasini acip

55 ci satirdaki

void DL_Window:: print_status(download_t * download, int quiet_mode); satirini silip

yerine

void print_status(download_t * download, int quiet_mode);

yaziyoruz. Sorun halloluyor 🙂

Prozilla her eve lazim..

Bir kez daha yine yeniden custom bir kernele ihtiyacim var.
Aslinda custom degil “guncel” bir kernele ihtiyacim var.
Sahip oldugum donanimlar bu kadar hizli degisip guncellenirken official kernellerin bu kadar geriden gelmesine katlanamaz durumda kaliyorum her seferinde 🙂
15.09.2007 itibari ile kurmus oldugum
g33 chipsetli intel anakartim da yasadigim sorunlarin onune gecemek icin yeni kernelimi deneyecegim.
centos 5 64 bit kurulu ve ayarli durumda su an sistemde kerneli su sekilde yukliyecegim…


wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2 -O /usr/src/linux-2.6.22.6.tar.bz2
cd /usr/src
tar xjvf linux-2.6.22.6.tar.bz2
ln -s linux-2.6.22.6 linux
cd linux
make clean && make mrproper
cp /boot/config-`uname -r` ./.config
make menuconfig

Buraya kadar gayet duz gitti islem
su an kurulu bulunan official kernelin config ini .config olarak yeni kernel dizini icine aldigimdan onu kullanabilirim yeni kernelimde.
yuklemek icin
Load an Alternate Configuration File kismina girip .config dosyasini sececegim bu kadar basit.
Sonra yeni kernel icin uygun gorduklerimde menude sececegim.
General Setup —> () Local version – append to kernel release
kisminda kernelin benim kernelim oldugunu gostermek icin 😀 nickimi ekleyebilirim 🙂
menude isim bitince kayit ediyorum ve devam ..

make rpm

kernel centos kerneli olacak. Rpm den sasmamak lazim..
rpm isi bittikten sonra – bu bayaca uzun surecektir – sira kurmaya geldi.

kernelim 64 bit olduguna gore

cd /usr/src/redhat/RPMS/x86_64/
ll
rpm -ivh --nodeps kernel-2.6.22.6-shukko-1.i386.rpm

sonra ramdisk yaraticam

mkinitrd /boot/initrd-2.6.22.6-shukko.img 2.6.22.6-shukko

En son olarak grub umu duzenleyip isi bitiricem 🙂
Bakalim olucak mi ?

nano /boot/grub/menu.lst
vs vs ...

Reboot

Sonuc: Yeni derledigim kernel ile makina acildi 😀

“disable_functions” (Güvenlik)
“disable_functions” ile serverınızda birçok fonksiyonun çalışmasını engelleyebilirsiniz bu sayede sitenize inject edilen scriptler, sheller için güvenliğinizi almış olursunuz. Bu kadar fonksiyon fazla gelebilir ama iyi bir güvenlik için şart.

Code:
disable_functions = foreach, glob, openbasedir, posix_getpwuid, f_open, system,dl, array_compare, array_user_key_compare, passthru, cat, exec, popen, proc_close, proc_get_status, proc_nice, proc_open, escapeshellcmd, escapeshellarg, show_source, posix_mkfifo, ini_restore, mysql_list_dbs, get_current_user, getmyuid,pconnect, link, symlink, fin, passthruexec, fileread, shell_exec, pcntl_exec, ini_alter, parse_ini_file, leak, apache_child_terminate, chown, posix_kill, posix_setpgid, posix_setsid, posix_setuid, proc_terminate, syslog, allow_url_fopen, fpassthru, execute, shell, curl_exec, chgrp, stream_select, passthru, socket_select, socket_create, socket_create_listen, socket_create_pair, socket_listen, socket_accept, socket_bind, socket_strerror, pcntl_fork, pcntl_signal, pcntl_waitpid, pcntl_wexitstatus, pcntl_wifexited, pcntl_wifsignaled, pcntl_wifstopped, pcntl_wstopsig, pcntl_wtermsig, openlog, apache_get_modules, apache_get_version, apache_getenv, apache_note, apache_setenv, virtual
Eğer bu kadar fonsiyonu devre dışı bırakmak fazla geldiyse alttaki gibi de ayarlayabilirsiniz bu da güvenliğiniz için yeterlidir:

Code:
disable_functions = glob, posix_getpwuid, array_compare, array_user_key_compare, ini_restore, exec, proc_get_status, proc_nice, proc_open, allow_url_fopen, fin, pconnect, system, dl, passthruexec, shell_exec, proc_close, proc_get_status, chown, chgrp, escapeshellcmd, escapeshellarg, fileread, passthru, popen,curl_exec, shell, execute

Safe Mode Güvenlik
“Safe Mode” adından da anlaşılacağı gibi “Güvenli Mod” anlamına geliyor. “Safe Mode” genelde birçok serverda “Off” durumdadır ve bu da birçok tehlikeye davetiye çıkaran unsurlar arasında yer alır. “Güvenli Modu Açık” durumuna getirmek shellerin serverımızda istedikleri gibi dolaşmalarını, exploitlerin çalıştırılmasını ve komutların execute edilmelerini önler. Günümüzde “açık olan güvenlik modunu” kapalı duruma getiren scriptler mevcut fakat altta anlatılan önlemlerle bunun da önüne geçilebilir.

Code:
safe_mode = on
çalışmayan script olursa httpd.conf ve .htaccess dosyasından kullanıcıya gerekli izin verilebilir. örnek aşağıdaki gibi

Code:
php_flag safe_mode Off
“register_globals” (Güvenlik ve Performans)
php.ini dosyasında bulunan “post” “get” ile gönderilen değerlere kullanıcı adlarıyla ulaşılıp ulaşılamayacağını belirtir. Session, cookie değerlerini kendi adıyla tanımlayarak birer değişken olmasına neden olur. “Off” olarak ayarlanırsa bu gibi değerlere kendi tanımladığı şekilde ulaşılamaz.

Code:
register_globals = off
çalışmayan script olursa on değerini htaccess dosyasına koyup sadece o siteye açabilirsiniz. veya httpd.conf dosyasına

Code:
php_flag register_globals on
“allow_url_fopen” (Güvenlik)
“allow_url_fopen” default olarak “açık” şeklinde gelir ve bunun “on” açık olması “file_get_contents()”, “include()”, “require()” fonksiyonlar uzaktaki dosyaları da işlemesine olanak tanır. Bunlara verilen bilgiler hiçbir kontrolden geçirilmezse kritik güvenlik açıklarını sebep olur. (eğer safe mode açıksa ve open basedir aktif ise bunun açık kalmasında hiç bir sorun yok. Kapalı kalması durumunda bir çok script çalışmaz. en basit örnek olarak php nuke çalışmaz.)

Code:
allow_url_fopen = off
“display_errors” (Güvenlik)
Bu seçenek sitenizin çalışmasında oluşacak bir hatayı tarayıcıya yansıtıp yansıtmayacağını belirler yani siteniz için diyelim bir forum veya portal kullanıyorsunuz ve bunların çalışması esnasında genelde “Fatal error: Call to undefined function get_header() in /home/ahmo/public_html/index.php on line 37” şeklinde benzeri hata görülür bunların gözükmesini engellemek için bu değeri kapalı duruma getirmek gerekir zira kötü niyetli kişiler sitenizin serverda bulunan tam yolunu öğrenmiş olurlar.
(Eğer safe mod açık ve open basedir aktif ise bunu kapatmanıza gerek yoktur. zira bu tür hatalar ayrıca scriptinde hata neresinde olduğunu gösterdiği için host kullanıcısına sitesini düzenlemesi için büyük kolaylık sağlıyor.)

Code:
display_errors = Off
“cgi.force_redirect” (Güvenlik)
Bu değer normalde “on” “1” yani açık olarak gelir ve Windows sunucularında IIS, OmniHTTPD gibi buralarda kapatılması gerekir. Kendi sunucunuz için bu durum yoksa değiştirmenize gerek yoktur.

Code:
cgi.force_redirect = 0
“magic_quotes_gpc” (Güvenlik ve Performans)
Magic Quotes işlemi GET/POST yöntemiyle gelen Cookie datasını otomatikmen PHP script’e kaçırır. Önerilen bu değerin kapalı olmasıdır.

Code:
magic_quotes_gpc = off
“magic_quotes_runtime” (Güvenlik ve Performans)
Magic quotes çalışma sürecinde data oluşturur, SQL’den exec()’den, vb.
Önerilen:

Code:
magic_quotes_runtime = Off
“magic_quotes_sybase” (Güvenlik ve Performans)
Sybase-style magic quotes kullanır (Bunun yerine \’ ‘ bununla ” kaçırır)

Code:
magic_quotes_sybase = Off
“session.use_trans_sid” (Güvenlik)
Bu ayarı dikkatli ayarlayın, kullanıcı emaile aktif oturum ID’si içeren URL gönderebilir
kullnıcının güvenliği için bunu kapatıyoruz.
Önerilen:

Code:
session.use_trans_sid = off
“expose_php” (Güvenlik)
“expose_php” açık ise kapalı yapılması önerilir. Aksi takdirde PHP ile yaptığınız herşeyde sunucu tarafından PHP sürümü gibi bilgiler gösterilir. Hackerlar hatta Lamerlar bu bilgileri severler (ne boh anlıyorlarsa sanki). Bunları engellemek için “off” konumuna getiriniz.

Code:
expose_php = Off
“html_errors” (Güvenlik)
Bu değerin açık olması durumunda PHP tıklanabilir hata mesajları üretecektir. Kapalı olması güvenlik için önerilir. başında “;” işareti varsa kaldırıyoruz ve değeri kapatıyoruz.

Code:
html_errors = off
“max_execution_time” (Güvenlik)
Scriptinizi maksimum uygulamayı yürütme zamanı mesela kullanıcı bir linke tıkladı ve bu linkin açılması belirtilen saniyeden fazla olursa sayfa sitenizin serverda bulunduğu tam yolu göstererek hata verir. Bu hataların gözükmesi güvenlik açısından sakıncalıdır. 300 saniye yazan yeri istediğiniz zaman ile değiştirebilirsiniz. bana kalırsa bırakın yolu görsün çok fazla sayfa beklerse extra yğunluk demektir. direk bırakın hata versin. süreyi 30 yapalım.

Code:
max_execution_time = 30
“max_input_time” (Güvenlik)
Scriptinizin aynı şekilde bir dataya ulaşmak için istek yolladığında maksimum geçen zaman 60 yapalım. fazla bile

Code:
max_input_time = 60
“allow_call_time_pass_reference” (Performans)
Fonksiyonların çağrılma zamanında yaşanan uyumsuzluklarla ilgili uyarı verir.
örneğin ilk belittiğimiz yasak komutlarda hiç bir uyarı vermeden bom boş sayfa çıkarır karşıya. böyle bir durumda scripte bakmaktansa tekrar bunu açık duruma getirirsiniz hatayı gördükten sonra tekrar kapatın fonksiyonu.

Code:
allow_call_time_pass_reference = off
“enable_dl” (Güvenlik)
Bu değerin “off” kapalı olması gerekir aksi halde kişilerin sistemde php modüllerinde çalışma yapmasına olanak sağlar ve sistemde rahat dolaşmalarını sağlar güvenlik için kesinlikle kapalı olması gerekir.

Code:
enable_dl = off
“track_errors” (Güvenlik ve Performans)
Sürücülerde meydana gelen hatalarda yetki verildiği taktirde hata mesajı errormsg olarak değişkende gösterilir.
track_errors = Off
“file_uploads” (Güvenlik)
Eğer sunucda tek site barındırıyorsanız ve o sitede her hangi birşey sunucuya yükletilmiyorsa kapalı kalmasında yarar var. Ama çoklu site barındırıyorsanız. Günümüzdeki tüm siteler artık avatardır, dosya v.s uploat ediyor karar sizin.
ben yine kapatın diyeyimde.

Code:
file_uploads = off
“ignore_repeated_errors” (Güvenlik ve Performans)
Kapalı olursa tekrarlanan hataları loglamaz.
ignore_repeated_errors = Off
“ignore_repeated_source” (Güvenlik ve Performans)
Tekrarlanan mesajlar engellendiğinde, mesaj kaynağını engeller Bu ayar açık yapıldığında hataları loglamayacaktır farklı dosyalardan ya da kaynaklardan tekrarlanan mesajlarla.
ignore_repeated_source = Off
“display_startup_errors” (Güvenlik ve Performans)
“display_errors” değeri “on” açık olsa bile, Php’nin çalışma sırasında meydana gelen hatalar gözükmeyecektir. Bu değerin şiddetle “off” kapalı duruma getirilmesi önerilir.

Code:
display_startup_errors = off
“safe_mode_gid” (Güvenlik)
UID – GID kontrollerini sadece UID ile yapmasına izin verir böylece aynı grupta dosyalar bulunsa bile göremezler yani serverda bulunan diğer clientların scriptlerini v.s görmeleri engellenir.

Code:
safe_mode_gid = Off
“output_buffering = 4096” (Performans)
4 KB’lik bir tampon çıktısı ayarlar “output buffer”

Code:
output_buffering = 4096
“register_argc_argv” (Performans)
Kapalı olursa gereksiz ARGV ve ARGC kayıtlarını önler. PHP nin ARGV ve ARGC değişkenlerini bildirip bildirmemesini anlatır.

Code:
register_argc_argv = Off
“php_value session.use_trans_sid – php_value session.use_only_cookies”
Bu şekilde ayarlanması URL’deki PHPSESSID bilgilerini kaldırır.
seo filan yapanlar için uygun. genlede smf, phpbb forumlarda ve sension koruma uyguladığınız scriptler için PHPSESSID bilgilerini url ye eklemez. başlarında ; işareti varsa kaldırın.

Code:
session.use_trans_sid = 0
session.use_only_cookies = 1
“session.auto_start”
Oturum başlatmayı başlangıçta isteme
session.auto_start = 0
“session.cookie_lifetime”
Cookie’nin zaman ayarı
session.cookie_lifetime = 0
“memory_limit”
Scriptin tükettiği maksimum hafıza miktarı
değeri istediğinizgibi verin. 8M çokfazla bir değer. sadece kendi siteniz barınıyorsa bu değer normal. ama host ile uğraşıyorsanız 512K yapmanız daha uygun.

Code:
memory_limit = 8M
“post_max_size”
PHP’nin kabul edeceği maksimum POST data boyutu.
isteğinize bağlı 1 Mb vermek için 1M yazın

Code:
post_max_size = 256K
“upload_max_filesize”
Upload edilen dosyaların maksimum boyutu
buda sizin isteğinize bağlı isterseniz 50M yapın. o zaman kullanıcı 50 Mb’a kadar dosya upload edebilir.

Code:
upload_max_filesize = 256K
“variables_order”
(Ortam, GET, POST, Çerez, Sunucu) bunların işlenmedeki sıralarını belirler.
variables_order = “EGPCS”
Bu kadar ondan sonra ctrl x y diyip kaydediyoruz ve
service httpd restart diyoruz.
Genelde çoğu fonksiyon zaten böyle dediğim değerdedir. 3-5 tanesi hariç tabi. Yeni başlayan arkadaşlar için anlattımki hangisi ne işe yarar öğrenmiş olsunlar.