Mehmetcan Yegen tarafından yazılmış tüm yazılar

Perl ile web programlamaya giriş


perl

 

Perl ile web programlama yapabilmek için sunucunuzda perl yüklü olması gerekiyor. Para vermek istemiyor fakat perl dilini öğrenmek istiyorsanız evdeki bilgisayarınıza perl yükleyip denemelerinizi burada yapabilirsiniz. Perl dilinin nasıl yükleneceği ile ilgili çok sayıda kaynak mecvut, özellikle ingilizce olarak. İlerleyen zamanlarda belki ben de burada bununla ilgili bir anlatım yapabilirim.

Bu yazıda perl dilinin web programlama ile ilgili kısmına kısaca değineceğim ve verdiğim örneği perl destekleyen bir sunucu için vereceğim.

Öncelikle çok basit olan fakat hiçbiryerde bulamayıp sonradan öğrendiğim bir bilgiyi paylaşacağım: “Perl ile programlanmış web sayfası hangi uzantıda olmalıdır?”. Evet gerçekten bu sorunun cevabını net olarak hiçbiryerde bulamadım, en sonunda tesadüfen bir sitede rastgeldim ve .cgi olduğunu öğrendim. Aslında bazı yerlerde .pl olarak da bahsedilmiş fakat benim kullandığım hosting firması yüzünden mi bilmiyorum, .pl uzantıda attığım dosyaları perl olarak algılamıyor.

Öncelikle perl ile ekrana basit bir cümle yazdırmayı göstereceğim ve bunu web sayfası üzerinden yapacağız.

Burada önemli olan bir durum daha var ki, sunucunuzda perl’in nerede yüklü olduğunu bilmeniz. Genelde /usr/bin/perl adresinde yüklü olan perl bazen /usr/local/bin/perl adresinde de yüklü olabiliyor. Bunu öğrenmek için ssh aracılığı ile which perl komutunu girebilirsiniz, size perl’in hangi dizinde yüklü olduğunu söyleyecektir bu komutun verdiği çıktı. Perl’in /usr/bin/perl adresinde yüklü olduğunu varsayarak sayfanın başına koymamız gereken satırı yazacağım. Bunu yazdığımız bütün perl sayfalarında sayfanın en üstüne koymamız gerekiyor.


#!/usr/bin/perl

Bu satırı sayfanın başına yazdıktan sonra perl istemcisine bunun bir html sayfası olduğunu belirtmemiz gerekiyor, bunu da yazdığımız her html/perl sayfasının başına bir alt satıra ekleyeceğiz.


print "Content-type: text/htmlnn";

bunları ekledikten sonra sayfamızın üst kısmı şu şekilde gözükecek:


#!/usr/bin/perl

print "Content-type: text/htmlnn";

şimdi de ekrana bir yazı yazdıralım.


#!/usr/bin/perl

print "Content-type: text/htmlnn";

print "Merhaba turkacademyn";

Burada dikkat ettiyseniz print yani yazdırma komutunun içinde yazdırdığım cümlenin sonuna n şeklinde birşey ekledim. Bunun anlamı yeni bir satıra geçmek istediğimizi belirtmektir. Bunu eklememiş olsaydım yazdırdığım print komutları birleşik yazılmış gibi görülecekti.

Tabiki siteye index.cgi isminde dosya oluşturup içine bu komutları yazdırıp siteye atmayla bu iş bitmiyor. Bunu yaptığınızda muhtemelen “internal server error 500” şeklinde bir hatayla karşılaşırsınız.

Burada dikkat etmeniz gereken şey, kodları yazdığınız metin editöründe sayfa kodlaması kısmını “ascii” ya da “binary” şeklinde ayarlamanız ve yüklediğiniz dosyanın, dosya izinlerini 755 yapmanız gerektiğidir.

Sayfa kodlamasını şu yüzden ascii ya da binary olarak ayarlıyoruz, eğer bunu yapmaz da başka bir kodlama şeklini seçersek kullanılan metin editörü gizli olarak ek karakterler ekleyebiliyor sayfaya, bu da yazılan programın çalışmasını bozuyor. Bu her zaman hata verecek diye birşey yok fakat hata alabilirsiniz ascii ya da binary şeklinde kodlama yapmazsanız.

Sayfa iznine gelince dosya izinlerini 755 olarak ayarlamadığınız taktirde yazdığınız program çalışmayacaktır. Bu önemli fakat gözden kaçabilen bir adım aslında. Burada sorun olan şey her seferinde programı upload ettiğinizde sayfa izinlerinin 755 değil de başka bir standartta, izinlerini yeniden düzenleyebilmesidir. Bunu engellemek için netbeans’de bulunan, dosya izinlerini bulduğun gibi bırak şeklinde bir ayar var fakat netbeans ascii ya da binary desteklemiyor karakter seti olarak, yani netbeans’de çalışırken sayfa izinlerini düzelteyim derken karakter hatası yüzünden programınız çalışmayabilir.

Notepad++ güzel bir editör perl yazmak için fakat bunda da dosya izinleri sorunu oluyor, Notepad++ üzerinden ftp ye bağlanma eklentisini kullandığınızda her seferinde dosya izinleri 604’e düşüyor ve tekrar başka bir ftp clientinden bağlanıp dosya izinlerini 755’e ayarlamanız gerekiyor. Komodo edit ismindeki perl editörü de Notepad++ ile aynı durumda. Karakter kodlaması olarak tamam fakat dosya izinleri olarak bir çözüm yok.

Perl’de program yazarken bu tarz sorunlar karşınıza çıkabilir fakat dediğim işlemleri yaparsanız, hatasız sorunsuz bir şekilde ekrana yazı yazdırabilmeniz lazım, bu da bir başlangıçtır sonuçta.

Sayfaya Javascript kodu eklemek

Javascript kodlarını başka bir sayfadan da çağırabiliriz, script tagları içerisinde direk sayfaya da ekleyebiliriz.

Başka bir sayfadan çağırmak için

<script type="text/javascript" src="sayfaismi.js"></script>

Şeklinde sayfaism.js yerine sayfamızın bulunduğu adresi veya kod yazılan dosyada aynı dizinde bulunuyorsa direk dosyanın adını yazıyoruz. Başka bir sayfadan çağırmadan direk sayfa üzerinde javascript kodu yazmak için aşağıdaki gibi script taglarını kullanıyoruz. Örnek olarak document.write komutu ile ekrana turkacademy yazdıralım.

<script language="JavaScript">
document.write("turkacademy");
</script>

sayfaya jquery kütüphanesini hızlıca eklemek içinse aşağıdaki kodu kullanabilirsiniz
[js]
<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"><!–mce:2–></script>
[/js]

Php’de OOP (Nesne Yönelimli Programlama) ve class işlemleri

OOP denilince tüm programlama dillerinde olduğu gibi php’de de akla hiyerarşik yapı geliyor. Yani yazdığımız kodlar dümdüz tek bir sistemden oluşmak yerine, birbiri içinde iletişim kuran çeşitli sistemlerden oluşuyor.

Bunun çeşitli faydaları var. Öncelikle yazdığınız kodlar derli toplu oluyor, ve tabiki güvenlik olarak da gözle görülür bir fark yaratıyor. Yazdığınız fonksiyonları yetkilendirebiliyorsunuz, ister public yani heryerden erişilebilen, ister protected yani class ve türetilmiş diğer classlardan erişilen, isterseniz de private yani sadece o class içerisinden erişilen hale getiriyorsunuz. Ayrıca farklı classlar arasında da bir veri yalıtımı söz konusu, aynı isimde bir fonksiyon ya da değişkeni farklı classlarda tanımlarsanız, birbirini etkilemeden sorunsuz bir şekilde çalışıyor.

Öncelikle class oluşturmaya bir bakalım.

<?php

class turkacademy {

	function baslik(){
		return '<h1> Merhaba </h1>';
	}

	public function icerik(){
		return '<h2> turkacademy.com blog </h1>';
	}

	protected function yanmenu(){
		return 'yan menu içeriği';
	}

	private function baglan(){
                return 'veritabanı bağlantısı vs.';
	}

}

?>

Burada içerisinde bir kaç fonksiyon bulunan turkacademy isimli classımızı oluşturduk. Deneme amaçlı kodları kopyalayacaksanız aynı sayfa içerisine yazmanız gerekiyor, başka sayfada kullanacaksanız class kodlarınızın bulunduğu sayfayı diğer sayfaya include etmeniz gerekiyor. Şimdi bu classtan fonksiyon çağırmnaya bakalım.

<?php

$turkacademy = new turkacademy();
$turkacademy->baslik();

?>

Burada classı $turkadademy değişkenine atadım fakat siz başka isimde bir değişken de kullanabilirsiniz, class ile aynı isimde olması gerekmiyor bu değişkenin. Fonksiyonu çağırmak için örnekteki gibi ilkten bir değişkene new classismi(); şeklinde atıyoruz ondan sonra degiskenismi->fonksiyon ismi şeklinde çağırıyoruz.

Classlarda bir de extends özelliği var. Bu da oluşturulan classları bir nevi dallandırmaya yarıyor. Özelliği ne derseniz; extends kullanımı, ortak fonksiyonları barındıran birden fazla sayıda class oluşturabilmenize olanak sağlıyor. Yani bir class içerisinde bazı fonksiyonlar oluşturdunuz, ikinci oluşturduğunuz class’ın da aynı fonksiyonları içermesini istiyorsunuz. Kopyala yapıştır yaparak aynı fonksiyonları oraya aktarmak hem sizi yorar hem de sitenin yüklenme süresini artırır. Bunu engellemek için extends kullanıyoruz. Kullanımı şöyle:

class turkacademy extends bilgisayar {

	function baslik(){
		return '<h1> Merhaba </h1>';
	}

	public function icerik(){
		return '<h2> turkacademy.com blog </h1>';
	}

	protected function yanmenu(){
		return 'yan menu içeriği';
	}

	private function baglan(){
                return 'veritabanı bağlantısı vs.';
	}

}

Burada turkacademy class’ı daha önce oluşturduğumuz ve kodlarını include ettiğimiz veya aynı sayfada bulundurduğumuz bilgisayar classının kodlarını da kendisine dahil etmiş oldu. Yani artık turkacademy class’ı hem kendi fonksiyonlarını barındırıyor hem de bilgisayar classının fonksiyonlarını barındırıyor.

Bu yazıda oop programlama hakkında temel şeyleri anlatmaya çalıştım, oop programlama bir tekniktir ve daha ayrıntılı olarak ileride anlatabilirim ama oop hakkında bilgisi olmayan arkadaşlar bu anlattıklarımı kendileri de deneyerek çalışırlarsa daha sonraki derslerde veya kendi yapacakları uygulamalarda sorun yaşamazlar.

Php base64 ile veri şifreleme

Php’de base64 adında hazır bir şifreleme fonksiyonu bulunmakta. Bu fonksiyon zaman zaman yararlı olsa da herhangi bir anahtar kullanmadığı, tamamen geri döndürülebilir olduğu için şifrelemenin pek önemli olmadığı yerlerde kullanılır, yine de çok kullanışlı bir fonksiyon.

<?php

///Şifrelenecek veri
$veri = "Şifrelenecek metin.";
echo 'Şifrelenecek veri: ' . $veri . '<br />';

////Burada veriyi şifreliyoruz
$veri = base64_encode($veri);

///Burada şifrelemiş veriyi ekrana yazdırıyoruz
echo 'Şifreli metin: ' . $veri . '<br />';

///Burada şifreyi çözüyoruz
$veri = base64_decode($veri);

///Burada şifresi çözülmüş veriyi ekrana yazdırıyoruz.
echo 'Şifresi çözülmüş metin:' . $veri;

?>