- PHP derlenen bir programlama dili değildir.
- PHP bellek erişimi, donanım kontrolü vb. alışılmadık kontroller yapamaz.
- PHP X programlama dilinin yaptıklarını yapamaz.
- PHP sadece web geliştirmek için kullanılır.
- PHP sadece bir şirket tarafından kontrol edilir. (zend)
- PHP dökümantasyonu kötü ve yetersizdir.
- PHP projeleri yeniden kullanılabilir değildir çünkü nesne tabanlı değildirler.
- PHP Ruby On Rails, Python Django, vs. den daha kötüdür.
- PHP yüksek performanslı ve ölçeklenebilir web siteleri ve uygulamalar için uygun değildir.
- PHP geliştiricileri ucuzdur çünkü nitelikli değildir.
Kategori: PHP
PHP : Hypertext Preprocessor (Türkçe: Üstünyazı Önişlemcisi) (Aslen: Personal Home Page – Kişisel Ana Sayfa) , internet için üretilmiş, sunucu taraflı, çok geniş kullanımlı, genel amaçlı, HTML içerisine gömülebilen betik ve programlama dilidir. Wikipedia
PHP ile MAC<->IP<->HostName dönüşümü yapmak
PHP uygulamasının yalnızca belli bilgisayarlar tarafından kullanılmasını sağlamak için MAC (ethernet adresi) adresi kontrolü yapabilirsiniz. Benzer kontrol IP adresi ve Hostname kontrolü ile de gerçekleştirilebilir. Ancak güvenlik açısından kritik bir uygulamaya erişim sağlatıyorsanız söz konusu kontrollerin tamamen yetersiz olduğunu bilmek gerekir.Çünkü MAC, IP ve Hostname gibi adresler kullanıcı tarafından kolayca değiştirilebilir. Ancak bu kontrolleri kullanıcıyı rahatsız etmeden mevcut kimlik doğrulama prosedürüne ekleyebilirsiniz. Ayrıca MAC adresi sadece yerel ağlarda geçerli olan bir parametredir, internet ortamında var olmadığını ve kontrol edemeyeceğinizi hatırlamalısınız.
Okumaya devam et “PHP ile MAC<->IP<->HostName dönüşümü yapmak”
Windows 7’ye Apache & PHP Kurulumu Yapmak
Windows 7 işletim sistemine, Apache & PHP kurulumunu ve temel yapılandırma ayarlarının nasıl yapıldığını anlattığım bir eğitim filmi daha kaydettim. Windows 7 daha önce paylaştığım Windows XP’ye kurulum yapmaya göre bazı farklılıklar içeriyor. Bu farklılıklar Windows 7’nin ek güvenlik özelliklerinden kaynaklanmakta. Film en güncel Apache ve PHP sürümlerinin internet sitelerinden indirilmesiyle başlıyor, kurulumlarının ardından httpd.conf ve php.ini dosyalarında gerekli ayarların yapılıp, sunucunun test edilmesi ile sonlanıyor. Umarım yararlı olur. Değerli eleştiri ve önerilerinizi paylaşacağınızdan eminim.
Windows XP’ye Apache & PHP Kurulumu Yapmak
Windows XP işletim sistemine Apache & PHP kurulumunu ve temel yapılandırma ayarlarını anlattığım bir eğitim filmi kaydettim. Film en güncel Apache ve PHP sürümlerinin sitelerinden indirilmesiyle başlıyor, kurulumun ardından httpd.conf ve php.ini dosyalarında gerekli ayarların yapılıp, sunucunun test edilmesi ile sonlanıyor. Umarım yararlı olur. Değerli eleştiri ve önerilerinizi esirgemeyeceğinize eminim.
PHP ile Flashget’e download uyartımı göndermek
Flashget indirme yöneticisi olarak çokça tercih edilen bir program. Flashget sistem tepsisinde (system tray) beklerken aynı zamanda web tarayıcınızı da indirme görevleri için izler. Flashget bu sayede bir dosyayı indirmeye başlamadan önce ekranda belirerek indirmeyi Flashget ile yapmak isteyip istemediğinizi sorar. Bu özellik bazı durumlarda çalışmayabiliyor. Yani, flashget tarayıcıdan bir download gerçekleştiği halde olaya müdahil olmayabiliyor. Çözüm için PHP tarafından göndereceğiniz header satırları ile Flashget’e tetiklenmesi için uyartım gönderebilirsiniz.
header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Disposition: attachment ; filename=a.exe"); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize('a.exe'));
Dosya ismini vermeden download adresi oluşturmak
Download sistemleriyle ilgilenenler için faydalı olacağını düşündüğüm bir uygulama.
http://site.com/download.php?id=4 dedik, dosya inmeye başladı ama, kaynağına baktığımızda dosyanın nerede olduğu ve dosya ismi yazıyor. Belki de biz bunu göstermek istemiyoruz. :) Basit uygulamalarda download.php sayfasında şu kod kullanılıyor;
<meta http-equiv="refresh" content="1;URL=".$filename[name]."" />
Ama biz bunu yapmayacağız. Çünkü dosya ismini linkte göstermek istemiyoruz.
Fazla gevezelik etmeden uygulamaya geçeyim…
<?php $connect = mysql_connect("hostname", "username", "password"); mysql_select_db("database"); //Veritabanına bağlandık. Sıra geldi verilerimizi çekmeye. //Benim `file` tablomda `id` ve `filename` sütunları var diyelim. //`filename` sütununda dosyanın ismini tutuyoruz. (file.zip gibi) $query = mysql_query("SELECT * FROM `file` WHERE `id` = '".$_GET['id']."'"); $show = mysql_fetch_array($query); // files klasöründe dosyaları tutuyorum ben. //Siz eğer başka bir klasörde tutuyorsanız değiştirebilirsiniz tabii ki. header("Content-Type: application/x-msdownload"); header("Content-Disposition: attachment; filename=files/".$show[link].""); ?>
İşte bu kadar. Bu kodları download.php olarak kaydedin. download.php?id=1 dediğinizde 1 numaralı verinin dosya ismini alır, files klasöründen bulur ve kullanıcının indirmesine izin verir. Dosyanızın ismi hiçbir şekilde görünmez. Geliştirmek ve güzelleştirmek size kalmış arkadaşlar. Kolay gelsin.
Kaynak: http://www.ilhankaraoglu.com/dosya-ismini-vermeden-download-sayfasi-olusturmak
Metinden Anahtar Kelime (keyword) Üretme
Aşağıdaki get_keywords fonksiyonu verilen metinde ençok geçen kelimeleri bulup sonucu meta keyword olarak geri döndürüyor. İkinci parametreye verilen değer kaç keyword’ün geriye döndürüleceğini belirliyor.
<?php function filter( $item ) { if (strlen($item) <= 3) return false; return true; } function strcount( $item ) { GLOBAL $content; return Array(substr_count($content, $item), $item); } function html2txt($document){ $search = array('@<script[^>]*?>.*?</script>@si', // Strip out javascript '@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags '@<style[^>]*?>.*?</style>@siU', // Strip style tags properly '@<![\s\S]*?--[ \t\n\r]*>@' // Strip multi-line comments including CDATA ); $text = preg_replace($search, '', $document); return $text; } /** * Remove HTML tags, including invisible text such as style and * script code, and embedded objects. Add line breaks around * block-level tags to prevent word joining after tag removal. */ function strip_html_tags( $text ) { $text = preg_replace( array( // Remove invisible content '@<head[^>]*?>.*?</head>@siu', '@<style[^>]*?>.*?</style>@siu', '@<script[^>]*?.*?</script>@siu', '@<object[^>]*?.*?</object>@siu', '@<embed[^>]*?.*?</embed>@siu', '@<applet[^>]*?.*?</applet>@siu', '@<noframes[^>]*?.*?</noframes>@siu', '@<noscript[^>]*?.*?</noscript>@siu', '@<noembed[^>]*?.*?</noembed>@siu', // Add line breaks before and after blocks '@</?((address)|(blockquote)|(center)|(del))@iu', '@</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))@iu', '@</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))@iu', '@</?((table)|(th)|(td)|(caption))@iu', '@</?((form)|(button)|(fieldset)|(legend)|(input))@iu', '@</?((label)|(select)|(optgroup)|(option)|(textarea))@iu', '@</?((frameset)|(frame)|(iframe))@iu', ), array( ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", ), $text ); return strip_tags( $text ); } function get_keywords($content, $count) { $content = strip_html_tags($content); $content = html_entity_decode($content); $arr = str_word_count( $content, 1); $arr = array_filter($arr, 'filter'); $arr = array_unique($arr); $arr = array_map('strcount', $arr); arsort($arr); foreach($arr as $item) { if ($i < $count) $ret_arr[] = $item[1]; $i++; } return implode(',', $ret_arr); } $content = file_get_contents('https://www.tankado.com/'); echo get_keywords($content, 5); ?>
PHP için Güvenlik Kontrol Listesi
sk89q.com daha önce burada yayınladığı php güvenlik kontrol listesinin yazdırılabilir bir sürümünü PDF cheatsheet olarak yayınlamış. Sitede daha önce de bazı cheaatsheet‘ler yayınlamıştım.
[Yükleme bulunamadı.]E-Dergi: phpdergi
phpdergi okuyucularına web uygulamaları geliştirirken yardımcı olmayı hedefliyor. Sadece PHP değil, web uygulaması geliştirirken ihtiyaç duyduğunuz birçok alanda yazılar bulabileceksiniz dergide. JavaScript’ten sistem yönetimine, web sunucu kurulumundan CSS’e kadar hem basit hem ileri seviye birçok yazı okuyacaksınız dergide.
Elinizin altında internet adı verilen hemen her şeyi bulabileceğiniz bir kaynak var. Derginin farkı ise hiçbir yerde olmayan konular ya da fikirler içermesi olacak. Özellikle yukarıda belirttiğimiz gibi deneyimlerle kazanılan bilgiler, ipuçları ve web uygulamalarının güvenliği üzerine yazılara sık sık rastlayacaksınız.
PHP ile TC Kimlik Numarasını Doğrulamak
Kullanıcıdan web form aracılığıyla bazı bilgiler almak gerektiğinde bilgileri doğrulama yoluna gideriz. TC kimlik numarasının formulize edilidğini daha önce söylemiştim. TC Kimlik numarasının son 2 hanesi ilk 9 hanesini doğrulamakta kullanılan bir tür güvenlik kodudur. Aşağıda güvenlik kodunu üreterek TC kimlik numarasını yazım yanlışlıklarına karşı doğrulayan is_valid_tckn() adında bir PHP fonksiyonu yer alıyor. Ayrıca C# ve VB fonksiyonlarını da sayfanın devamında bulabilirsiniz.
PHP TC Kimlik Numarası Doğrulama Fonksiyonu
# Coded by Tankado @ tankado.com function is_valid_tckn( $tckn ) { $x = $tckn; $valid1=((7*($x[0]+$x[2]+$x[4]+$x[6]+$x[8])-($x[1]+$x[3]+$x[5]+$x[7]))%10)==$x[9]; $valid2=(($x[0]+$x[1]+$x[2]+$x[3]+$x[4]+$x[5]+$x[6]+$x[7]+$x[8]+$x[9])%10)==$x[10]; return $valid1 && $valid2; }
WordPress – WP Simple Cache Plugin
WP Simple Cache, wordpress kullanan sitelerin cevap süresini azami derece azaltan bir eklenti. Benzer birkaç eklenti varken neden böyle bir eklenti yazmaya giriştim derseniz, daha hızlı ve kullanımı kolay olan bir eklenti hazırlamak istedim. Bunda kullandığım diğer cache eklentilerinin yükleme ve performanslarında yaşadığım sorunlar etkili oldu. Ayrıca bu eklenti ile wordpress deneyimimi artırma şansı buldum. WP Simple Cache wordpress camiasına hediye ettiğim iikinci eklentim oldu. İlk göz ağırım WP Onlywire Auto Poster eklentisini buradan inceleyebilirsiniz.
Okumaya devam et “WordPress – WP Simple Cache Plugin”PHP: Aslında CGI Antremanı Yapmalıyız
LKD‘nin Linux-programlama listesinde “Neden Cannot modify header information – headers already sent by” hatası alıyorum sorulduktan sonra, Sn. Barış Çuhadır’ın cevaben verdiği bilgiler işin özünü yansıtması açısından çok güzeldi. Paylaşmak istedim.
“CGI programları istenilen programlama dili ile yazılabilir. Örneğin ben şu anda C ile kendi cgi kütüphanemi oluşturmaktayım. C ile yazılan bir cgi programı, ayrı bir işlem olarak yaratılmayıp apache cgi modülü ile kullanıldığında, ortalama bir masaüstü bilgisayarda bile saniyede ortalama 800-1200 talebe yanıt verebiliyor.
Hele ki yazdığınız program işlemciyi yoğun olarak kullanan bir program ise, ör. C ile yazılmış, apache üstünde mod-cgi ile çalışan bir cgi programı yine apache üstünde mod-php ile çalışan aynı programdan 5-10 kat daha hızlı çalışmaktadır.
Okumaya devam et “PHP: Aslında CGI Antremanı Yapmalıyız”
Delphi for PHP’de PageControl nesnesi sorunu
Sıradaki ilk projemi Delphi for PHP (D4PHP) ile yapmaya karar vermiştim. Daha önce de söz ettiğim bu RAD‘ı geliştiriciler arasında sevenlerin sayısı çok. Hem bu düşünceye özgür iradem ile hak vermek hem de fazla bilgi göz çıkartmaz düşüncesiyle D4PHP’nin 2.1.0 sürümünü kurup kurcalamaya başladım.
İnternetteki eğitim videolarını ve d4php’nin samples klasöründeki örnekleri görünce işlerin nekadar kolaylaştığını anlayabiliyorsunuz fakat grafik ve flash yoğunluklu site tasarımlarında d4php ile nasıl entegre çalışılabilir, kod yapısına nasıl müdahale edilir gibi soru işaretleri de hafiften beyninizde belirmeye başlıyor. Macromedia’nın sunduğu studio ortamı kadar konfor yaşayabilirmiyiz yoksa d4php daha farklı projeler için mi daha uygun olur emin değilim.
Yalnız d4php ile advanced nesneler ve ajax’ı kullanarak yerel uyglama (native application) kıvamında, web tabanlı projeleri rahatlıkla ve kısa sürelerde hazırlayabilirsiniz. Zaten böyle bir proje yapacaksanız kesinlikle d4php kullanmanızı öneririm. Henuz d4php deneyimim az ve şimdilik düşüncelerim böyle.
Okumaya devam et “Delphi for PHP’de PageControl nesnesi sorunu”
e-Okul PHP Script’i ve Delphi Programı
Daha önce PHP’de yazdığım yarım kalmış bir e-okul projesinden bahsetmiş ve kodlarını paylaşmıştım. Paylaşımın delphi ayağına ait programı henuz bulabildim. Onuda buradan paylaşacağım. Program kısca; Bilsa Karma programının mdb biçimindeki veritabanlarından not ve devamsızlık bilgilerini alarak script’in kullanabileceği MySQL veribanına aktarıyor. Program temel görevleri yerine getiriyor fakat üzerinden bir hayli zaman geçtiği için eksiklikleri/hataları nelerdi konusunu hatırlayamıyorum.
Okumaya devam et “e-Okul PHP Script’i ve Delphi Programı”tinyMy: small mysql console
tinyMy, MySQL veritabanlarını yönetmek için hazırlanmış küçük bir PHP betiğidir. tinyMy tek bir PHP dosyasından oluşan çok küçük ve basit bir betikdir.
Genellikle web üzerinden MySQL veritabanlarını yönetmek için phpMyAdmin kullanılsada bazı durumlarda phpMyAdmin biraz fazla gelebilmekte. phpMyAdmin birçok özelliği bünyesinde barındırıyor, çok fazla dosyadan oluşuyor ve bazen bu dosyaların boyutu ve kodların çokluğu sunucu başarımı açısından sorun teşkil edebiliyor. Ayrıca dial-up gibi düşük bir bağlantı söz konusu olduğunda biraz konfor kaybı olabiliyor. Çok fazla beklentiniz yoksa tinyMy size göre.
tinyMy ile veritabanındaki tabloların içeriğini ve yapısını görebilir, SQL çalıştırabilir ayrıca tablolarınızı dump edebilirsiniz. tinyMy betiğini buradan indirebilirsiniz.
WordPress ile 404 hatalarını tespit etmek
Benim gibi dotclear‘dan wordpress’e göç etmiş bir blogcu iseniz yeni sitenizdeki bazı URL adreslerinin 404 hatası vermemesi neredeyse mümkün değil. Arama motorlarının indekslemiş olduğu URL adresleri sitenizde karşılık bulmuyorsa başınız biraz dertte demektir. Arama motorları bu adresleri periyodik olarak ziyaret ettikleri için sürekli 404 hataları ile karşılaşacakdır. 404’lerin ele geçirdiği bir site arama motorlarının gözünde değer kaybeder.
WordPress altyapısını kullanan sitenizin derinliklerindeki geçersiz URL adresleri haberiniz olmayan birçok 404 hatasını üretmektedir. Şahsen uzunca bir süre farkında olmadığım ve aslında kolayca tespit de edilemeyecek bu durumu düzeltmek biraz zamanımı aldı doğrusu. Bu sorunu gidermek çin aşağıdaki PHP kodlarını yazdım.
Kodları wordpress temanıza ekleyerek siz de kullanabilirsiniz. Kodlar sitenizde var olmayan bir adres talep edildiğinde, ilgili adresi ve isteğin kimden geldiği gibi bilgileri eposta adresinize göndererek raporlayacaktır. Bundan sonra iş gelen raporlara göre kırık bağlantıları onarmaya geliyor. Bir hafta içerisinde posta kutumda 2000’e yakın rapor birikti. Okumaya devam et “WordPress ile 404 hatalarını tespit etmek”
Google Summer of Code: PHP-Based Docbook renderer
Burada PhD adındaki, Docbook formatlı dökümanları chm ve pdf gibi daha taşınabilir ve yaygın formatlara çeviren bir proje yer alıyor. Şimdiden PHP için oldukça kapsamlı bir başvuru klavuzu chm formatına çevrilmiş ve indirilmeye hazır. PHP programcılarının mutlaka elinin altında hazır olması gereken bir klavuz. Siteden indirirken sorun olursa buradan da indirebilirsiniz.