php kaynakları
Kaptanın seyir defteri, tarih 13 Şubat 2004.
PHP ile ilgili web sitelerini toplayayım, bizim foruma göndereyim, amme hizmeti yapayım, millet yararlansın, forumda göze gireyim demişim :)
Kaptanın seyir defteri, tarih 13 Şubat 2004.
PHP ile ilgili web sitelerini toplayayım, bizim foruma göndereyim, amme hizmeti yapayım, millet yararlansın, forumda göze gireyim demişim :)
Tasarımda kullanacağınız renkleri seçmekte zorlanıyorsanız veya benim gibi 2 rengi bir araya getiremeyen bir kod yazarı iseniz bu araçlar size yardımcı olabilir.
Normalde olması gereken kod yazarına tasarımların gelmesi ve onun kodları tasarımlara entegre etmesidir. Burada bir parantez açarak tasarımcılara hayran olduğumu söylemeliyim, nasıl oluyor da güzel ve birbiri ile uyumlu sayfalar çıkartabiliyorlar aklım almıyor. Neyse, olması gerekenin dışında çoğu zaman kod yazarları da renk seçmek zorunda kalıyorlar. Özellikle yönetim panellerinin müşteriye güzel gözükmesi gerekiyor, aksi takdirde “şuraya resim koyalım”, “biraz daha canlı birşeyler yapsana”, “fazla basit olmuş” gibi sinir edici yorumlar gelebiliyor. Öte yandan çalışırken yönetim panelinin güzel gözükmesi çalışma şevkini arttıran bir olay, kendimden biliyorum.
Aşağıdaki yardımcı araçların çoğu tarayıcı üzerinden çalışıyor, bunları kaydedip kendi bilgisayarınızdan çalışabilirsiniz, diğerlerini indirip kurmanız gerekiyor. Bu araçlar size süper tasarımlar yaptırmayacak fakat 2 rengi güzel bir biçimde bir araya getirebileceksiniz.
Renk Seçiciler
Iconico ColorPic
Color Schemer Color Pix
ColorZilla Firefox eklentisi
Nattyware Pixie
Colorjack DHTML Color Picker
Uyumlu Renk Üreticiler
http://www.colorschemer.com
http://hlrnet.com/colormatch
http://www.wellstyled.com/tools/colorscheme2/index-en.html
http://www.siteprocentral.com/html_color_code.html
http://www.dhtmlgoodies.com/scripts/color-schemer/color-schemer.html
http://www.rentadabo.nl/colorschemer.htm
http://www.colorjack.com
http://www.defencemechanism.com/color/
http://www.limov.com/colour/schemes.lml
http://dev.sessions.edu/ilu/ilu_1.html
http://www.easyrgb.com
http://www.themaninblue.com/experiment/Technicolor/
Karıştırıcılar
http://meyerweb.com/eric/tools/color-blend/
http://www.colormixers.com/mixers/cmr/
http://colorblender.com
http://www.telecable.es/personales/alberto9/color/index.htm
Renk Paletleri, Renk Sevici Web Siteleri :)
http://www.colourlovers.com
http://pourpre.com/colordb/
http://www.visibone.com/colorlab/
http://beta.dailycolorscheme.com
http://www.december.com/html/spec/colorshades.html
http://kuler.adobe.com
http://www.colorjack.com
http://slayeroffice.com/tools/color_palette/
Fotoğrafdan Renk Paleti Üreteçleri
http://www.degraeve.com/color-palette/index.php
http://jrm.cc/color-palette-generator/
http://www.colorhunter.com
Renkler Hakkında
Türkçe
http://tr.wikipedia.org/wiki/Web_renkleri
http://www.fotografya.gen.tr/cnd/index.php?id=225,0,0,1,0,0
http://www.gaxxi.com/buzz/yazi/renkler-1
İngilizce
http://www.d.umn.edu/itss/support/Training/Online/webdesign/color.html
http://en.wikipedia.org/wiki/Web_colors
http://en.wikipedia.org/wiki/List_of_colors
http://del.icio.us/tag/color
Kaynaklar
http://www.bildirgec.org/yazi/css-renk-paletleri
http://www.furilo.com/archivos/recursos-de-color/
http://ceyhunaksan.com/tasarimda-uyumlu-renk-kullanmak/
Gmail e-posta hesabınız varsa, sınırsız sayıda e-posta adresine sahip olduğunuzu biliyor musunuz? İşi web ile ilgili olan çoğu kişi bunu şimdiye kadar öğrenmiştir, yani çoğu kişinin bildiği bir şey yazıyorum. Neyse önce konuyu anlatayım daha sonra ahkam keserim neden yazdığım ile ilgili.
Konu gmail adresinizin sonuna + ekleyerek sınırsız sayıda farklı e-posta adresi oluşturabilirsiniz. Mesela eposta adresinizin tarkan.tevetoglu@gmail.com olduğunu varsayar isek, tarkan.tevetoglu+fans@gmail.com eposta hesabına gönderilen maillerde tarkan.tevetoglu@gmail.com adresine teslim edilecektir. Sizin birşey tanımlamanıza ya da yapmanıza gerek yok bu tip sınırsız adres kullanabilirsiniz. Okuduğum kadarı ile noktanın da benzer bir etkisi var fakat tam olarak bu şekilde kullanılamaz.
Gmail hesabınızda etiketler(label) oluşturarak bu mail adresine gönderilen iletilerin
otomatik olarak kategorilendirilmesini de sağlayabilirsiniz. Mesela farklı e-posta bültenlerine üye olduğunuzu varsayalim, tarkan.tevetoglu+haber@gmail.com diyerek haber siteleri üyeliklerinden gelen, tarkan.tevetoglu+alisveris@gmail.com diyerek de alisveriş sitelerinden gelen iletilerin otomatik olarak kategorilendirilmesini sağlayabilirsiniz.
Evet konu bu, bunu çok uzun zaman önce bir yerlerde okumuştum, şimdi neden yazmak ihtiyacı duyduğumu anlatayım, kanıksamadan yakınmak istiyorum. İşimiz yüzünden çok hızlı bir şekilde geziyoruz, okuyoruz. O kadar çok yapıyoruz ki artık rutine, tekrara bağlayıp okuduklarımızın kendi problemlerimizi çözebileceğini
bile görmüyoruz. Çok uzun zaman önce okumuştum, iyi güzel kullanırız deyip geçmiştim.
Problemim agaclar.net‘in kod yazarlarından biri olmam sebebi ile testler için farklı üyeliklere ihtiyacim olması idi. vbulletin forum üye olurken verilen mail adreslerinin daha önceden tanımlı olup olmadığına bakıyor ve eğer bu mail adresi forumda tanımlı ise bir üyelik açılmasına izin vermiyordu. Sonuçta 2/3 tane mail adresim var, onları da kullanınca artık gidip oluşturduğum üyeliği silmek ya da başka birilerinden rica etmek gerekiyordu. Okunan bir bilgiyi başka bir yerde kullanmak aklımın ucundan neden geçmiyordu acaba? Sanırım tez zamanda etkin okuma kurslarına kaydımı yaptırmam gerekiyor.
Neyse fazla uzattım ki, sevdiğim bir şey değildir, artık sınırsız e-posta adresim var :). Okuduğum yorumlar web sitelerinin email adresinde + işaretini kabul etmediğini söylüyor. biz agaclar.net‘de kabul ediyoruz, sizi de bekleriz. Bu arada Tarkan hakkında bilgi arayanlardan özür dilerim, aşağıdaki linkler yardımcı olur umarım.
http://www.tarkan.com/
http://tr.wikipedia.org/wiki/Tarkan_Tevetoğlu
http://www.google.com/search?as_q=tarkan+teveto%C4%9Flu&hl=tr&rls=en&num=10
İlgili linkler
http://labnol.blogspot.com/2006/09/gmail-easter-eggs-dot-blindess-email.html
http://mail.google.com/support/bin/answer.py?ctx=%67mail&hl=en&answer=10313
Eğer zend gibi gelişmiş ideler kullanmıyorsanız, php ortamının önemli eksikliklerinden biri debugger ve profiler gibi araçlardır.
php script yazarları, çoğunlukla adım adım kodlama yaptıkları için, bir hata meydana geldiğinde hatanın olduğu satıra gidip düzeltirler. Değişkenlerin değerine bakmak gerektiği durumlarda da echo, var_dump gibi komutlar ile değişken değerlerini ekrana basarak işlerini hallederler. İtiraf etmek gerekirse ben de onlardan biriyim yani aşağıdaki araçların bütün fonksiyonlarini kullanmadım, çünkü çoğu zaman klasik yöntemler iş görüyor. özelikle karmaşık olmayan kendi yazdığınız kodlar üzerinde. Neyse önce araçları tanıyalım, daha sonra kendi işime yarayan özelliklerini anlatayım.
XDEBUG
xdebug bir php eklentisi, size scriptleriniz hakkinda debug bilgileri veriyor. xdebugi çalışır duruma getirdiğiniz zaman artık klasik hata mesajları yerine çok daha detaylı hata mesajları alıyorsunuz, çağrılan fonksiyonlar, fonksiyonlara geçen parametreler, harcadıkları memory, süre, lokal, global değişkenler. Xdebugin benim en çok kullandığım ve sevdiğim özelliği ise profiling bilgisi vermesi. xdebug hakkındaki ayrıntılara aşağıdaki linkten ulaşabilirsiniz.
WINCACHEGRIND
Bu program xdebugın ürettiği cachegrind.out dosyalarına windows üzerinde bakabilmenizi sağlıyor. yani işin izleme kısmını hallediyor.
http://sourceforge.net/projects/wincachegrind/
xdebug kullanarak hatalar hakkında daha ayrıntılı bilgilere ulaşabiliyorsunuz, yukarıda da bahsettiğim gibi benim kullandığım özelliği bu değil. Bu araçları kullandığım 2 durum var.
1. Bazen yazdığınız kod yanıt vermez hatta sayfa açılmaz ve timeout olur. Bu durumda büyük ihtimalle kodunuz bir döngü oluşturuyor ve serverin anasını ağlatıyordur :). Hata mesajı olmadığı için tek tek echo exit yaparak nerede tıkandığını(bottleneck) bulmaya çalışırsınız. Tabii artık debug araçlarınız var hemen oluşan cachegrind.out dosyasını açıyorsunuz ve hangi fonksiyon ne kadar süre ile çalışmış, kaç kez çağrılmış görüyorsunuz, uzun bir kodda bu sizin birkaç saatinizi kurtaracaktır.
2. durum da, ki en güzelini sona sakladım, başka birinin kodunu incelemek zorunda kaldınız diyelim. Ya tek tek bütün satırlara bakacaksınız acaba ne zaman hangi fonksiyon çağrılıyor diyerek, ya da bir işlem yapıp xdebug çıktısı eşliğinde ilerliyeceksiniz. Emin olun bu yöntem çok daha zevkli ve hızlı.
php ile mysql baglantisi yaparken kaç kez bağlantı açmak gerekiyor? Cevap database sayısı kadar yani 1 database varsa 1 bağlantı üzerinden her işinizi görebilirsiniz.
Başkalarının kodlarını incelerken sıklıkla gördüğüm; fonksiyon içlerinde ya da ayri dosyalarda ne zaman bir database bağlantısına ihtiyaç olsa hemen mysql_connect fonksiyonun çağrılması ve database bağlantısı açılması. Evet, kesinlikle iş görüyor, fakat olması gereken bu mudur? Ne gibi sakıncaları vardır?
1. Konfigürasyonun zorlaşması: Scriptte bir değişlik yapmanız gerekiyor; farz edelim username değişti, ne yapmalısınız? Bağlantı yaptığınız her yerde username’i değiştirmelisiniz. Bunun için bir fonksiyon yazdınız ise nispeten şanlısınız sadece fonksiyonun içinde değiştirmeniz sizi bundan kurtaracaktır ya da bağlantı parametrelerini değişkenlere yüklendiniz ise sadece bu değişkenleri değiştireceksiniz.
2. Kaynakları boşa harcama: Diyelim ki fonksiyon yazdınız, fakat bunu her ihtiyacınız olduğunda çağırarak tekrar bağlantı açılmasına neden oluyorsunuz bu da size zaman ve kaynak kaybı olarak geri dönecektir. Yani bir bağlantı harcadığınızda 1ms geçiyorsa 10 bağlantı için 10 ms geçecektir. Neyse ki php coderlari bunu düşünmüş ve kazın ayağı tam olarak böyle değil, bağlantı açıldığında eğer daha önce aynı parametreler ile bir bağlantı açılmışsa php yeni bir bağlantı açmayacak ve var olan bağlantıyı kullanacaktır, fakat bu durumda da mysql_select_db icin halen bir kayıp söz konusu. Aynı zamanda mysql_close yapıyorsanız veya bağlantı açarken link_identifier belirti iseniz. php yeni bağlantılar açacaktır yani yukarda verdiğim 1′e 10′luk örnek geçerli olacaktır. Bu kayiplar ms’ler mertebelerinde olduğu için pek önemsenmez. Döngü içinde 10.000, 100.000, 1 milyon bağlantı açıyorsanız bu ms’ler önem kazanmaya başlar, tabiki bu durumda coderlığınızdan şüphe etme vakti gelmiştir.
Kod yazarken olabildiğince kodu tek bir noktada toplamaya çalışmalısınız, mesela bir bağlantı fonksiyonu yazdınız ve bu fonksiyonu header, init, vs. gibi bir dosyada bir kez çağırdınız. Bu sizi her scriptinizde find/replace yapmaktan kurtaracaktır aynı zamanda bir kez çağırmış ve yazmış olacaksınız.
Rasmus Lerdorf c ile yazdığı ilk php versiyonu 8 Haziran 1995 tarihinde comp.infosystems.www.authoring.cgi usenet haber listesinde duyurmuş.
php 1.0 özellikleri kısaca
. Log Dosyaları tutma/izleme
. Günlük ve toplam erişim sayaçları
. Bağlananları banlama :)
. Şifre korumalı sayfalar
. Erişimler izleme
. Server side includelar, server desteklemese bile
. Web formları oluşturma
şeklinde, aslında bir ara deneysel olarak kurup fantazi yapmak lazım. Rasmus Lerdorf php’yi GNU lisansı altında yayınlamasaydı, ben ne iş yapıyor olurdum diye merak ettim şimdi. :) Birilerinin verdiği karar, hayatımızı nasılda etkiliyor. Herhalde kendisi bu kadar büyüyeceğini, yayılacağını düşünmemiştir, sonradan katkıda bulunanların etkisi en az onunki kadar büyük.
Aşağıda tam duyuru ve duyuruyu aldığım yerin linki bulunuyor.
These tools are a set of small tight cgi binaries written in C.
They perform a number of functions including:. Logging accesses to your pages in your own private log files
. Real-time viewing of log information
. Providing a nice interface to this log information
. Displaying last access information right on your pages
. Full daily and total access counters
. Banning access to users based on their domain
. Password protecting pages based on users’ domains
. Tracking accesses ** based on users’ e-mail addresses **
. Tracking referring URL’s - HTTP_REFERER support
. Performing server-side includes without needing server support for it
. Ability to not log accesses from certain domains (ie. your own)
. Easily create and display forms
. Ability to use form information in following documentsHere is what you don’t need to use these tools:
. You do not need root access - install in your ~/public_html dir
. You do not need server-side includes enabled in your server
. You do not need access to Perl or Tcl or any other script interpreter
. You do not need access to the httpd log filesThe only requirement for these tools to work is that you have
the ability to execute your own cgi programs. Ask your system
administrator if you are not sure what this means.The tools also allow you to implement a guestbook or any other
form that needs to write information and display it to users
later in about 2 minutes.The tools are in the public domain distributed under the GNU
Public License. Yes, that means they are free!For a complete demonstration of these tools, point your browser
at: http://www.io.org/~rasmus–
Rasmus Lerdorf
ras…@io.org
http://www.io.org/~rasmus
Döngüsel sorgular nedir, nasıl oluşur?
Bir döngü içinde mysql sunucusuna gönderilen sorgulara döngüsel sorgular ismini veriyorum, bu tip sorgular tehlikelidir çünkü kaynak, zaman tüketirler ve kod yazımı sırasında dikkat çekmezler, programcı işini en kısa sürede bitirmeye odaklandığı için, o an ihtiyacı olan veriyi sorgu ile almaktan çekinmeyecektir. Çoğu zaman da döngülerle çalıştığından, bir döngünün içinde, koşula bağlı olarak, defalarca sorgu gönderecektir. Geliştirme aşamasında veri ve kullanıcı sayısı az olduğu için performansta düşüş hissedilmez, fakat uygulama web’e konulduğunda biraz yoğun bir sistemde geç açılan veya hiç açılmayan sayfalara neden olacaktır.
Nasil engellenebilir?
Elbette en basit şekilde döngü içinde sorgu göndermeyerek, bunun içinde geliştirme aşamasında gönderdiğiniz sorguları izlemeli, gereksiz sorgulardan kaçınmalısınız. Kendi yazacağınız veya kullandığınız apinin gönderdiği sorguları raporlama özelliği, ADOdb‘nin böyle bir özelliği var, sorguların izlenmesini (debug) kolaylaştıracaktır. Bu arada herzaman döngüsel sorgular kullanılmaz diye bir tezim yok, bu tip sorgulara çoğunlukla update sorgularında ihtiyaç duyuluyor, fakat çoğu select ve insert sorgusu kodlama ile tek bir sorguya indirilebilir.
Örnekler
En basit örneği phpMyAdmin‘de görmüşsünüzdür. phpMyAdmin verileri export ederken adına extended inserts, Türkçesinde “Tablo ismini ve INSERT deyimini sadece bir kez kullan” olarak geçiyor, denilen aynı anda birden fazla satır oluşturan bir sorgu üretebilir. MySQL 3.22.5′den sonraki versiyonlarda geçerli olan, bu sorgu birden fazla insert yapmaya olanak sağlar.
Select sorgularını engellemek için join ise kavramını öğrenmemiz gerekiyor, zaten döngüsel sorgulara çoğu zaman farklı tablolarda bulunan veride önce bir veriyi çekip sonra ilişkili diğer veri/veriler için başka sorgular kullanılan durumlarda rastlıyorum, halbuki baştan yapıyı doğru kurarak join ile tek sorguda problem giderilebilir.
Henüz okumadım, aç gözlü eski bir kitap kurdu olarak indirdim, okunacak kitaplar arasına koydum. Biraz bakındım içeriğine ismi Power Programming ama daha çok giriş seviyesinde bir kitap, bu işe yeni başlayanların alıp okuyabileceği, bakabileceği bir başvuru kaynağı niteliğinde. Biraz uzun, 720 sayfa kadar diyorlar.
Kitap Sayfası : PHP 5 Power Programming
Gördüğüm Yer :Turk-PHP.com
Turk-PHP.com Kitaplar Dizini
nedir? neden gereklidir?
Dinamik içeriğe sahip sitelerde “0.021 sn’de üretildi, 34 sorgu kullanıldı” şeklinde yazılar görmüşsünüzdür. En basit kontrol bu tip notlar olsa gerek. Günümüzde her şey hızlı olmak zorunda kimsenin, özellikle web kullanıcılarının, sitenizin açılmasını beklemeye tahammülü yok.
Herkes optimizasyon ve daha iyi teknikler peşinde. Her şeyde olduğu gibi kaynakların önemini onları kaybettiğinizde, siteniz büyümeye başladığında, anlıyorsunuz. Daha hızlı sayfa üretmek için daha az sayıda sorgu kullanmak zorundasınız, daha az sorgu içinde ne kadar sorgu kullandığınızı bilmeniz, izlemeniz gerekiyor. Yazdığınız sorguları izledikçe aslında çoğunun birleştirilip, azaltılabileceğini göreceksiniz. Ayrıca daha önce döngüsel sorgulardan bahsetmiştim. Sorguları izlemek döngüsel sorguları kolayca farketmenizi sağlayacaktır. En azından ne yaptığınızı bileceksiniz.
nasıl yapılır?
en basit şekilde bir fonksiyon yazarak izleyebilirsiniz. Aşağıdaki gibi bir fonksiyon gönderdiğiniz sorguyu global bir değişkene ekler. Sayfanın sonunda bu değişkeni bastırarak o sayfada ne kadar sorgu kullanmışsınız görebilirsiniz.
function t_mysql_query($qry) {
global $allqry;
$allqry .= $qry . "<br />";
return mysql_query($qry);
}