Bu Blogda Ara
5 Temmuz 2010 Pazartesi
Php ile istenmeyen ip leri banlamak
$ip = $_SERVER['REMOTE_ADDR'];
$ipArray = preg_replace("#\r\n?|\n#","",file('IP.txt'));
foreach ($ipArray as $ipTest) {
if (substr_count($ip, $ipTest) != "0") {
header('location: http://google.com');
die();
}
}
?>
26 Haziran 2010 Cumartesi
Php de Yarum satırları Nasıl eklenir?
Bazen yazdığımız kodların hatırlanması ya da başka kişiler tarafından kontrol ve kolay anlaşılması için yorumlarda bulunabiliriz. Genellikle üç çeşit yolda yazılmakta. Bunların örneklerini aşağıdan takip edebilirsiniz.
Örnek 1 :
/*
Konu: PHP Programı
Yazar: phpdersleri.info
Tarih: 12.Ocak.2010
*/
?>Örnek 2 :
// Buraya yorumlarınızı yazabilirsiniz.
//Buraya yorumlarınızı dilediğiniz kadar yazabilirisiniz
?>Örnek 3 :
#Bu da başka bir yorum simgesi.
#bu şekilde yorumlara devam edebilirsiniz.
?>Şimdi gelelim kodlar arasında bu yorum satırlarının kullanılmasına. Aşağıda mantığının anlaşılması açısından basit bir örnek verilmiştir.
Örnek 4 :
//$a değişkenine merhaba kelimesini atadık.
$a="merhaba";
//echo komutu ile $a değişkenin taşıdığı değeri ekrana yazdırdık.
echo $a ;
?>Örnek 5 :
/* $a değişkenine 5 sayısını atadık
$b değişkenine 6 sayısını atadık
*/
$a=5; $b=6;
// burada if koşulu ile ekrana 5 sayısı 6 sayısından küçüktür yazdıracağız.
if($a>$b) {
echo "5 sayısı 6 sayısından büyüktür.";
}else{
echo "5 sayısı 6 sayısından küçüktür";
}
?>Konunun başında belirttiğimiz gibi kodlarımızın arasında açıklayıcı ya da hatırlama maksatlı yorumlar yazarız. Bunları PHP yorumlayıcıları göz ardı edeceklerdir.
23 Haziran 2010 Çarşamba
Php ile Nesne Yönelimli Programlamaya Giriş
PHP'den önce C++ veya benzeri bir dille uğraştıysanız, o zaman OOP (Object Oriented Programming) yani Nesneye Yönelik Programlama (NYP) ile tanışmışsınızdır. NYP ile daha önce uğraşmadıysanız gözünüzü biraz korkutabilir, ama aslında pek korkacak bir şey yok. NYP aslında sadece bir programlama yaklaşımıdır.
Mesela C yapısal bir programlama dili, daha sonra çıkan C++ ise nesne yönelimli bir dildir. NYP
Şimdi diyeceksiniz,yaw kardeşim yıllardır yazıyoz kod, her işimizi de yaptık, nerden çıktı bu nesneler? Ne gibi bi faydası var bunların bize?
NYP'nin getirmiş olduğu pek
- 1- Nesne kavramı,nesnelerin metod ve
özellikler içermeleriyle, artık programcının kendisine yüklemiş olduğu değişkenler,durumlar,fonksiyonlar arasında bulunan ilişkileri programcıdan alıp nesnenin depolamaözelliği sayesinde nesneye yükleyebiliyor. Programcı kendisine yüklemiş olduğu bu sorumluluğu,nesne kavramı ile halledebiliyor. - 2- Nesne kavramı gerçek yaşam problemlerini programlamaya aktarmada kolaylık getiriyor.
- 3- NYP, kalıtım
özelliği sayesinde, yazılan kod başka amaçlar için eközellikler eklenerek tekrar kullanılabiliyor. - 4- NYP,ile yazılan kod daha okunabilir ve anlaşılabilir oluyor.
- 5- NYP ve kalıtım programcıların kollektif çalşmalarına olanak sunuyor.
- 6- Zor problemleri sunduğu yaklaşım ile daha kolay ve
hızlı çözülebilir hale getiriyor.
Şimdi de bu yazdıklarıma bakarak diyeceksiniz,yaw neymiş bu NYP, iyice merak ettik... :-)
Aslında NYP daha
Nesne de nesne ? Nedir bu nesne?
Class'lar aslında değişkenler ve fonksiyonlardan oluşan paketler gibidirler.Değişkenlere '
Mesela
class ogrenci{
|
$murat = new ogrenci;
Artık hafızada bu class yapısının bir kopyası oluşturulup, $murat isimli değişkene atanmş oldu.Aynı şekilde
$mustafa = new ogrenci;
dediğimizde yine hafızada bir kopya daha oluşturulup $mustafa isimli değişkene atanıyor.
PHP ve Nesneler :
Yukarıda da bir giriş yaptığımız üzere artık soyut
Sınıf tanımlaması class kelimesi ile yapılır, tanımlama içinde sınıf metodları ve
class ogrenci {
//özellikler } |
$mustafa = new ogrenci; |
Bu arada dikkat ettiyseniz ogrenci sınıfının ogrenci isimli bir metodu var. Sınıf adıyla aynı isme sahip olan fonksiyonların NYP'da
1- Hafızada sınıf yapısının bir kopyası oluşturulacak
2- Constructor fonksiyon - yani ogrenci - çağrılacak ve ekrana 'Öğrenci oluşturuldu' yazılacaktır.
Şimdi NYP'ya biraz alştığımıza göre sınıf yapımızı daha düzgün bi şekle getirelim :
class ogrenci {
function ogrenci ($isim,$soyisim){
} |
Öncelikle şunu söyleyeyim constructor fonksiyonlar parametre kabul edebilirler,eğer constructor için parametre söz
Normalde class
Bilmemiz gereken bir iki nokta var:
1-Constructor fonksiyonlar nesne oluşturulduğunda otomatik çağrıldıkları için nesnenin ilk
2- C++ ve Java'da olduğu gibi destructor fonksiyonlar yoktur.
Kalıtım :
NYP'nin belki de en güzel
Kalıtım olayı PHP'de extends anahtar sözcüğü ile yapılır.Örneğin :
class ogrenci {
class liseli extends ogrenci{
// Böylece liseli adli ogrenci sinifinin bütün
|
Çok
1- 'liseli' sınıf kopyası hafızada oluşturulduğunda constructor fonksiyon olarak 'liseli' fonksiyonu çağrılır ve 'ogrenci' fonksiyonu çağrılmaz. Çünkü PHP4'de kural şöyledir :
a. Eğer sınıf adına sahip bir fonksiyon varsa onu çağır
b. Eğer yoksa taban sınıfın constructor fonksiyonunu çağır.
NOT:PHP3'de b kuralı geçerli değildir. Sadece a.kuralı geçerlidir.
2-üst sınıf içinde alt sınıf ile aynı isimde bir fonksiyon varsa, üst sınıfın fonksiyonu geçerlidir.
class a {
} |
3- Peki alt sınıfın aynı isimli bir fonksiyonunu
class a {
} |
AAABBB yazılacaktır.
Buraya kadar NYP,Class,PHP'nin NYP syntax'ını gördüğümüze göre şimdi de güzel bir örnek ile bilgilerimizi pekiştirelim...
Dosyalama
Böylece hem dosya
Şu
1- Dosyaya kayıt ekleyen
2- Dosyadan kayıt silen
3- Dosyada kayıt arayan
###################################################### class filemanager{
function update_file(){
|
Önce dosyamızın ve programımızın çalışma mantığı üzerine bir şeyler söyleyelim. Dosyamızda
Mustafa|Karabulut|Programcı'\r\n'Şahin|Gür|
Her kaydı \r\n karakterleri ile ayırıyoruz. Bu
function filemanager($file,$rsep="\r\n",$fsep="|"){
|
Constructor fonksiyon tek parametre,isteğe göre 2 veya 3 parametre ile çalışabiliyor.İlk parametre kesin verilmesi gereken dosya adı-dosyanın
Constructor'da dosya açılıp,bütün içeriği okunduktan sonra içeriği
$this->records=explode($rsep,$content);
Explode fonksiyonu kısaca,ikinci parametresi ile verilen stringi birinci parametredeki stringe göre parçalar ve her elemanı bir
Örneğin:
Örneğin:
$str="Mustafa#Karabulut#Sahin"; |
$yeni_str=implode("&",$dizi);
|
Diğer sınıf metodlarımız ise adlarından anlaşılacağı üzere
array_slice: Bu fonksiyon verilen bir
array_slice($eski_dizi,$baslangicindis,$kac_tane); |
Şimdi bakalım: $yeni_dizi değişkenine $
$yeni_dizi2,ise 2. elemandan itibaren 2 eleman alıyor, yani elemanları "Şahin" ve "Gür".
Son kullanımda ise değişik bir şey var,fonksiyona son parametre verilmemiş, eğer fonksiyona son parametre verilmezse,verilen 2. parametreden itibaren
$yeni_dizi3
array_merge : Verilen iki veya daha fazla
$ |
Oldukça basit bir kullanımı var di mi ?
Herneyse bu açıklamalardan sonra gelelim, sınıf yapımızı kullanan bir örnek yazmaya, aşağıdaki koda bir bakın:
//örnek kullanım
$filem=new filemanager("deneme.txt");
//her zaman bunu yaparak bitirmemiz gerekiyor |
Gördüğünüz gibi sınıf yapınısını bir kere yazdıktan sonra,sınıfı metodları kullanarak oldukça
Herneyse,bu örnek ile beraber, NYP'ya bir adım
function error_exists(){
|
Aynı şekilde diğer metodlarıda istenmeyen durumlara karşı koruyabilirsiniz.
Şimdilik bu kadar.
17 Haziran 2010 Perşembe
php de pathinfo() Fonksiyonunun kullanımı
$path_parts = pathinfo('/siteler/htdocs/index.html');
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; // PHP 5.2.0'dan beri.
?>
15 Haziran 2010 Salı
Php ile web sayfalarından Meta tag ları alma
function getLinksInfo($url) {
$web_page = file_get_contents($url);
$data['keywords']="";
$data['description']="";
$data['title']="";
$data['favicon']="";
$data['images']=array();
preg_match_all('#<title([^>]*)?>(.*)</title>#Uis', $web_page, $title_array);
$data['title'] = $title_array[2][0];
preg_match_all('#<meta([^>]*)(.*)>#Uis', $web_page, $meta_array);
for($i=0;$i<count($meta_array[0]);$i++) {
if (strtolower(attr($meta_array[0][$i],"name"))=='description') $data['description'] = attr($meta_array[0][$i],"content");
if (strtolower(attr($meta_array[0][$i],"name"))=='keywords') $data['keywords'] = attr($meta_array[0][$i],"content");
}
preg_match_all('#<link([^>]*)(.*)>#Uis', $web_page, $link_array);
for($i=0;$i<count($link_array[0]);$i++) {
if (strtolower(attr($link_array[0][$i],"rel"))=='shortcut icon') $data['favicon'] = makeabsolute($url,attr($link_array[0][$i],"href"));
}
preg_match_all('#<img([^>]*)(.*)/?>#Uis', $web_page, $imgs_array);
$imgs = array();
for($i=0;$i<count($imgs_array[0]);$i++) {
if ($src = attr($imgs_array[0][$i],"src")) {
$src = makeabsolute($url,$src);
if (getRemoteFileSize($src)>15000) array_push($imgs,$src);
}
if (count($imgs)>5) break;
}
$data['images']=$imgs;
return $data;
}
print_r(getLinksInfo("http://www.dizzin.com"));
dönen sonuç dizidir(array).
$gelen=getLinksInfo("http://www.dizzin.com");
echo $gelen['keywords'];
gibide değişkene alabilirsiniz