8
Şub

Büyük bir veri tabanının karakter setlerini değiştirmeniz gerekebilir. Bende böyle bir ihtiyaç için küçük bir php script yazdım.

Lazım olabilecekler için script indirebilir.

Daha iyi bir yöntem biliyor iseniz dürtmekten çekinmeyiniz…

9
Oca
Sonunda taşınma işi bitti! Evet arkadaşlar sorunları halledip sistemimi tamamen sunucuya taşıdım. İlk django sitem nysera.net artık açık ama test yayınında diye not düşüyorum! Duyurusunu şimdiye kadar yapmamıştım çünkü tüm problemleri halledememiştim lanet bir satırın sonuna "/" işaretini koymayı unuttuğum için 10 sayfa hata kaydını okumak zorunda kaldım. Baştan daha dikkatli okusaydım bu sorunu yaşamayacaktım hatalara bakıyordum "mediaccs" diye bir şey var dikkatimi çektide anca fark ettim.

Django'yu Ubuntu kurulu bir sunucu üzerinde Emre Yılmaz'ın tavsiyesi ile apache ve mod_wsgi ile çalıştırıyorum. Aslında çoğu sitede mod_python örneği gösterildiği için onu kullanacaktım ama Emre'nin uyarısıyla mod_wsgi'a geçtim. Kendi hatalarımda dışında gayet memnunum.

Neyse mod_wsgi kullanmak için bu dökümanı tavsiye ederim.

Temel olarak kaynak kodlarınız arasına django.wsgi isimli bir dosya ekliyorsunuz sonra apache de confing dosyanıza bir iki ekle site hazır hale geliyor. Fazla uğraştıracak bir kısmı yok ama ben admin medya dosyalarının adresini düzgün yazmamışım. Öncelike ilk hata dökümanın tekinden direkt kopyalamam olmuştu. Bu Linux'a ne kadar alışık olduğunuzla alakalı bir şey hiç aklıma gelmemişti kütüphanenin orada olmayabileceği, sonra kendim arayıp doğru dizini buldum. Belki de bilerek yanlış yazmışlardı doğrusunu öğrenmemiz için... /usr/lib/ altına bakmanızı tavsiye ederim. Sonra bu konumu yazarken satırın sonuna "/" eklemeyi unutmayın derim. Apache'yi yeniden başlatırken bir uyarı vermiyor ama sitenizin kayıtlarına baktığınızda uzun bir listeyle karşılaşıyorsunuz^^

Bir başka hata debug seçeneğini kapattıktan sonra 404.html ve 500.html gibi hatalar için gerekli dosyaları oluşturmamaktı. Debug seçeneği açıkken Django'nun kendi hata sayfalarıyla karşılaşıyorsunuz ama debug'ı kapattığınızda bu dosyaların template klasörünüzde bulunması gerekiyormuş.

Bir diğer hata Türkçe karakter problemiydi. Şimdiye kadar hep sqlite üzerinde çalıştığım için mysql'de ayarların nasıl yapılacağı konusunda pek bilgim yoktu. Türkçe karakter problemini gidermek için yeni bir veritabanı oluşturmam gerekti ama bu sefer veritabanını oluştururken CREATE DATABASE mydb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; şeklinde karakter set ve collation ayarlarını ekledim. Bu Türkçe karakter problemini ortadan kaldırdı. Zaten kodları utf8 ile kaydediyorum tema dosyalarında da kodlama bilgisi utf8 olarak geçtiği için başka bir ayar yapmama gerek kalmadı. Bu tüyoyuda Ozan Hazer'in blogundan öğrendim, kendisine buradan teşekkür ederim.

Başka bir hata da setuptools'u kurmayışımdı. Django eggs dosyalarını kullanıyormuş. Ben bunu bilmiyordum dökümanın tekinde de kurulması gerektiği yazmıyordu ama eğer kendi sunucunuzu yönetiyorsanız python-setuptools'u da mutlaka yükleyin. Egg nedir merak ediyorsanız IBM'in geliştirici sitesinde çok güzel bir makale mevcut, işinize yarayacaktır.

Umarım bu yazı işinize yarar. Herkese kolay gelsin
10
Eyl

Boş vakitlerimde MySQL ile ilgili araştırma, belge okuma vs işleriyle uğraşıyorum son günlerde. Bugün MySQL resmi sitesinde başlayan yolculuğum code.openark.org sitesinde son buldu. Oldukça ilginç kod paylaşımları yapılmış olan bir sayfa. Anladığım kadarı ile genel olarak SQL üzerinde paylaşımlar var.

İlgimi çeken yazı ise SQL ile yapılmış olan ve yazımın başlığını oluşturan pie chart. Sanırım bir süre boyunca boş vakitlerimde bu kodu anlamaya çalışarak geçireceğim. Buyrun ilgili link:

http://code.openark.org/blog/mysql/sql-pie-chart

9
Eyl

Üzerinde çalıştığımız proje kapsamında bir alan içerisinde virgülle ayrılmış sayısal ifadeler tutuyoruz. Bu alan ilgili satırın kullanıldığı farklı içeriklerin id numaralarını tutmakta. Tabi yeri geldiğinde bunları tekrar parse etmek gerekiyor.

Özellikle bu id numaralarına göre çekeceğimiz verileri belirlemek için LIKE komutu pek işe yaramıyor çünkü LIKE hem istediğimiz sayıyı çekiyor hemde bu sayıyı içeren başka sayıları da çekebiliyor. Örneğin aradığımız sayı “1″ ise LIKE komutu ile içerisinde “1″ geçen tüm sayılar geliyor. Bu da bizim istediğimiz bir durum değil açıkçası.

Bu işi nasıl yaparız nasıl ederiz diye kafa yorarken bu işi PHP tarafında yapmaktansa MySQL tarafında yapmanın daha güzel olacağını düşünüp bunun yollarını araştırdım. Tabi ilk baktığım yer olan (ki genelde hep resmi belgelendirmelere bakarım) MySQL belgelendirme sayfaları oldu.

Bu noktada MySQL içerisinde regex ifadelerinin kullanılabildiğini ve bununla ilgili bir kaç örneğe (bayağı fazla örneklere) ulaştım. İşimizi görecek çok güzel bir yapı oluşturduk kendimize, buyrun komutumuz:

SELECT ids FROM mytable 
WHERE ids REGEXP '[[:<:]]aranan[[:>:]]';

Daha bir çok ilginç ifade mevcut. Sanırım zaman buldukça daha detaylı olarak inceleyeceğim.

MySQL Regex Sayfası: http://dev.mysql.com/doc/refman/5.0/en/regexp.html#operator_regexp

28
Ağu

Küçük bir yazılım üzerinde uğraşıyordum bu aralar. Adı “Adresci” olan bu yazılım, MySQL sunucumuza istediğiniz adresleri kaydediyor. Sonra başka birgün bakmak isterseniz listeliyor, adresler arasından arama yapabiliyor. Kısacası basit bir yazılım fakat veritabanına başlayacaklar için (benim için) kendinize yararı olabilir. Peki Python ile basitçe nasıl bir MySQL sunucusuna bağlanırız?

Öncelikle bize

mysql-python – Python için MySQL modülü

adlı paket gerekiyor. Paket yönetinicisinden ya da “sudo pisi it mysql-python” ile kurabilirsiniz. Sonra “mysqldeneme.py” adlı bir dosya oluşturalım. Ve dosyamıza şunları yazalım.

import MySQLdb

baglan = MySQLdb.connect (host = “localhost”, user = “kullaniciadi”, passwd = “sifre”, db = “veritabaniadi”)
cursor = baglan.cursor ()
cursor.execute(“SELECT VERSION()”)
print cursor.fetchone ()
cursor.close()

Bu kısa deneme ile MySQL sunucunuzun versiyonu hakkında bilgi alabilirsiniz. Ayrıca “SELECT * FROM tablo” gibi komutları “execute” metodunu kullanabilir, cursor.fetchone ya da cursor.fetchall kullanıp çıktıları alabilirsiniz. Kodları tek tek açıklarsak:

import MySQLdb

Python ile MySQL sunucusunun arasında iletişimi kurmasına yardımcı olacak “MySQLdb” adlı modülü programda kullanılabilir ettik.

baglan = MySQLdb.connect (host = “localhost”, user = “kullaniciadi”, passwd = “sifre”, db = “veritabaniadi”)

“baglan” ile sunucuya baglanacağımız bilgileri belirttik. Ve sunucuya bağlandık.

cursor = baglan.cursor()

“cursor” objesi ile bağlantının metodunu kullanabilir yaptık.

cursor.execute(“SELECT VERSION()”)

Sunucuya bir komut gönderdik.

print cursor.fetchone

Komuttun geri çıktısını çıkardık.

cursor.close()

Bağlantımızı kapattık.

Bu metni uygulamadan önce lütfen MySQL komutlarını bir öğrenin. İşin derinliğini görmeden Python ile işe hemen atlamayın derim.

İyi Pythonlamalar!

Benzer yazılar:

  1. MySQL notları
  2. Python ile .mp3 ve .midi dosyalarını açmak/dinlemek

17
Tem

Bu yazımda, Linux dağıtımlarına Php ve ek araçların (sunucu,veri tabanı vb..) nasıl kurulacağını anlatacağım. Bu işlem genelde LAMP (Linux, Apache, MySQL ve PHP) olarak adlandırılır. Fakat ben mümkün olduğunca farklı dağıtımlar ve farklı yazılımların kurulum işlemlerini de anlatmaya çalışacağım. Bu yazımda sadece dağıtımlar üzerine kurulumlar ile ilgili bilgi vereceğim. Çeşitli ayarlar ile ilgili bilgileri özel olarak ileride anlatacağım. Ve bütün anlatımlarım sırasında elimden geldiği kadar farklı işletim sistemleri ve dağıtmlar ile ilgili örneklere değineceğim.

Pardus dağıtımına Php, Apache, MySQL ve PhpMyAdmin kurulumu:

Pardus dağıtımında LAMP kurmak oldukça basit bir işlemdir. Öncelikle:

sudo pisi it php apache mysql phpmyadmin mod_php

komutu ile sistemimize ilgili yazılımları kurmamız gerekiyor. “mod_php” paketi apache ile php yorumlayıcısının anlaşması için gerekli apache modül paketidir. PhpMyAdmin ise web tarayıcımız aracılığı ile MySQL tablolarımızı ve veri tabanlarımızı yönetmemizi sağlayan Php ile yazılmış bir uygulamadır. PhpMyAdmin yazılımını kurabilmeniz için öncelikle “katkı” deposunu eklemeniz gerekmektedir.

Bu işlemleri bitirdikten sonra sırasıyla:

sudo service apache start
sudo service mysql_server start

komutlarını vererek apache ve mysql sunucularını çalıştırmanız gerekiyor. Bilgisayarınız her açıldığında bu servislerin otomatik başlatmak istiyorsanız “start” komutu yerine “on” yazmanız yeterlidir.

Bu işlemlerden sonra

service

komutu vererek ilgili servislerin başladığını kontrol etmekte fayda var. Eğer iki serviste çalışıyor ise herşey yolunda gitmiş demektir. Artık tarayıcınıza “http://localhost” yazarak web sayfalarınızı görüntüleyebilirsiniz.

Artık Pardus sisteminiz hazır. Bu noktada bir takım dosyaların yollarını vermekte fayda var:

Php.ini: /etc/php/php.ini
Apache: /etc/apache2/http.conf
Mysql: /etc/mysql/mysql.conf
Web dizini: /var/www/htdocs/
Mysql veri tabanı dosyaları: /var/lib/mysql

Arch Linux üzerinde Php, Apache, MySQL ve PhpMyAdmin kurulumu:

Arch Linux, diğer linux dağıtımlarından biraz farklıdır. Fakat temel olarak sistem ne kadar farklı olursa olsun Php çalışma mantığı aynıdır. Arch Linux üzerinde LAMP ile ilgili kurulum bilgilerine Arch Linux Türkiye ekibi tarafından çevirisi yapılmış wiki bağlantısından ulaşabilirsiniz.

Ayrıca Lighttpd sunucusu ile ilgili bilgi ve ayarlar konusunda yine wiki belgesine, lighttpd için php ayarlarını yapmak içinse şu belge işe yarayabilir. Fakat lighttpd ile ilgili olan her iki belge de İngilizce olduğu için ben kısaca bahsetmek istiyorum:

Lighttpd kurmak için:
sudo pacman -S lighttpd
komutunu vermeniz yeterlidir. Lighttpd ayarlarını “/etc/lighttpd/lighttpd.conf” dosyasında tutar.

Servisi başlatmak için:

sudo /etc/rc.d/lighttpd start

Komutunu vermeniz gerekiyor. Ayrıca Arch Linux altında bir servisi açılışta başlatmak istiyorsanız “/etc/rc.conf” dosyasında bulunan ilgili satıra lighttpd yi eklemeniz gerekiyor:

DEAMONS=(... lighttpd ...)

Bu satıra benzer bir yapı olması gerekiyor.

Lighttpd sunucusuna php yi fastcgi olarak tanımlamak için:
sudo pacman -S fcgi
Komutu ile fastcgi paketini kurmanız gerekiyor. Bu işlemin ardından “/etc/lighttpd/lighttpd.conf” dosyasını yetkili kullanıcı olarak açıp içerisinde:

#"mod_access",
#"mod_fastcgi",
#"mod_accesslog"

Satırlarının başındaki “#” işaretini kaldırıyoruz. Ardından aynı dosya içerisine:

fastcgi.server = (
".php" =>
( "localhost" =>
(
"socket" => "/tmp/php-fastcgi.socket",
"bin-path" => "/usr/bin/php-cgi"
)
)
)

Satırlarını ekliyoruz. Bu işlemin ardından:
sudo /etc/rc.d/lighttpd restart
Komutunu vererek lighttpd sunucusunu baştan başlatmamız gerekiyor.

Ek bir not vermek istiyorum. Arch Linux üzerine php kurduğunuz zaman ön tanımlı olarak bütün ayarlar kapalı gelmekte. Bu nedenle “/etc/php/php.ini” dosyası içerisinde bulunan extension bölümündeki bir takım eklentileri aktif etmek için başlarındaki “;” işaretini kaldırmanız yeterlidir. Tabi bu işlemden sonra sunucumuzu yeniden başlatmamız gerekiyor.

Link: Bir zamanlar yazmış olduğum Arch Linux ile ilgili PHP kurulum yazısı.

Debian Üzerinde Kurulum (Efe Çiftçi)

Kaynak kod derlenerek kurulum ile ilgili bir yazı

13
Tem

Merhabalar,

Genel olarak uzun bir süredir php üzerinde çalışıyorum. Artık yavaş yavaş bilgilerimi paylaşmanın vakti geldi sanırım. İlk olarak Php ile uğraşırken genel olarak bilmemiz gereken tanımlardan bahsedeceğim.

Php sunucu taraflı (server side) diye tabir ettiğimiz bir betik dilidir. Sunucu taraflı tanımını biraz açmak gerekirsek, php ile yazdığımız kodlar bir sunucuda yorumlanır ve bu yorumlama sonucu oluşan HTML çıktılar bir tarayıcı aracılığı ile gösterilir. Kısaca php kodlarımız sunucu tarafında işlenir ve kullanıcı bilgisayarında sadece HTML çıktıları görür.

Bu yorumlama işlemi yapılırken iki adet bileşen kullanırılır. Bir tanesi PHP yorumlayıcısı, diğeri ise internet sunucusudur. Apache, IIS, Lighttpd gibi uygulamalar internet sunucularından bir kaçıdır. Ben genelde az bellek tükettiği için Lighttpd tercih ediyorum. İleriki konularda Linux ve Windows üzerinde php ve bir web sunucusu kurulumunun nasıl yapıldığını anlatacağım.

Bu çalışma mantığını biraz daha açalım. Php ile yazdığınız kodlar önce sunucuya(apache,iis vb..) gönderilir, sunucu php kodu olarak algıladığı kodları (<?php ?> arasında yer alan kodlar) php yorumlayıcısına göndererek yorumlamasını ister. Php yorumlayıcısının yorumlayıp HTML olarka ürettiği çıktı tekrar sunucu aracılığı ile tarayıcıya iletilir. Aşağıda bu durmun resimli gösterimini görebilirsiniz.

php1

Php çalışma Prensibi

Sunucu taraflı dillerin hepsi bu yapıya benzer bir prensip dahilinde çalışırlar. Buda aslında çalıştırılan her kodun sunucu bilgisayar üzerinde sistem kaynağı tüketmesine sebep olur. Bu yüzden yapacağımız uygulamaların bazı kısımlarında JavaScript gibi tarayıcı tarafından yorumlana bilen betikler kullanılır. Örneğin bir üyelik formunda ki alanları kontrol ettirirken php kullanmak sunucuyu çok yoracağından bu işlem ufak bir JavaScript kodu ile kullanıcı bilgisayarına yaptırılabilir.

Php bir çok özelliğe sahip bir dildir. Genel olarak php ile ilgili ayarlar php.ini dosyasında bulunmaktadır. Php.ini ile ilgili ayrıntıları ilgili konular geldiğinde parça parça anlatacağım.

Gelelim veri tabanı konusuna. Aslında veri tabanı konusu çok karmaşık değil. Şuan sadece yukarıda bahsettiğimiz sistem içerisine bir de veri tabanı sunucusu ekleyeceğiz. Bu cümleden çıkartılabileceği üzere veri tabanı bir sunucu olarak çalışır. Fakat bunun yanında, SQlite gibi bir dosya üzerinden sunucu olmadan çalışabilen veri tabanı sistemleri de mevcuttur.

Veri tabanlarını projelerimizde ürettiğimiz verileri tutmak için kullanırız. Veri tabanlarının yaptığı iş basit olarak veri kaydetmek, kaydedilmiş verileri istediğimiz kriterlere göre geri çağırmaktan ibarettir (tabi ki gelişmiş özellikleri de vardır). Veri tabanlarının kendilerine özgü sorgu dilleri mevcuttur ve en yaygın olarak kullanılan sorgu dili SQL dilidir. MySQL, MsSQL, SQLite gibi sistemler SQL dilini kullanırlar.

Genel olarak tüm programlama dilleri, veri tabanı sunucuları ile aynı mantıkta iletişim kurarlar. Php yorumlayıcısı sorguyu veri tabanı sunucusuna gönderir, veri tabanı sunucusu sorgu sonucununda döndürdüğü bilgiyi php yorumlayıcısına gönderir. Php yorumlayıcısı veri tabanı sunucusundan bilgiyi aldıktan sonra bu bilgiyi yine HTML çıktı olarak sunucuya gönderir ve tarayıcıda görüntülenmesi sağlanır. Bu noktada küçük bir bilgi vermek istiyorum. Php dilini komut satırı arayüzü (CLI-Command Line Interface-) arcılığı ile kullanabilirsiniz. CLI ortamında yazdığınız kodlar için bir web sunucusuna ihtiyaç duymayız. Fakat php genel olarak web programlama alanında kullanıldığı için ben de web programlamayı temel alarak anlatmaya çalışacağım.

Yukarıda bulunan grafiğe bir veri tabanı-php ilişkisi eklenmiş hali. Grafik ile çok daha net anlaşılacağını düşünüyorum.

php-vt

Php - Veri Tabanı İlişkisi

Gelecek yazılar:
Php 2: Linux sistemler altında Php, Apache, MySQL ve PhpMyAdmin kurulumu
Php 3: Windows Xp sistemine Php, Apache, MySQL ve PhpMyAdmin kurulumu

8
Şub

Uzun süredir kişisel dosyalarımı sistemden ayırmak istiyordum. Böylece yeni kurulum yaparken belgelerimi sürekli kopyalamak gerekliliğinden kurtulacaktım. Aslında bu işlem için kurulumda bir bölümü “home” alanına bağlayarak çözmek kolay. Fakat zamanında yaptığım yanlış bölümlendirmeden dolayı bu işlemi ancak bu gün yaptığım 2008.2 taze kurulumla yapabildim.

Kullanıcı dosyaları ile ilgili bu kısım herkes tarafından bilinen ve kolayca yapılan işlem. Fakat benim esas sıkıntıyı önbellekte tuttuğum pisi paketleri ve mysql veri tabanlarım ile yaşıyordum. İlgili ayar dosyaları değişiklikleri ile bu sıkıntımıda çözdüm. Artık mysql veri tabanlarım ile pisi paketlerim “/home/” altında ki kullanıcı klasörlerimin içerisinde depolanıyor.

Önce pisi paketleri için gerekli ayarları yapmakla başladım.

“/etc/pisi” altında bulunan pisi.conf dosyasında ilgili ayarlar bulunmakta. Aşağıda bu dosyanın ilgili bölümü yer almakta açıklamalarla birlikte.

[directories]
archives_dir = /home/ARTe/sistem/pisi/archives => Arşiv dizini
cached_packages_dir = /home/ARTe/sistem/pisi/packages => Önbellek dizini
compiled_packages_dir = /home/ARTe/sistem/pisi/packages => Derlenmiş paket dizini
debug_packages_dir = /home/ARTe/sistem/pisi/packages => Debug paketleri dizini
history_dir = /home/ARTe/sistem/pisi/lib/history => Geçmiş bilgilerinin tutulduğu dizin
index_dir = /home/ARTe/sistem/pisi/lib/index => Depo indexleri bilgilerinin tutulduğu dizin
info_dir = /home/ARTe/sistem/pisi/lib/info => Depolara ait bilgilerin tutulduğu dizin
kde_dir = /usr/kde/3.5
lib_dir = /var/lib/pisi
lock_dir = /var/lock/subsys
log_dir = /var/log
packages_dir = /var/lib/pisi/package
qt_dir = /usr/qt/3
tmp_dir = /home/ARTe/sistem/pisi => Temp dizini

Yukarıda değişiklik yaptığım alanlar ile ilgili açıklamaları yazdım. Siz de ilgili alanları kendinize göre düzenlemeniz halinde pisi paketleri ve depo bilgileri istediğiniz dizinde saklanmış olacaktır.

Bu noktada bir uyarı yapmakta yarar var eğer depo bilgilerinide ayrı bir yerde tutacaksanız “/var/lib/pisi” adresi altındaki tüm dosyaları ilgili dizine kopyalamanız gerekiyor. Böylece ekli olan depolar otomatik olarak yeni klasörde gözükecektir.

Gelelim MySQL veri tabanlarının istediğimiz dizinde saklanması olayına. Aslında bu olay pisi paketlerinden çok daha basit bir işlem yaparak gerçekleştiriliyor.

“etc/mysql/” klasörü altında bulunan “my.cnf” dosyasında ki

datadir                     = /home/ARTe/sistem/mysql

satırında gerekli değişikliği yapıp, “/var/lib/mysql” içindeki tüm dosyaları yeni dizinimize kopyalıyoruz. Bu işlemlerin ardından mysql sunucusunu yeniden başlatmak gerekiriyor.

Artık mysql  veritabanlarımız ve pisinin önbellekte tuttuğu paketler istediğimiz klasörlerde depolanıyor…

Böylece artık yeni kurulum yapmam gerektiğinde tüm bu bilgilerimi tekrar tekrar yedeklemek zorunda kalmayacağım..

14
Oca

Pardus 2007.3′e kurduğum Eclipse yazılım geliştirme programında java dili kullanarak MySQL’e bağlanmaya çalışıyordum bir süredir (1-2 gündür). Ama bir türlü bağlanamadım. Bağlanmaya çalıştığımda şu hatayı alıyordum;

Cannot connect to db/user. Check your URL
Communications link failure

Last packet sent to the server 0 ms ago

Sonunda çözümü buldum… Problem mysql’in ilk kurulumuyla gelen ayarların dışarıdan erişime izin vermemesiymiş.. Düzeltmemiz gereken dosya /etc/mysql/my.ini dosyası.. Pardusta düzeltmeyi şu şekilde yapabiliyoruz;

Önce ALT+F2 ile çalıştır’ı açalım..

kdesu kwrite /etc/mysql/my.ini

yazıp root şifremizi girelim. daha sonra açılan dosyadaki

skip-networking

satırını bulun ve o satırın başına # ekleyin ve o satırı yorum satırı yapın. Yani o satır şöyle olsun,

# skip-networking

dosyayı kaydedip kapatın. daha sonra konsol açıp şunu yazarak mysql-serverı yeniden başlatın.

service mysql-server restart

Artık Pardus linuxta Eclipse kullanarak MySQL’e bağlanabiliyoruz…

Bu arada bu çözümü uzun araştırmalar sonucu buradan buldum..