eyvallah siz saolun

LDAP arama ve değiştirme türü işlevleri kullanma ldap_search fonksiyonu ile verilen kriterlere göre arama yapılır. Sonuçlar bir sonuç numarası alınır. ldap_modify fonksiyonu ile verilen verilen entry, yeni entry ile geğiştirilir. Girilen yeni entry çok boyutlu bir dizi olmalıdır. Elde edilen sonuçları kullanma ldap_get_entries fonksiyonu ile verilen sonuç numarasının gösterdiği sonuçlar çok boyutlu diziye alınır. LDAP sunucusu ile bağlantıyı kesme ldap_close fonksiyonu sunucu bağlantısını kapatır. Örnekler: Telefon Defteri. LDAP üzerinden personel kayıtlarını görme, arama ve değişiklik olanağı. Kaynak kod: index. php - Giriş scripti login. php - Login scripti rehber. php - Arama ekranı içeren ana script modify. php - Değişiklik formu üreten scripti modify_res. php - Değişikliği uygulayıp sonuçları gösteren script common. php - Ortak fonksiyon kütüphanesi Kaynak kod: rehber. tgz PHP ile Mail, Imap, POP3, NNTP Uygulamaları SMTP, IMAP, POP3, NNTP birbirleriyle yakından ilişkili protokollerdir. SMPT: SMTP mail gönderme ve almada kullanılan protokoldür ve UNIX ortamında bu iş için en yaygın kullanılan araç sendmail'dir. PHP, UNIX ortamında kullanılacak ise mail almak için aynı makinada bir sendmail sunucusunun çalışır durumda olması gerekmektedir. Mail gönderirken sendmail otomatik olarak çalıştırıldığı için sunucunun çalışır durumda olmasına gerek yoktur. mail fonksiyonu mail göndermek için kullanılır. Bu fonksiyonda dördüncü parametre ek SMTP header bilgisi göndermek için kullanılır. Eğer kullanılmaz ise mesajın göndereni kısmına web sunucusunun uid'i otomatik olarak konulur . Ek header bilgileri şunlar olabilir: From: <Gönderilen adres> Reply-To: <Gönderen adres> X-Mailer: <Maili gönderen istemci program> ... Mail gönderme örneği - IMAP: IMAP , SMTP ile mail sunucusna alınan maillere kullanıcıların uzaktan erişimini sağlayan bir protokoldür. Gelen postaların sunucu tarafında merkezi olarak tutulması, kullanıcının burada birden çok dizin açmasına izin vermesi, mesajları çok parçalı olarak işleyebilme, eşzamanlı erişim ve dizin paylaşımı gibi özellikleri ile POP3'e göre daha üstün bir protokoldür. PHP ile IMAP kullanımı kabaca şu adımları içerir: Posta sunucu ile bağlantı kurulur: imap_open fonksiyonu, verilen posta kutusu tanımlayıcına sahibinin bağlanabilmesini sağlar. Bağlantı sağlanırsa posta kutusunu ifade eden bir numara döndürülür. Burada mailbox, " <posta kutusu dizini>" şeklinde bir stringdir. Örnek: INBOX imap_reopen fonksiyonu, handle'ı verlien posta kutusu kapatılmış ise aynı HTTP oturumu içinde doğrulama yapılmaksızın yeniden bağlanılabilmesini sağlar. Mesaj başlık ve içerik bilgisine ulaşılabilir: IMAP, mesajları mesaj sıra numarası ve tanımlayıcı numara olmak üzere iki tür numaralama ile ayrıştırır. Her ikisi de PHP ile mesaj bilgilerine ulaşmak için kullanılabilir. Ancak sequence kullanmak birbirinden ayrı oturumlar kullanan HTTP için çok sağlıklı değildir. Çünkü posta kutusundan bir mesaj silindiği anda sequence numaraları yeniden düzenlenir. Ancak uid değerleri değişmez. imap_headers fonksiyonuyla, verilen posta kutusundaki mesaj başlıkları sıra numarasına göre sıralı bir dizi olarak alınır. imap_header fonksiyonu, posta kutusundaki verilen sıra numaralı mesajın ayrıntılı çözümlenmiş header bilgisi object olarak alınır. imap_body fonksiyonu, posta kutusundaki verilen sıra numaralı mesaj içeriği alınır. Burada FT_UID flagı olarak üçüncü bir parametre ile çağrılırsa sıra numarası yerine tanımlayıcı kullanır. Arama ve sıralama işlemleri yapılabilir: imap_sort fonksiyonu, posta kutusundaki mesajların verilen kritere göre sıralanmış listesi dizi olarak alınır. Burada options kısmında SE_UID kullanılırsa dizi elemanları uid değerlerinden oluşur aksi taktirde sequence numaraları döndürülür. imap_search fonksiyonu, posta kutusundaki mesajlar üzerinde verilen kritere göre arama yapılır. Burada da flags kısmında SE_UID kullanılırsa sequence numaraları yerine uid değerleri alınır. IMAP posta kutusu istemcisi örneği - sequence numaraları kullanıldığı durum - IMAP posta kutusu istemcisi örneği - uid tanımlayıcıları kullanıldığı durum - IMAP posta kutusu istemcisi örneği - uid sıralama - POP3: POP3 protokolü de IMAP gibi, SMTP ile mail sunucusuna alınan maillere kullanıcıların uzaktan erişimini sağlayan bir protokoldür. Ancak mesajların kullanıcılar tarafından bütün olarak download edilmesini gerektirmesi, merkezi olarak tutulmadığı için hareket halindeki kullanıcılar için senkronizasyon sorunları oluşturması ve eşzamanlı erişime izin vermemesi nedeniyle IMAP'ın gerisinde kalır. PHP ile POP3 kullanımı IMAP'dan çok farklı değildir. Fakat, IMAP'ın izin verdiği bazı fonksiyonlar POP3 erişiminde kullanılamaz. Bağlantı kurarken ilgili protokol adını ve kullanılan portu örneğin şu şekilde değiştirmek yeterli olur: INBOX POP3 posta kutusu istemcisi örneği - NNTP: NNTP protokolü, Internet üzerinde haber mesajlarının merkezi olarak sunucular üzrinde tutulup tutulup, istemcilerin bu kaynaklar üztünde sorgulama yapması, mesajları okuması ve mesaj atabilmesini sağlayan bir protokoldür. Bağlantı kurarken ilgili protokol adını ve kullanılan portu örneğin şu şekilde değiştirmek yeterli olur: INBOX NNTP haber öbeği istemcisi örneği - PHP ile havada grafik üretme GD Image Library PHP grafik üretmek için bu kütüphaneye gereksinim duyuyor. Adres: http://www.boutell.com/gd/ PHP Grafik Fonksiyonları Yapılabilecekler: İmaj yaratma:PHP ile dosyadan varolan bir imaj alınabilir veya yeni bir imaj yaratılabilir. PHP her iki durumda da hafızada bir imaj nesnesi üreterek bunu bir handle ile bize bildirir: int imagecreate : Verilen ölçülerde yeni bir imaj nesnesi yaratarak bu imaja ait hanlde'ı döndürür. int imagecreatefrompng , int ImageCreateFromJpeg : PNG veya Jpeg formatındaki dosyayı okuyarak yeni yarattığı bir imaj nesnesi içine alır ve yaratılan imajın handle'ını döndürür. İmaj bilgilerini alma: getimagesize fonksiyonu imaja ilişkin bazı bilgiler içeren bir dizi döndürür. Bu dizinin elemanları: Index 0: İmajın genişliği Index 1: İmajın yüksekliği Index 2: İmajın türü (1:gif 2:jpeg 3ng) Index 3: "height=xxx width=xxx" şeklinde doğrudan HTML kodu içinde kullanılabilecek string İmaj üzerinde değişiklik yapma: Renk belirlemeleri: imagecolorallocate fonksiyonu ile renk atamaları yapılır. imagecolortransparent fonksiyonu ile transparent renk belirlemesi yapılabilir. Gif ve PNG formatları transparent özelliğini desteklemektedir. İmaj üzerinde şekil üretme: imageline imagearc imagepolygon imagepolygon imagerectangle imagefill İmaj üzerinde metin üretme: imagestring imagettftext imagettfbbox İmaj çıktısı üretme: Buraya kadar tüm önbelirlemeleri yapılan imaj nesnemiz bu aşamada uygun algoritma ile istenen formata çevrilerek browsere gönderilir. Buradaki fonksiyonlarda dosya adı girilirse çıktı browsere gönderilmeyip dosyaya yazılır. imagegif fonksiyonu, imaj numarası ile verilen imajı GIF formatında üreterek browsere gönderir. imagejpeg fonksiyonu, imaj numarası ile verilen imajı JPEG formatında üreterek browsere gönderir. imagepng fonksiyonu, imaj numarası ile verilen imajı PNG formatında üreterek browsere gönderir. Örnekler: İmaj dosyasından imaj yaratarak ekrana basan ve eğer dosya yoksa kendi hata mesajını üreterek yine imaj olarak tarayıcıya gönderen script ve kaynak kodu İmaj üzerinde şekil üretme fonksiyonlarının kullanıldığı script ve kaynak kodu İmaj boyutlarını dinamik olarak değiştiren script ve kaynak kodu ULAKBİM Web Yönetim Uygulaması ULAKBİM Web sayfaları bir PHP parser scriptinden geçerek sunucudan yayınlanıyor. Öncelikle kendi özel taglarımızı içeren Web sayfarının, içerik oluşturucular tarafından üretildikten sonra siteye aktarılması için bu uygulama yazıldı. Site üzerinde dosya yöneticisi gibi çalışan WebManager, LDAP üzerinden doğrulama ve MySQL üzerinden erişim hakları düzenlenmesi özelliklerinin yanı sıra ön izleme, yedekleme, yedekten geri alma, download gibi özellikler içeriyor. ULAKBİM içinde halen kullanımda olan uygulama geliştirilmeye devam ediyor. ULAKBİM'de kullanılan sisteme özgü kodlar içerse de ufak değişikliklerle diğer platformlara da taşınabileceğini düşünmekteyiz. Ek özellikler ve düzeltmeler konusunda önerilerinize her zaman açığız ve sizlerden gelecek ek program modüllerini de bekliyoruz. Kaynak Kod: WebManager-1.0 WebManager-1.1 not:Alıntıdır emeğe saygımız var selametle - PerWer WarrioR 10 Nisan 2006

eyvallah dostum tskler paylastıgın icin.

Kurulum Burada paketlerin kurulum sırası önemlidir. Apache Kurulumu OpenSSL (openssl-0.9.4) sh config \ no-idea \ -fPIC make make test make install ModSSL (mod_ssl-2.6.4-1.3.12) configure --with-apache=../apache-1.3.12 Apache (apache-1.3.12) SSL_BASE=../openssl-0.9.4 \ configure --enable-rule=SHARED_CORE \ --enable-module=so \ --enable-module=ssl \ --enable-shared=ssl \ make make certificate make install PHP Kurulumu OpenLDAP client library configure --with-threads=lwp --disable-slapd --disable-ldapd --disable-slupd make make install UW Imap 4.7c Client library make gso cp -i c-client/c-client. a /usr/local/lib/libc-client. a cp -i c-client/rfc822. h /usr/local/include cp -i c-client/mail. h /usr/local/include cp -i c-client/linkage. h /usr/local/include zlib library configure make make install make distclean configure --shared make make install png library make make install jpeg library configure make make install make install-lib make distclean configure --enable-shared make make install make install-lib freetype library configure make make install gd library Öncelikle Makefile üzerinde değişiklikler yapılmalı. Örneğin JPEG ve TTF desteği açılmalı, include dizinleri eklenmeli vs... make make install pdf library configure make make install mhash library configure make make install PHP configure \ --disable-debug \ --with-apxs=/usr/local/apache/bin/apxs \ --enable-track-vars \ --enable-ftp \ --enable-sysvsem \ --enable-sysvshm \ --with-mysql \ --with-ldap \ --with-imap \ --with-mcrypt \ --with-mhash \ --with-zlib \ --with-ttf \ --with-gd \ --with-pdflib \ --with-zlib-dir \ --with-jpeg-dir \ --with-png-dir \ make make install 'httpd. conf' dosyasına şu satırlar otomatik eklenmiş olmalı LoadModule php4_module libexec/libphp4. so AddModule mod_php4. c Zend Optimizer mkdir /usr/local/Zend mkdir /usr/local/Zend/lib cp ZendOptimizer. so /usr/local/Zend/lib 'php. ini' dosyasına şu satırlar eklendi: zend_optimizer. optimization_level=7 zend_extension="/usr/local/Zend/lib/ZendOptimizer. so" PHP ile Doğrulama ve Güvenlik Çok kullanıcı sistemlerin tümünde güvenlik , önemli bir sorun olmuştur. Web uygulamalarında da verilerin ve kaynakların yetkisiz kişilerin erişim ve kullanımına kapatılması gerekebilir. Dolayısıyla ibr Web uygulaması gerçekleştiriminde de güvenliğe dikkat edilmesi gerekmekte. Güvenlik, birkaç farklı kavramı içerisine alır. Bunlar arasında doğrulama , yetkilendirme ve gizlilik sayılabilir. Bir Web-mail uygulamasında posta kutusu mesajları ile IMAP ve sendmail kaynaklarına sadece ilgili posta kutusu sahibinin erişebilmesine izin verilmelidir. Burada Web sunucu ile posta kutusu sahibi arasında bir diyalog gerçekleşecek ve her iki taraf da birbirine kendisini tanıtacaktır. Bunlardan kullanıcı kendisinin söylediği kişi olduğuna delil olacak bilgiyi karşı tarafa iletecek ve karşı taraf doğrulama sağlarsa oturumu açacaktır. İşte burada örneklenen, doğrulama sürecidir. Bir veritabanından sorgulama yapabilecek kişiler ile veritabanında değişiklik yapabilecek kişilerin yetkilerinin web uygulaması tarafından doğru bir şekilde ele alınabilmesi gerekmektedir. Burada ise yetkilendirme sorunu ile karşılaşmaktayız. Web-mail uygulamasına dönecek olursak, kullanıcının postalarını tarayıcısına çekerken üçüncü bir kişinin araya girip bunları görebileceği açıktır. Burada ise gizlilik ön plana çıkmakta ve bu sorun da daha çok çeşitli şifreleme metodları ile çözülmeye çalışılmaktadır. Doğrulama PHP ile Oturum Yönetimi HTTP protokolünün o anki durumu kaydetmeyen yapısı web uygulamaları için en önemli sorunu oluşturmuş ve bunun aşılabilmesi için hem sunucu, hem de istemci tarafında çeşitli metodlar geliştirilmiştir. Web sunucusuna bağlanan bir kişi web tarayıcısı aracılığıyla sunucudan bir URL adresi ile belirtilmiş kaynağı ister ve sunucu da istemi değerlendirir ve sunucu tarafında yapılması gerekenleri yaparak tarayıcıya cevabını iletir . Arada sürekli bir TCP/IP bağlantısı yoktur. Aslında kaynak kullanımı ve bant genişliği açısından oldukça avantajlı olan bu durum web uygulaması geliştirirken dezavantaja dönüşür. Bir web uygulamasında web sunucusuna çeşitli istemlerde bulunan kişi, bu istemleri arasında o an hangi aşamaya gelmişse oraya kadar yaptığı işlemlerin kaybedilmemesini, sunucu tarafından hatırlanmasını isteyecektir. Bu sorun sunucu tarafta oturum yönetimi kavramının doğmasına sebep olmuştır. Web üzerinde oturum yönetimi sunucu ve istemci tarafta olmak üzere ikiye ayrılabilir: İstemci tarafta oturum yönetimi: İstemci tarafta oturum yönetimi kavramını, bir HTTP oturumu esnasında istemci tarafa bir önceki oturuma ilişkin bilgiler atmak veya istemci taraftan bir önceki oturuma ilişkin bilgileri almak şeklinde düşünülebilir. Eğer HTML'in form olanağından yararlanılıyorsa HIDDEN türü alanlar kullanılarak bir önceki oturum bilgisinin istemciye aktarılması ve tekrar form aracılığı ile sunucuya geri iletilmesi sağlanabilir. Uygulamanız formlardan oluşuyor ise oldukça kullanışlıdır. Bir başka metod oturum bilgilerini URL içine gömme metodudur. Form kullanılmasına gerek kalmadan HTML linkleri içine GET metodu çağrılarının yaptığı gibi gömerek uygulama ekranları arasında bilgi taşınabilir. Son olarak cookie'ler kullanılabilir. Cookie'lerin çalışma mantığı basittir. Browser web sunucusuna istemde bulunurken gönderdiği header bilgisinin arkasına daha önceden ilgili sunucunun set ettiği cookie değişkenleri ve bunların değerlerini gönderir. Sunucu bu bilgileri değerlendirerek en son nerede kalındığını hatırlayabilir. Daha sonra sunucu, browsere cevap gönderirken set etmek istediği cookie değişkenlerini ve değerlerini cevap iletisinin header kısmına koyar ve browser yoksa yeni cookie değişkenleri yaratır ya da varsa önceki cookie değişkenlerinin üstüne yazar. Cookie'ler isim, değer, zaman aşımı süresi, kaynak sunucu domain adresi ve istenen URI path bilgisi gibi alanlar içerebilirler. İstemcilere cookie göndermek için setcookie fonksiyonu kullanılir. İstemcilerden gelen cookieler ise $HTTP_COOKIE_VARS global associative array'inden cookie adı index olarak verilerek okunabilir. Cookieleri sisteminizde tanımlı kullanıcıları ayırdetmekte kullanabilirsiniz. LDAP sunucusu bağlantısı için kullanıcı adı ve şifresini tekrar tekrar girmemesini sağlamak için ilk olarak login ekranını gönderen script içinde komutları ile browserlerindeki user ve pwd cookieleri temizleniyor: setcookie("user"; setcookie("pwd"; Sonra formdan girilen değerler ikinci bir scriptde browsere set edilir: setcookie ; setcookie ; Doğrulamanın yapılacağı scriptte bu değerler alınıyor: $user = $HTTP_COOKIE_VARS ; $pwd = $HTTP_COOKIE_VARS ; Bu metod çalışmakla birlikte yalnızca güvenli olduğunu düşündüğünüz bir bölgede kullanılmalıdır. Aksi taktirde HTTP üzerinden açık bir şekilde giden kullanıcı adı ve şifresi rahatça alınabilir. Bu nedenle authentication gereken web bölgeleri ve uygulamaları için secure socket layer kullanılması önerilir. Setcookie fonksiyonu zaman aşımı süresi vermeden kullanılırsa cookie ömrü web tarayıcısının ömrü ile sınırlıdır . Zaman aşımı süresi verilirse cookie bilgisi dosyaya yazılır ve browser kapatılsa da zaman aşımı süresi dolana kadar silinmez. Cookielerinizin başka domainler ve hatta URI'ler tarafından çekilebilmesini engellemek için domain name ve path parametreleri de kullanılabilir. Ayrıca setcookie fonksiyonuyla sadece HTTPS kullanılıyorsa cookie gönderilmesi sağlanabilir. -

süper bişey bu ya gerçekten iyi oldu. saol

Tüm bu metodlarda oturum verisini taşırken HTML'e özgü karakterleri HTML yorumlayıcısının ihmal etmesini sağlamak amacıyla HTTP entitylerine otomatik çevirme veya URL encoding-decoding işlemleri yapmak gerekebilir. Cookie'ler gönderilip alınırken encoding-decoding işlemleri otomatik yapılır. Ayrıca serialize ve unserialize fonksiyonları kullanalarak programınız içindeki karmaşık veri yapısında tuttuğunuz değişkenleri byte dizisi haline getirip istemci tarafa atmak ve alıp tekrar orjinal haline çevirmek çok kolaydır. Sunucu tarafta oturum yönetimi: NSEnterprise Server'deki session objectlerini karşılayacak yapılar shared memory ve semafor kullanılarak kurulabilir. Hafızada script ömrüyle sınırlı olmayan alanlar ayırmak için shared memory fonksiyonları kullanılabilir. Aynı scriptin hafızadaki tüm kopyalarının okuyabileceği paylaşılabilir bir alan yaratılır: define(_SHMKEY,1000); // Kendi atadığımız bir değer -- biricik olmalı define(_SHMSIZE,1000); // 1000 Bytelık bir alan define(_SHMPERM,0600); // Yalnızca web sunucunun // uid'ine sahip kullanıcı okuyup yazabilsin $shm_id = shm_attach ; Artık shared memoy'mizden okumak için: $value = shm_get_var ; Shared memory'e yazmak için: shm_put_var ; kullanılabilir. Burada '$index' tamsayı olmak zorudadır. Fakat shared memor'ye bu şekilde erişmek güvenli olamayacağı için semafor kullanımı şarttır: define(_SEMKEY,999); // Kendi atadığımız bir değer -- biricik olmalı define(_SEMPERM,0600); // Yalnızca web sunucunun uid'ine // sahip kullanıcı bu semaforu kullanabilsin $sem_id = sem_get(_SEMKEY, 1, _SEMPERM); Şimdi shared memory işlemlerinin yapılacağı kritik kesim semafor işleçleri arasına alınarak sözkonusu hafıza bölgesi güvenli bir şekilde kullanılabilir: sem_acquire ; // Semafor aynı scriptin başka bir kopyası // tarafından alınmışsa burada bekler sem_release ; Burada dikkat edilmesi gereken nokta web sunucunun uid'i ile çalışan herhangibir görevin shared memory alanına erişebileceği riskidir. Hibrit Yaklaşım ve PHP Session Desteği: Oturum yönetiminde hem sunucu, hem de istemci tarafı bir arada kullanmak gerekebilir. Dış dünyaya açık bir sistemde bağlanan tüm kullanıcıları sistemin o an biricik bir kullanıcı olarak tanıması ve izleyen oturumlarda da bu kullanıcıyı hatırlaması istenebilir. Aynı şekilde kullanıcı doğrulaması için gerekli bilgilerin istemci tarafa aktarımının riskli olduğu açıktır. Bu sorunları aşabilmek için kullanıcılara biricik tanımlayıcılar atanarak, istemci tarafa sadece id aktarımı yaparak, verilerin yüklü bir kısmını bu id'lerle erişilebilir şekilde sunucu tarafta tutmak tercih edilir. Burada kritik nokta farklı kullanıcıları birbirinden ayırmak için biricikliği sağlamak ve bu ID'leri tahmin edilemez şekilde üretmektir. $ID=uniqid(getenv ; setcookie("id",$ID, time +3600,"/",". ulakbim.gov.tr"; Yukarıdaki kısım çalıştırılarak kullanıcı tarayıcısına biricik bir ID atanarak bu ID'ye ait oturum verilerinin geçici dosya, shared memory ve veri tabanında tutulması sağlanabilir. Bir kez kulanıcı doğrulaması yapıldıktan sonra böyle bir cookie kullanılarak kullanıcı adı ve şifresi aktarılmadan sadece üretilen biricik ID değeri aktarılarak doğrulamalara devam etmek mantıklı olacaktır. Burada token'in tahmin edilemeyecek ve çakışma olmayacak bir şekilde üretilmesi önem taşır. Bu amaçla md5 digestleri üretmek de tercih edilebilir. PHP'nin 4.0 versiyonuyla gelen session desteği, cookie veya URL'e gömerek session ID'si aktarımı ve sunucu tarafta oturum verilerinin tutulması mantığını programcıya saydam hale getiriyor. session_start fonksiyonu, istemci taraf için, yok ise bir session ID yaratarak cookie olarak set eder. session_register fonksiyonu, başlatılan oturum için değişkenler üretir. Aşağıdaki kod değişkeninizin oturumlar arasında sürekli artmasını sağlıyor: session_start ; session_register ; if(! isset || ! isset($var1)) $count=0; else $count++; echo $count; PHP geliştiriciler arasında popüler olan PHPLIB modülü gelişmiş oturum yönetimi desteği sağlamaktadır. MySQL ile Veritabanı Uygulamaları MySQL Veritabanı Yönetim Sistemi ve SQL PHP ile MySQL'in kullanılması Örnek Uygulamalar MySQL Veritabanı Yönetim Sistemi ve SQL MySQL, çok-kanallı , çok kullanılıcılı , hızlı ve sağlam bir veritabanı yönetim sistemidir. Kaynak kodu açık olan MySQL'in pekçok platform için binaryleri de hazır bulunmaktadır. ODBC sürücüleri de mevcuttur. Çok sayıda tablo ve kayıttan oluşan büyük ölçekli veri tabanları oluşturularak kolayca yönetilebilmesine imkan sağlanmıştır. MySQL'in kendi sitesine aşağıgaki adresten ulaşılabilir: http://www.mysql.com MySQL veritabanı yönetim sistemini hiyerarşik olarak şu sırada düşünebiliriz: Veritabanı Tablo Kayıt Veri tipi Veri Tipleri: char varchar int float date text/blob set enum Kayıtlar: Tablolar: create table alter table drop table create index Veritabanları create database drop database Veri Tanımlama ve Değiştirme : select insert update delete Erişim Hakları : MySQL erişim haklarını mysql adlı özel bir veritabanında tutar. Bu veritabanı birtakım erişim hakkı tablolarından oluşur : user tablosu kullanıcıların sunucuya hangi host makinadan hangi haklarla bağlanabileceğini belirler. Bu tabloda bulunan haklar kullanıcıya global olarak verilir ve verilen haklar istisnasız tüm veritabanları üzerinde etkili olur. Host alanı ise tam tersine bağlanabilecek tüm hostları içermelidir. Diğer tablolarda bunların dışında host alanı girilmesi anlam taşımayacaktır. db tablosu kullanıcıların belirli bir veritabanına hangi haklarla erişebileceğini gösterir. Global olarak sahip olunmayan hakları verebilir, ancak global olarak sahip olunan hakları kaldıramaz. Yani user tablosunda kullanıcıya verilen hakları geri alamaz ama belirli bir veritabanına ait olmak üzere yeni haklar verebilir. Burada host alanı user tablosunda verilen host aralığını daraltabilir. Yani bir kullanıcı user tablosundaki host aralığının kapsadığı bir host'tan sunucu bağlantısı kursa da, db tablosunda belirli bir veritabanına kullanıcının bu hosttan erişimine ilişkin bir satır yoksa veritabanına erişemez. Burada host alanı için için tipik olarak '%' kullanılabilir. Böylece sunucu bağlantısı sağlayabilen tüm hostlar veritabanına kabul edilirler. host tablosu db tablosundaki 'host' alanına değer girilmezse anlam kazanır. Bu durumda ilgili veritabanına bağlanabilecek hostlar host tablosundan taranır ve erişim haklarına bakılır. Burada haklar açısından user ve db tabloları arasındaki ilişkiden farklı br durum vardır. Öyle ki burada db ve host tabloları arasında adeta bir AND işlemi yapılır. table-priv tablosu tablo düzeyinde erişim haklarını belirler. column-priv tablosu tablo kolonları düzeyinde erişim haklarını belirler. Bu tablolarda kullanıcının bir erişim hakkı varsa daha alt düzey tablolara bakılmaz. Yapılan değişiklikleri etkinleştirmek için flush privileges komutu kullanılır. Veri değiştirme komutları ile mysql veritabanı üzerinde değişiklik yaparak kullanıcı hakları değiştirilebileceği gibi daha emniyetli metod olarak grant ve revoke komutları kullanılabilir. Veritabanı sunucusuna bağlanma ve sql komutlarının işletilmesi PHP ile MySQL'in Kullanılması PHP 4.0'dan önceki versiyonlarında MySQL fonksiyonlarını kullanabilmek için MySQL paketi ile birlikte gelen API kütüphanesine gerek duyuyordu. PHP 4.0 versiyonu MySQL API'si ile birlikte geliyor. -

berkee: Teşekkür ederim süper döküman.

eywallah kardeş güsel olmuş eline sağlık

Eyvallah arkadaşım güzel paylaşım. Teşekkür ederim

PHP içinde MySQL Fonksiyonları Adımlar: PHP ile MySQL kullanırken tipik olarak şu adımlardan geçilir: Veritabanı Sunucusuna Bağlanma mysql_connect fonksiyonu, verilen TCP/IP adresinde çalışan veritabanı sunucusuna belirli bir veritabanı kullanıcısı kimliği ile bağlantı kurar ve bir bağlantı numarası geri döndürür. Bağlantı ömrü script ömrü ile sınırlıdır. mysql_pconnect fonksiyonu, mysql_connect fonksiyonu ile aynı işlevi veritabanı sunucusuna sürekli bir bağlantı kurarak yapar. Bağlantı ömrü, Web sunucusunun ömrüyle veya mysql_close fonksiyonu ile özellikle belirtilmesiyle sınırlıdır. Veritabanı Seçimi mysql_select_db fonksiyonu, verilen veritabanını o anki aktif veritabanı haline getirir . Sunucuya bağlanırken verilmiş kullanıcı kimliğinin bu veritabanına erişim hakkı yok ise bu konumlanma gerçekleşmez. Aktif bir veritabanı seçimi istenmiyorsa bu aşama atlanabilir. Sorgu Yöneltme Alınan bağlantı numarası kullanılarak sunucuya bir sorgu yöneltilir ve bir sonuç numarası alınır. mysql_query fonksiyonu, o anki aktif veritabanı üzerinde sorgu işletir. mysql_db_query fonksiyonu, parametre olarak verilen veritabanına konumlanarak üzerinde sorgu işletir. Sorgu Sonuçları Numarası ile tanımlı sonuç nesnesinden çeşitli sonuçlar PHP ile kullanılabilecek şekilde değişkenler üzerine alınabilir: mysql_num_rows fonksiyonu, sonuç numarası verilen sorgu sonucunda döndürülen kayıt sayısını verir. mysql_fetch_row fonksiyonu, sonuç numarası verilen sorgu sonucunda döndürülen kayıtları bir dizi olarak geri döndürür. mysql_fetch_array fonksiyonu, sonuç numarası verilen sorgu sonucunda döndürülen kayıtları associative bir dizi olarak geri döndürür. Sunucu Bağlantısını Kesme mysql_close fonksiyonu, numarası verilen veritabanı sunucu bağlantısını keser. Script işletimi sonlanınca bağlantı otomatik olarak kesilir. Örnek Uygulamalar Telefon Rehberi Telefon rehberi uygulaması için ilk olarak kullanılacak veritabanı tabloları SQL ifadeleri olarak tanımlanmalı. Önce veritabanı sunucusuna bağlantı kuruluyor: mysql -u root -p Veritabanı yaratılıyor: mysql> CREATE DATABASE rehber; Veritabanı seçiliyor: mysql> USE rehber; Tablolar yaratılıyor: mysql> CREATE TABLE personel ( -> personel_ID SMALLINT NOT NULL AUTO_INCREMENT, -> adsoyad VARCHAR(50) NOT NULL, -> telefon VARCHAR(20), -> odano VARCHAR(5), -> email VARCHAR(50), -> evtel VARCHAR(20), -> ceptel VARCHAR(20), -> bolum_ID SMALLINT, -> KEY -> ); mysql> CREATE TABLE bolum ( -> bolum_ID SMALLINT NOT NULL AUTO_INCREMENT, -> bolum VARCHAR(50) NOT NULL, -> birim_ID TINYINT, -> KEY -> ); mysql> CREATE TABLE birim ( -> birim_ID TINYINT NOT NULL AUTO_INCREMENT, -> birim VARCHAR(50) NOT NULL, -> KEY -> ); Bu SQL komutları bir dosyaya kaydedilirse mysql istemcisine standart input olarak girilebilir. Örneğin komutlar tables. sql dosyası olarak kaydedildikten sonra komut satırından işletilebilir: mysql -u root -p < tables. sql İkinci olarak veritabanı üzerindeki roller tespit ediliyor: Normal kullanıcı, veritabanı üzerinde sorgu yapabilmelidir. Yetkili kullanıcı , normal kullanıcıların haklarına sahip olduğu gibi veritabanı üzerinde değişiklik yapabilmelidir. Veritabanı seçiliyor: mysql> use mysql Yetkili kullanıcı yaratılıyor: mysql> INSERT INTO user VALUES( -> 'localhost', -> 'rehadmin', -> password ; Burada şunlar gerçekleşiyor: Sadece sunucunun bulundugu makineden ('localhost' bağlanılabileceği belirtildi. 'rehber' isimli bir kullanıcı yaratıldı. Kullanıcının erişim şifresi encrypt edilerek veritabanına kaydedildi. Burada verilen haklar sunucumuzun baktığı tüm veritabanlarına erişimi ilgilendirdiğinden güvenlik için hiçbir hak verilmedi. Normal kullanıcı yaratılıyor: mysql> INSERT INTO user VALUES( -> 'localhost', -> 'rehuser', -> password ; Burada da kullanıcıya verilen haklar sunucumuzun baktığı tüm veritabanlarına erişimi ilgilendirdiğinden güvenlik için hiçbir hak verilmedi. Kullanıcıların veritabanına erişim hakları düzenleniyor: mysql> INSERT INTO db -> -> -> VALUES ; Yukarıda 'rehber' isimli veritabanına 'rehadmin' kullanıcısının sadece 'localhost'tan erişebileceği ve yalnız 'select', 'insert', 'update', 'delete', 'tablo yaratma' ve 'tablo silme' hakkı olduğu belirtiliyor. mysql> INSERT INTO db -> -> -> VALUES ; Yukarıda 'rehber' isimli veritabanına 'rehuser' kullanıcısının sadece 'localhost'tan erişebileceği ve yalnız 'select' hakkı olduğu belirtiliyor. MySQL sunucusu calışmaya başlarken erişim tablolarını hafızaya yükler ve erişim yapılacaşı zaman tablolardan okumak yerine cachine bakar. Dolayısıyla yaptığımız bu değişikliklerin etkin olabilmesi için cache'in yeniden yüklenmesi gerekir: mysql> FLUSH PRIVILEGES; Bu komutu da ancak reload hakkı olan kullanıcı calıstırabilir. Bu SQL komutları da users. sql dosyasına kaydedildikten sonra aynı şekilde komut satırından işletilebilir: mysql -u root -p < users. sql Bundan sonraki aşamada veritabanına mevcut kayıtların girilmesi gerekiyordu. Başka bir mysql sunucuda olarak tutulan veritabanı verisi ihraç edilerek elde edilen '. txt' türü metin dosyası kendi veritabanımıza dahil edildi . Bu noktada import edilecek metin dosyası herhangibir veri tabanından ayrıştırılmış metin dosyası halinde alınabiliyor ise mysqlimport uygulaması ile kolayca MySQL veritabanına aktarılabiliyor. Veritabanının sahibi rehber olduğu için 'rehber' kullanıcısı olarak veritabanı sunucusuna oturum açılarak aşağıdaki komutlar uygulandı: Kullanıcı dizine ilk girişinde index. php3 üzerinden search. php3 sayfasına yönlendiriliyor. Burada kullanıcıya gönderilen formun da örneğin header ve footer kısımlarında standart ve dinamik olması için php kullanılıyor. Yine combo box'da da opsiyonlar veritabanından alınarak dinamik olarak oluşturuluyor. Kullanıcı, formu submit edince srchres. php3 çağrılır. Bu script içinde bir query cümlesi girilen alan değerlerine göre dinamik olarak oluşturulur. Kaynak kod: rehber. tgz PHP ile LDAP UygulamalarıLDAP , bir dizin servisi protokolü türevidir. Dizin servisleri hiyararşik bir yapıda , veriye merkezi olarak ulaşılması için düşünülmüş bir bakıma veritabanı hizmeti veren sistemlerdir. Açık sistem olması dünya üzerinde global olarak erişilebilir bilgi kaynakları oluşturulabilmesini sağlar. Bunu yaparken coğrafi yapı , kurum içi organizasyon ve diğer özellikleri içeren hiyerarşik bir yapı kullanır. Özellikle kurum içi organizasyon ve personelin kayıtlarının tutulabileceği elverişli bir ortam sunar. Bir kurumda çalışan veya bir üniversitede okuyan öğrencilere çeşitli servisler sunmanız gerekir. Bunun için her servisin üzerinde çalıştığı makinada ayrı ayrı kullanıcı hesapları açmanız gerekebilir. Böyle olunca sistemin ve kullanıcıların yönetimi zorlaşır. LDAP kullanarak bu sorun çözülebilir. Kuruma giren personel için LDAP sunucusuna tek bir entry eklersiniz ve LDAP desteği veren servislerin bu sunucu üzerinden kullanıcı bilgilerine erişim ve doğrulama yapmalarını sağlayabilirsiniz. PHP'de LDAP için iyi bir arabirim sunmaktadır. Bu sayede web uygulamalarınızda da LDAP kullanılabilmekte ve özellikle kullanıcılara kendilerine ait verileri güncelleyebilme olanağı sunuluyor. LDAP Dizin Servisi: LDAP dizinleme sisteminde her kayda ait özellikler ve bu özelliklerin değerleri vardır. Her kaydın ait olduğu bir nesne sınıfı vardır. Bu yapı sayesinde dünya üzerindeki her LDAP kaydı biricik olur. Bunun için DNS de olduğu gibi hiyerarşik bir isimlendirme kullanılmıştır. Kullanıcı bu biricikliğini DN özelliğinden alır. Örneğin dn='cn=Mustafa Hadi Dilek, o=ULAKBİM, c=tr' benim Türkiye içinde, ULAKBİM adlı kuruluşta, adı 'Mustafa Hadi Dilek' olan kişi olduğumu söyler ve biriciktir. Örneğin bir kurumda çalışan personele ait bazı özellikler şunlar olabilir: object class=inetorgperson, entry'nin ait olduğu sınıf. Buradaki hiyerarşi top->person->orgperson->inetorgperson şeklinde düşünülebilir, uid=hadi , cn=Mustafa Hadi Dilek , sn=Dilek , mail=hadi@ulakbim.gov.tr , telephonenumber=2989365 , Genellikle sistemde yeni bir kullanıcı açarken 'inetorgperson' sınıfı kullanılır. PHP ile LDAP Kullanımı: PHP ile LDAP'a erişim oldukça kolaydır. İzlenmesi gereken sıra: LDAP sunucusuna bağlanma ldap_connect fonksiyonu ile LDAP sunucusuna soket bağlantısı açılır ve bir bağlantı numarası alınır. LDAP sunucusuna belirli bir noktadan erişim için doğrulama ldap_bind fonksiyonu ile sunucu veritabanında tanımlı bir kullanıcı olarak bağlantı kurulur. Bundan sonra kullanıcının sahip olduğu haklar ile sınırlanmış işlemler yapılabilir. Kullanıcı, dn özelliği ile belirtilir. Eğer dn ve password alanları girilmez ise bağlantı anonymous olarak gerçekleşir. -

Arkadaslar şimdi herzaman duyarız PHP ve ASP isimlerini ve bunlar hakkında gerekli bilgiler birçok yerde vadı ama byle sine derinlemesine anlatılldıgına rastrladınızmı bilmem. Hack konusunda temel bilinmesi gerekenlerden birisi hackliyeceğimiz sitenin genel yapısını amatör birgözden cıkarıp anlayaka görmektir. bu konuda php yi çözmüş olmak çok işimize yarıcaktır.. bu dökümanı arşivlemenizi öneririm PHP Nedir? Rasmus Lerdorf tarafından öncelikle kendi kişisel web sayfalarını yazmak için geliştirilmesi nedeniyle 'P'ersonal 'H'ome 'P'ages adının kısaltması olarak karşımıza çıkan PHP, HTML gömülü bir script dilidir. özellikle web uygulamaları geliştirenlerin dinamik ve havada üretilen web sayfalarını hızlı bir şekilde yazmaları için düşünülmüştür. Dilin sentaksı gelştirilirken C, Java ve en çok da Perl'den esinlenilmiştir. Bu nedenle bu dillerden her hangi birisini bilen bir kullanıcı için PHP'ye geçmek hiç de zor olmamaktadır. PHP kendi yorumlayıcısı ile birlikte kullanılan bir script dilidir. Bu yorumlayıcının yaptığı aslında HTML kodları arasına yerleştirilmiş PHP kodlarını ayrıştırıp işleyerek sonuçta saf HTML formatında bir çıktı üretmek web sunucuya iletmektir. Dilin Yapısı PHP, HTML gömülü bir dildir. Yani aynı dosya içinde hem HTML, hem de PHP kodu kullanılabilmektedir. Kod içinde HTML'den PHP'ye geçmek için bazı ayıraçlar kullanılması gerekir. Örneğin: <TABLE SIZE="500"> <TR> <TD><? Buraya PHP kodu yazılacak?><TD> ... HTML taglari içinde de PHP kullanmak için şu metod seçilmeli: <TABLE SIZE="<?PHP Buraha PHP kodu yazılacak?>" ... Veya: <script language="php"> Buraya PHP kodu yazılacak </script> Ve İlk 'Hello World' cümlemiz: <html> <head> <title>Example</title> </head> <body> <? echo "Hello World..."; ?> </body> </html> Browser bunu bize: Hello World... şeklinde gösterecektir. Değişkenler PHP, değer ile atama ile birlikte adres ile atama metodunu değişkenler üzerinde kullanabilir. Burada '&' işereti, önüne geçtiği değişkenin değerinin değil, adresinin işlemde kullanılmasını sağlar. Önceden tanımlı değişkenler PHP programcıya global olarak önceden tanımlı değişkenler sunmaktadır. Bunlar, PHP modül olarak çalıştırılıyorsa web sunucusunun gördüğü ve PHP scriptine aktardığı çevre değişkenleri, CGI değişkenleri ve sunucunun kendi ürettiği değişkenlerdir. PHP CGI olarak çalıştırılıyorsa CGI değişkenleri hariç diğerleri değişiklik gösterebilir. PHP bir başka program içinden veya komut satırından çalıştırılıyorsa web sunucunun kendi değişkenlerini görmesi zaten sözkonusu olamayacağı gibi çevre değişkeni olarak da içinde bulunulan shell veya programın set ettiği değişkenler geçerlidir. Bunların listesi phpinfo fonksiyonu ile görülebilir. Örnek. Kullanıcıdan PHP scriptine gelen değişkenler PHP'nin en güzel özelliklerinden birisi herhangibir çözümleme işlemi gerektirmeden dışarıdan gelen değişkenlerin çok rahat kullanılabilmesi: <form action="foo. php3" method="post"> Adınız: <input type="text" ad="name"><br> <input type="submit" name="submit" value="Tamam"> </form> Yukarıdaki formdan gönderilen değişkenler PHP içinde aşağıdaki gibi doğrudan kullanılanılabilir: <? echo "Adiniz:".$name; ?> Variable variables Adı dinamik değişebilen değişkenler programlamayı oldukça esnekleştiriyor. Yalnızca recursive yapılabileceğini düşündüğünüz pekçok işi bunlara yaptırabilirsiniz. Örneğin aşağıdaki kod çıktı olarak 'hello world' basar: $a = "hello"; $$a = "world"; echo "$a $a "; Type Juggling & Type Casting PHP, integer, float, string, array gibi çeşitli değişken tipleri içerir. Ancak değişkelerinizin tipi sabit değildir. Yani çalışma anında değişkeninizin tipini değiştirebilirsiniz . İstenmeyen durumlar oluşmaması için type casting kullanılarak da değişkenin değerinin nasıl yorumlanmasını istediğimizi belirtebiliriz. Diziler Dizilere rastgele erişim yanında sıradan erişim ve kuyruk veri yapısı içinde kullanma özellikleri kazandırılmıştır, PHP'de, Perl'de olduğu gibi associative diziler tanımlanabilir. Bu dizilere erişim yanında sıradan erişim olanağı veren list ve each gibi fonksiyonlar da tanımlanmıştır, Diziler çalışma anında büyüyebilir. . Dizilerin index boyutları da dinamik olarak değiştirilebilir. Fonksiyonlar Recursive fonksiyon çağrıları yapılabilir. Adı dinamik değişen fonksiyonlar kullanılabilir. Static değişkenler kullanılarak fonksiyonlara geri dönüşlerde değişkenin son aldığı değer kullanılabilir. Fonksiyon parametreleri standart değer alabilecek şekilde belirtilebilir. Fonksiyonlar değişen sayıda parametre kullanabilir. Fonksiyon dışındaki global değişkenlerin kullanımı için tanımlama işi programcıya bırakılmıştır. Ayrıca eval fonksiyonu kullanılarak kod içeriği dinamik olarak oluşturulabilir: eval ; Modülerlik için include ve require fonksiyonları kullanılabilir. Dosya upload etme ve HTTP bağlantılarını ele alma gibi gelişmiş özellikler de PHP ile beraber geliyor. PHP ve Kurallı İfadeler Kurallı İfadeler Kurallı ifadeler öteden beri Unix sistemlerinin vazgeçilmez unsuru olmuştur. Karmaşık metin arama, değiştirme ve çözümleme işlemleri için satırlar dolusu kod yazmak yerine özel semboler ile anlamlı hale getirilmiş tek satırlık bir kurallı ifade kullanılarak aynı sonuç elde edilebilir. Unix kendi sistemi içinde regexp desteği ile gelmekte ve kabuk programları bunları entegre olmuş bir şekilde kullanabilmektedir. Aynı şekilde sed, awk, perl gibi araçlar da regexp kullanımı için örnek verilebilir. PHP ile Kurallı İfadeler PHP, kurallı ifadeleri iki farklı şekilde ele almaktadır. Perl uyumlu kurallı ifadeler klasik regex formatını kullanırlar: Bu tür kurallı ifadeler iki tane "/" işareti arasında gösterilirler. Karakterler ve karakterlerden oluşan bloklar kullanılır. Bloklar, " " imleçleri arasında gösterilirler. "+" işleci sonuna geldiği karakter veya bloğun en az bir kere metin içinde geçtiğini anlatır. " " işleci sonuna geldiği karakter veya bloğun metin içinde sıfır veya daha çok kez geçtiğini anlatır. "?" işleci sonuna geldiği karakter veya bloğun sıfır veya bir kere metin içinde geçtiğini anlatır. " " türü bir işleç sonuna geldiği karakter veya bloğun kaç kere metin içinde geçtiğini alt ve üst sınırlar vererek anlatır. "?" işleci sonuna geldiği karakter veya bloğun sıfır veya bir kere metin içinde geçtiğini anlatır. "." newline ('\n' dışında tüm karakterleri ifade eder. "\s", tab ('\t' ve newline ('\n' dahil olmak üzere white space karakterlerini ifade eder. "\S", white space karakterler dışındaki tüm karakterleri ifade eder. "\d" 0-9 arası rakamları ifade eder "\w" harf, rakam ve '_' gibi bütün bir kelimeyi oluşturan karakterleri ifade eder. "\W", '\w' nin dışındaki karakterleri ifade eder. "^" cümle başlangıcını ifade eder "$" cümle bitişini ifade eder "\b" kelime başlangıç ve bitişleri için kullanılır. " " imleçleri arasında rakam veya harf aralığı içinde kalan bir karakter ifade edilir. "^" imleci, " " imleçleri arasında kullanılırsa seçimi tersine çevirir. "|", 'OR' içleci gibi çalışır. "", tüm bu özel karakterleri olduğu gibi yorumlanmasını sağlar. SSL, MySQL ve PHP destekli Apache kurulumu örneği Platform: Solaris2.6/2.7 Gereksinimler: Apache'nin kullanacağı araçlar: PHP (PHP-4.0) http://www.php.net OpenSSL http://www.openssl.org ModSSL (mod_ssl-2.6.4-1.3.12) http://www.modssl.org Apache'de aktif edilen modüller: mod_so: DSO desteği mod_ssl: SSL desteği PHP'nin kullanacağı araçlar: MySQL (mysql-3.22.27) http://www.mysql.com OpenLDAP Client Library http://www.openldap.org/ IMAP C-Client Library(UWImap4.7c - içinde pop3 sunucusu da gelmekte...) http://www.imap.org/ http://www.washington.edu/imap/ ftp://ftp. cac. washington. edu/imap/ GD Image Library (gd-1.8.2) http://www.boutell.com/gd/ PDF Library (pdflib-3.0) http://www.pdflib.com/pdflib/ Zend Optimizer http://www.zend.com/ GD Image Library için gerekenler: zlib (zlib-1.1.3) http://www.info-zip.org/pub/infozip/zlib/ http://www.freesoftware.com/pub/infozip/zlib/ PNG Library (libpng-1.0.6) http://www.libpng.org/pub/png/ http://www.libpng.org/pub/png/pngcode.html http://www.libpng.org/pub/png/libpng.html JPEG Library (libjpeg-6b ve üzeri) ftp://ftp. uu. net/graphics/jpeg/ FreeType Library (freetype-1.3.1 - True Type Fontlar için opsiyonel) http://www.freetype.org PDF Library için gerekenler: JPEG Library (libjpeg-6b ve üzeri) ftp://ftp. uu. net/graphics/jpeg/ FreeType Library (freetype-1.3.1 - True Type Fontlar için opsiyonel) http://www.freetype.org -

güzeL bi Döküman dostum thanx +2 Karma karma verirken bu hata geLdi You must spread some Karma around before giving it to berkee again.