Windows 7 PHP 5.4 Apache 2.4.1 ve MySQL 5.5.22 kurulumu
64bit Windows 7 üzerinde php 5.4 apache 2.4.1 mysql server 5.5.22 ve phpmyadmin kurulumları ve konfigürasyonları üzerine iki satır yazmak istedim.
aslında PHP 5.4 sürümünü test etmek, gelen yeniliklere bakmak uzun süredir hep aklımdaydı. Genelde sağda solda bulduğum makaleleri okuyarak takip ediyordum en sonunda karar verip kurcalama işlemine girişmek istedim.
Bu yazıda tüm kurulum işlemlerini manual olarak gerçekleştireceğiz. (xampp, wamp v.s. kullanmayacağız)
Yazının başlığında belirtildiği gibi ilk olarak gerekli dosyaları download ederek işe başlayacağız.
PHP 5.4
http://windows.php.net/download/
VC9 x86 Thread Safe (2012-Feb-29 21:16:12)
Apache 2.4.1 ve php5apache2_4.dll
http://www.apachelounge.com/download/
httpd-2.4.1-win32.zip ve php5apache2_4.dll-php-5.4-win32.zip
MySQL Community Server 5.5.22
http://www.mysql.com/downloads/mysql/
Windows (x86, 64-bit), MSI Installer
(mysql-5.5.22-winx64.msi)
phpMyAdmin
http://www.phpmyadmin.net
3.4.10.1
İlgili linkleri kullanarak özelliklerini belirttiğim dosyaları download ettikten sonra klasör yapımızı oluşturalım. Siz kendi keyfinize göre hareket edebilirsiniz.
c:\server
-> apache
-> php
-> mysql
Ben yukarıdaki içiminde bir klasör yapısı oluşturdum. Şimdi arşiv biçiminde olan dosyaları ilgili klasörler içerisine çıkartalım.
httpd-2.4.1-win32.zip isimli dosya içerisindeki Apache24 klasörünü c:\server\apache içine
php-5.4.0-Win32-VC9-x86.zip dosyasında bulunan dosyaları c:\apache\php içine
ve php5apache2_4.dll-php-5.4-win32.zip dosyası içerisinde bulunan php5apache2_4.dll isimli dll'yi C:\server\php\ içerisine çıkaralım.
Bu dll Apache'nin PHP 5.4 ile çalışması için gereklidir. Eğer PHP 5.4 içerisine bakarsanız php5apache2_2.dll ve php5apache2_3.dll dosyalarını yani apache 2.4.1 için gerekli olan dll'yi göremeyeceksiniz.
PHP 5.4 ile ilgili gereken ayarları yapmak için C:\server\apache\conf içerisinde bulunan httpd.conf dosyasını açıyoruz.
ServerRoot "c:/Apache24" satırını
Not: Apache serverı servis olarak kurmak yerine httpd.exe komut istemi ile açarak çalıştırmayı seçtim çünkü hali hazırda kurulu bir wamp (Windows Apache MySQL PHP) mevcut bulunmakta. (Sanıyorum sizde de aynı durum geçerlidir)
ServerRoot "c:/server/apache"
olarak değiştirip
#LoadModule ile başlayan satırların en sonuna aşağıdaki satırı ekleyerek
LoadModule php5_module c:/server/php/php5apache2_4.dll
dll adresimizin sistemimizde bulunduğu adresi gösteriyoruz.
#ServerName www.example.com:80 satırını
ServerName localhost
DocumentRoot "c:/Apache24/htdocs"
<Directory "c:/Apache24/htdocs">
satırlarını
DocumentRoot "c:/server/apache/htdocs"
<Directory "c:/server/apache/htdocs">
DirectoryIndex index.html satırını
DirectoryIndex index.html index.php
ScriptAlias /cgi-bin/ "c:/Apache24/cgi-bin/" satırını
ScriptAlias /cgi-bin/ "c:/server/apache/cgi-bin/"
<Directory "c:/Apache24/cgi-bin"> satırını ise
<Directory "c:/server/apache/cgi-bin">
şeklinde değiştirdikten sonra
<IfModule mime_module> tagı içerisine
AddHandler application/x-httpd-php .php
satırını ekliyoruz.
ben AddType application/x-gzip .gz .tgz satırının hemen altına ekledim.
ve son olarak php.ini dosyamızın bulunduğu klasörün yerini httpd.conf dosyamıza ekliyoruz. Ben en alt satıra ekledim.
PHPIniDir "c:\server\php"
Şimdi PHP 5.4 için yapmamız gereken editleme işlemlerine başlayalım.
c:\server\php klasörüne baktığınızda içerisinde php.ini yerine iki adet dosya göreceksiniz. Bunlar php.ini-development ve php.ini-production dosyalarıdır.
php.ini-development dosyasının ismini php.ini olarak değiştirin ve bir metin editörü ile açın.
extension_dir = "ext" satırını bulup
extension_dir = "c:\server\php\ext"
olarak değiştirin ve mysql ile iletişim kurulması için gerekli olan aşağıdaki dll dosyalarının başında bulunan ';' noktalı virgülleri kaldırın.
extension=php_mysql.dll
extension=php_mysqli.dll
ve dosyayı kaydedin.
Not: Kullanmak istediğiniz diğer extensionlar için aynı işlemi uygulayın. (curl v.s.)
Şimdi sıra MySQL Community Server 5.5.22 kurulumunu gerçekleştirmekte. İndirdiğimiz mysql-5.5.22-winx64.msi dosyasına çift tıklayarak işe başlıyoruz.
choose setup type kısmından Custom'ı seçin ve browse butonunu kullarak mysql server'ın C:\server\mysql\ dizinine kurulmasını sağlayın.
Kurulum tamamlandıktan sonra Launch the MySQL Instance Configurator Wizard'ı seçip Finish butonunu tıklıyoruz.
MySQL Server Instance Configuration Wizard penceresinin açılmasını sağladıktan sonra.
next butonu ile devam ediyoruz.
Detailed Configuration seçeneğini seçerek ilerliyoruz.
Develper machine seçiyoruz. Development için kullanıcaz.
Multifunctional Database seçiyoruz.
next ile devam ediyoruz.
Decision Support seçip next (20 bağlantı development için yeterli)
Enable Strict Mode seçili olmasına dikkat edin. Ve server için port numarası belirtin. Ben default olanı 3306 kullanıyorum.
Character Set seçin. Ben utf-8 kullanıyorum.
Windows servisi olarak kurup mysql bin klasörünü Windows PATH eklemesini seçiyoruz. Bu arada ben Launch the MySQL Server automatically kaldırıyorum.(Tercih sizin)
mysql server için root şifresi seçiyoruz.
Execute butonu ile kurulumu bitiriyoruz.
Şimdi Hem serverı test edelim hemde php dosyalarımızın apache server tarafından yorumlanıp yorumlanmadığına bakalım.
İlk olarak c:\server\apache\bin klasörü içerisine giderek httpd.exe dosyasını çalıştırıp Apache serverı başlatın.
Not: Command Prompt (Komut istemi, cmd.exe) kullarak bu işlemi gerçekleştirin. Windows 7'de istediğiniz bir klasör içinde commad prompta erişmek için SHIFT tuşuna basılı olarak sağ click yapın ve açılan menüden open command window here seçeneğini kullanın.
Daha sonra c:\server\apache\htdocs klasörü içerisine info.php isimli bir dosya oluşturup
<?php phpinfo(); ?>yazıp kaydedin ve tarayıcınız http://localhost/info.php adresini açın. Eğer işlem başarılı ise sonuçları fonksiyonun çıktısından göreceksiniz.
Son olarak phpMyAdmin kurulumunu yapalım. 3.4.10.1 sürümünü indirmiştik. C:\server\apache\htdocs\phpmyadmin klasörü içerisine çıkartın.
Daha sonra http://localhost/phpmyadmin/ adresine ulaşıp kullanıcı adı ve parolanızı girdiğinizde kurulum tamamlanmış olacaktır.
Eğer yukarıdaki resimdeki Web Sunucusu bölümüne göz atarsanız tüm işlemlerimizin başarılı bir biçimde gerçekleştiğini göreceksiniz.
Sıcağı sıcağına bir yazı oldu. Pek kontrol edemedim (: eksik gedik varsa affola.
Php de diziyi stringe çevirmek dönüştürmek
Php ile dizileri String'e çevirmek için bir fonksiyon yazdım. Parametre olarak bir adet dizi (çok boyutlu olabilir) ve birde ayraç alır. Ayraç ($ayrac değişkeni) dizi elemanlarını stringe dönüştürürken elemanların birbirinden ayrılması içindir.Boşluk,nokta,yada hiçbirşey olabilir varsayılan olarak virgüldür.
Örnekte " / " kullandım.(Üç karakter)
function arr2Str($arr=array(),$ayrac=',')
{
$str="";
$keys=array();
foreach($arr as $k=>$v)
{
$keys[]=$k;
}
$t=count($keys);
if($t>0)
{
for($i=0;$i<$t;$i++)
{
if(is_array($arr[$keys[$i]]))
{
$str.= $ayrac.arr2Str($arr[$keys[$i]],$ayrac);
}else
{
$str.= $ayrac.$arr[$keys[$i]];
}
}
}
unset($t,$arr,$keys);
return trim($str,$ayrac);
}
Kullanımı:
echo arr2Str(array(array(0,1,2,'Üç'=>array(4,5,6))),' / ');Çıktı:
0 / 1 / 2 / 4 / 5 / 6Fonksiyon Ubuntu 11.04 üzerinde çalışan PHP Version 5.3.5-1 ve Apache/2.2.17 server üzerinde test edilmiştir.
Lafın özü php de diziyi string'e dönüştürmek, verilen çok boyutlu diziyi stringe çevirmek için bu fonksiyonu kullabilirsiniz.
Not: Eğer fonksiyonu kullanacağınız php dosyasınızda Türkçe karakter sorunu yaşarsanız, Dosyanızın utf-8 biçiminde kodlanmış olarak kaydedildiğinden ve aşağıdaki header bilgisini sayfanızın en üstüne eklenmiş olduğundan emin olun.
Recursive (Kendini çağıran bir fonksiyondur) Eğer fonksiyonun ismini değiştirip kullanmak isterseniz aynı işlemi fonksiyon içerisinde de gerçekleştirin aksi halde çalışmayacaktır.
header("Content-type:text/html; Charset=utf-8");
Bir sitenin meta taglarını php ile alın
Eğer bir websayfasının meta taglarını php ile almak isterseniz bu web sayfasının meta taglarını php ile alıp okumak için get_meta_tags() fonksiyonundan
yararlanabilirsiniz. Bu işlemi curl kütüphanesi, file_get_contents() v.s.
fonksiyonları ilede yapabiliriz. Fakat öyle kullandığımızda ilk olarak
meta taglarını almak istediğimiz sayfaya bağlanıcaz ve aldığımız html verilerini
bir şekilde parse etmemiz gerekecek. Bunun içinde regular expression v.s kullanıp işi uzatmış oluruz.
<?php
$url='http://www.linux.com';
$arr=get_meta_tags($url);
echo '<pre>'.print_r($arr,true).'</pre>';
?>
Php fonksiyonumuzdan meta taglarını içeren html data parse edildikten sonra dizi (array) tipinde $arr isimli değişkenimizde saklanmıştır. Fonksiyon dönüş değeri
dizi (array) olduğu için her metatag'a ait değer dizimizde kendi tag ismine ait anahtarda saklanmaktadır.
Örneğin echo $arr["keywords"]; yazdığımızda sadece bir metatag olan keywords bilgisini yazdırmış oluruz.
Kodu çalıştırdığınızda alacağınız ekran görüntü şöyle olacaktır.
Ubuntu ve php-gtk2 ile ilk uygulama
Eğer hatırlarsanız Ubuntu üzerinde php-gtk2 nasıl kurulacak yazmıştım. Php-gtk2 ile birlikte php kullanarak
grafik arayüzü olan basit masaüstü programları geliştirebiliyoruz. Gelin php-gtk2 ile ubuntuda basit bir uygulama yapalım.
#!/usr/bin/php5
<?php
$pencere = new GtkWindow();
$pencere->set_size_request(500,500);
$pencere->set_title('ilk php-gtk2 denemesi');
$pencere->connect_simple('destroy',array('Gtk','main_quit'));
$etiket = new GtkLabel('Merhaba Dunya');
$pencere->add($etiket);
$pencere->show_all();
Gtk::main();
?>
1: ilk olarak pencere isminde bir GtkWindow nesnesi oluşturduk
2: Oluşturduğumuz pencerenin yükseklik ve genişlik değerlerini verdik
3: Penceremizin başlığında ne yazacağını belirttik.
4: Programımızı çalıştırdıktan sonra temiz bir biçimde kapatabilmek için Gtk::main_quit() den yararlandık.
Aksi halde penceremizin kapat butonuna tıkladığımızda programımız kapanmayacak (Pencere kapanmış olsa dahi) ve arka planda çalışmaya devam edecektir.
5: GtkLabel'den yararlanıp etiket isminde bir adet label oluşturduk ve içerisine Merhaba Dunya yazdık.
6: pencere nesnemizin add özelliği ile oluşturduğumuz etiketi penceremize ekledik.
7: penceremizdeki tüm nesneleri görüntülenebilir(visible) yaptık.
8: Bu satır ilede programımızın başlamasını sağlayıp, Programda gerçekleştirilen aktiviteleri (Kullanıcının yaptığı tıklamalar, girdiği bilgiler v.s ) kontrol etmesini söyledik.
Php-gtk2 ile yazdığımız programı çalıştırmak için programımızı chmod +x ile çalıştırılabilir yapıyoruz. Daha sonra ./dosyaismi.php <~ENTER~>
Eğer buraya kadar bir sorunla karşılaşmaz ve programı başarılı bir şekilde çalıştırırsak ekran görüntümüz aşağıdaki gibi olacaktır.
Eğer 4. satırda Gtk::main_quit() kısmına takıldıysanız aslında orda yapılan olay şu. 4. satırı aşağıdaki gibi tekrar yazın.
$pencere->connect_simple('destroy','kapama_fonksiyonu');
Şimdide kapama_fonksiyonunu yazalım.
function kapama_fonksiyonu()
{
Gtk::main_quit();
}array('Gtk','main_quit') satırı yerine kapama_fonksiyonu() isimli fonksiyonun atanmış olduğunu görüyorsunuz.
İlk yazdığımız programdaki 4. satır ile aynı işi yapmış olduğunu göreceksiniz.
Kapat butonuna tıklandığı zaman, programımız tarafından yapılacak olan işlemleri aklınızın karışmaması için uzatarak yazdım.
Ubuntu Server Apache ve Php versiyonlarını gizleyin
Ubuntuda Sunucunuzun güvenliği için Apache ve Php versiyonlarını ziyaretçilerinizden gizleyin. Bunun için yapmanız gereken Apache ve Php'nin konfigürasyon ayarlarında ufak bir iki değişiklik.
İlk olarak Apache sunucumuzun versiyon numarasının ziyaretçilere gönderilmesini engelleyelim.
Eğer Ubuntu 9.04 kullanılıyorsanız ve Apache'yi depodan kurduysanız versiyonu gizlemek için ayarları değiştireceğiniz conf dosyanız /etc/apache2/conf.d/ klasörü içerisinde security ismi ile bulunmakda.
security dosyanızı root yetkisi ile bir metin editörü açıp örn:// sudo nano security
#ServerSignature Off
ServerSignature On
satırlarını bulun ve #ServerSignature Off satırının başındaki diyez (#) işaretini kaldırıp, ServerSignature On satırının başına ekleyin.
Yeni ayarınız şu şekilde görünmeli.
ServerSignature Off
#ServerSignature On
Daha sonra aşağıdaki komut ile apache web serverınızı resetleyin.
sudo /etc/init.d/apache2 restart
Fakat curl kütüphanesinin header özelliği ile halen sunucu bilgileriniz gitmekte.
nmap -sV localhost şeklinde sisteminizi tarayan kötü niyetli birisi aşağıdaki bilgilerede erişebiliyor. :)
Interesting ports on 127.0.0.1:
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.2.11 ((Ubuntu) PHP/5.2.6-3ubuntu4.2 with Suhosin-Patch)
Devam edelim.
Tekrar conf.d klasörü içerisindeki security dosyasını root yetkisi ile açıp bu seferde aşağıdaki ServerTokens satırlarını editleyelim ve sonuçları test edelim.
#ServerTokens Minimal
ServerTokens Full
Satırlarını
ServerTokens Prod
#ServerTokens Full
yapalım ve sunucumuzu resetleyelim.
HTTP/1.1 200 OK
Date: Wed, 16 Sep 2009 00:34:33 GMT
Server: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.2 with Suhosin-Patch
Vary: Accept-Encoding
Content-Length: 5122
Content-Type: text/html;charset=UTF-8
Olan header bilgisi
HTTP/1.1 200 OK
Date: Wed, 16 Sep 2009 00:36:04 GMT
Server: Apache
Vary: Accept-Encoding
Content-Length: 5122
Content-Type: text/html;charset=UTF-8
şekline dönüştü. :) birde nmap -sV komutu ile sistemimizi test edelim.
Interesting ports on 127.0.0.1:
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd
Gördüğünüz gibi hem işletim sistemimizi (OS) hemde Apache versiyonumuzu gizledik. Son olarakda php.ini dosyamızı açıp
expose_php = On satırını expose_php = Off olarak değiştirelim.
php.ini dosyamız Ubuntu local web serverımızda /etc/php5/apache2/ dizini içerisinde. Bir metin editörü ile root yetkisi ile açıp değişikliğinizi yaptıkdan sonra apache sunucunuzu resetleyin.
Php ve GD kütüphanesi kullanımı
Bu yazımda Php GD kütüphanesini inceleyip GD ile basit grafikler/resimler oluşturmaya deyineceğim. GD kütüphanesi default olarak gelmediyse ilk olarak bu kütüphaneyi sisteminize eklemelisiniz. Dinamik resimler oluşturmamıza imkan sağlayan bu ANSI C kütüphanesi ile jpeg,png,wbmp,xbm,gif formatında resimler oluşturabilmekteyiz. Sanıyorum önceden Gif formatında kullanılan LZW compression algoritmasının copyright sebeplerinden ötürü GD ile Gif formatı kullanılamıyordu.
Resim oluşturacığımız için tarayıcının bunu resim olarak algılamsı gerekmekte, bu yüzdende header() fonksiyonu ile default text/html olan Content-type image/png olarak değiştiriyoruz. Aksi halde GD ile oluşturulan resim browser tarafından resim olarak algılanmaz. İlk oluşturacağımız image png formatında olacak.
Php ile GD kütüphanesini kullanarak resim oluşturmak için imagecreate() fonksiyonundan yararlanıyoruz. Bu fonksiyona oluşturacağımız resmin en ve boy değerlerini parametre olarak giriyoruz ve boş bir resim oluşturmuş oluyoruz.<?
header("Content-type:image/png");
$en=300;
$boy=300;
$resim=imagecreate($en,$boy);
?>
Yukarıdaki kodları çalıştırdığınızda muhtemelen tarayıcı farklılıklarına göre ya kırık linke sahip bir resim görüntüsü alacaksınız yada o anda kullandığınız url yazacak ve resim olup olmadığı anlaşılamayan bir çıktı alacaksınız.
GD kütüphanesi ile oluşturduğumuz resmi boyamak için ImageColorAllocate() fonksiyonundan yararlanıyoruz. Üç adet argüman alan bu fonksyiona sırası ile red,green,blue (RGB) cinsinden değerleri integer tipinde yada hexadecimal tipinde giriyoruz.
ImageColorAllocate($resim, 0,0,255); maviye denk gelmektedir.
Daha sonra ise yapmamız gereken bu ayarlar ile imagePNG() fonksiyonunu kullanarak bir png resim oluşturmak.<?
header("Content-type:image/png");
$en=300;
$boy=300;
$resim=imagecreate($en,$boy);
$arkaplan=ImageColorAllocate($resim, 0,0,255);
imagePNG($resim);
?>
300*300 png formatında bir resim mavi arkaplan rengi ile çıktı olarak browserımıza basıldı. Bitmedi Php ve Gd ile oluşturduğumuz resimlere şekiller çizebilir ve üzerlerine yazılar yazabiliriz. Şimdi oluşturduğumuz resim üzerine bir çizgi çizelim. Bunun için GD kütüphanesinin Imageline() fonksiyonundan yararlanıcaz. fonksiyon şu şekilde parametre almaktadır.imageline( $image, int $x1, int $y1, int $x2, int $y2, int $color );
Oluşturduğumuz 300*300 daireye beyaz çapraz bir çizgi çizelim.$beyaz=imageallocatecolor($resim,255,255,255);
imageline($resim,0,0,300,300,$beyaz);
imageline() fonksiyonunu kullanırken x ve y koordinatlarından faydalanmaktayız. x ve y koordinatları sol üst köşeden (0,0) değerleri ile başlamaktadır. x2 ve y2 ise ilk koordinatdan x kadar sağ ve y kadar aşağıyı ifade eder. Eğer sadece üstden 10px bir yatay çizgi çizmek isteseydik imageline($resim,0,10,300,10,$beyaz); şeklinde bir tanımlama yapacaktık.
Kodlarımızın son halini toplu bir biçimde gözden geçirebilirsiniz.<?
header("Content-type:image/png");
$en=300;
$boy=300;
$resim=imagecreate($en,$boy);
$arka=ImageColorAllocate($resim, 0,0,255);
$beyaz=ImageColorAllocate($resim,255,255,255);
imageline($resim,0,0,300,300,$beyaz);
imageline($resim,0,10,300,10,$beyaz) ;
imagePNG($resim);
imagedestroy($resim);
?>
Bu arada imagedestroy() fonksiyonu ile oluşturduğumuz resmi bellekden temizliyoruz. imageline fonksiyonunu bir döngü içerisinde kullanarak oluşturduğunuz resim üzerinde istediğiniz aralıklarda birden fazla çizgiler çizebilirsiniz.
Bu işlemden sonra gelin şimdide Php ve GD kütüphanesini kullanarak oluşturduğumuz resimlerin üzerlerine yazı yazalım.
imagestring() fonksiyonu ile oluştuğumuz resmin üzerine yazılar yazabiliriz. Fonksiyonun aldığı argümanlar şöyledir.
bool imagestring ( resource $image, int $font, int $x, int $y, string $string, int $color ) bu fonksiyonda da koordinatlar imageline() fonksiyonu gibidir. Resmin üzerinde kullanacağınız font büyüklüğü ise default olarak 1 den 5'e kadar olan değerler ile sınırlandırılmıştır.
Küçükten büyüğe doğru font büyüklüğü artmaktadır. Şimdi yukarıdan 150px aşağıya ve resmin ortasına gelecek bir yazı yazalım.
imagestring($resim,3,150,150,"webcodez.blogspot.com",$beyaz);
Burada ilk olarak $resim değişkenimizi referans olarak verdik sonra 1-5 arası olan font büyüklüğünü girdik daha sonra yazımızın ilk harfinin başlayacağı x ve y koordinatlarını girip $beyaz değişkeni ile yazımızın hangi renkte olacağını belittik.<?
header("Content-type:image/png");
$en=300;
$boy=300;
$resim=imagecreate($en,$boy);
$arka=ImageColorAllocate($resim, 0,0,255);
$beyaz=ImageColorAllocate($resim,255,255,255);
imageline($resim,0,0,300,300,$beyaz);
imageline($resim,0,10,300,10,$beyaz) ;
imagestring($resim,2,150,150,"webcodez.blogspot.com",$beyaz);
imagePNG($resim);
imagedestroy($resim);
?>
Bu kısma kadar herşey güzel GD kütüphanesi ile png formatında bir resim oluşturduk üzerine çizgiler çizip yazımızı yazdık. Fakat bu fontun gözünüze pek hoş gelmediğinin farkındayım.
GD ile True type fontlarıda kullanabiliyoruz. İstediğimiz bir true type font ile resmimiz üzerine yazı yazmak için ImageTTFText() fonksiyonunu kullanabilirsiniz. GD kütüphanesi ile projenizde grafikler oluşturabilir yada captcha gibi güvenlik uygulamaları yapabilirsiniz.
Bu yazı sadece GD ile tanışmak ve bu kütüphanenin basit bir iki özelliğini anlatmak için yazılmıştır.
Xss'in önüne geçin PHP_SELF ve PATH_INFO değerlerini kontrol edin
$_SERVER dizisi içerisinde bulunan PHP_SELF anahtarlı dizi elemanı eğer filtrelenmez ise Xss açığına sebebiyet vermektedir. Örneğin POST edilecek olan formunuzun action kısmında <?php echo $_SERVER['PHP_SELF']; ?> biçiminde bir tanımlama yaptıysanız, bu bölüm kötü niyetli kişilerce değiştirilebilmektedir. PHP_SELF değerinden sonra / işareti kullanıldığında PHP_SELF anahtarına sahip dizi elemanı bölü işaretinden sonra gelen değerleride saklamaktadır.
Örneğin $_SERVER['PHP_SELF'] kullandığınız sayfa ismi post.php ise ve adres çubuğundan www.asd.com/post.php adresine girdiğinizde PHP_SELF değeri /post.php olacaktır. Birde şunu deneyin www.asd.com/post.php/abc PHP_SELF değişkeninin bu seferde /post.php/abc değerini alacağını görürsünüz. Peki ya kötü niyetli birisi / işaretinden sonra <script>alert('XSS SALDIRISI')</script> yazdığında ne olacak? Tabikide <script> tagları arasındaki javascript kodları çalışacaktır. Peki isteminiz dışında çalışan bu javascript kodları ne gibi güvenlik açıkları oluşturur? Hatırlayın hotmail accountlarının xss kullanılarak nasıl ele geçirildiğini. session ve cookie bilgileriniz çalınarak sizin bilgileriniz ile login olarak sisteminizin yönetimini ele geçirebilirler yada daha farklı saldırılar olabilir. O yüzden PHP_SELF yerine $_SERVER['SCRIPT_NAME']; kullanabilir yada htmlentities() fonksiyonu gibi fonksiyonlardan yararlanarak veyahutda kendi fonksiyonunuzu oluşturarak bu değeri filtreleyebilirsiniz. PHP_SELF için geçerli olan yazdıklarım PATH_INFO indisli dizi elemanı içinde geçerlidir. PATH_INFO değişkeni / işaretinden sonra değer alır ve PHP_SELF gibi / işaretinden sonra gelen bilgileri saklar.
Ubuntu üzerinde magic_quotes_gpc'yi kapatalım
Win platformdayken yada diğer hazır bütünleşik lamp işlevi gören programlarda basit arayüzler sayesinde local sunucumuzu istediğimiz şekilde konfigüre edebilmekteyiz. Özellikle windows ortamda sıklıkla kullandığım Wamp oldukça basit bir arayüze sahip.
Şu günlerde Ubuntu üzerinde geliştirdiğim bir uygulamada magic_quotes_gpc'nin açık olması test aşamasında sıkıntı oluşturdu.
Eğer aynı dertden muzdarip iseniz aşağıdaki komut ile php.ini dosyasını açıp magic_quotes_gpc = On satırını Off şeklinde değiştirip apache serverı resetliyoruz.
magic_quotes_gpc nedir derseniz bu özellik sql injection ataklarına karşı GET, POST, COOKIE ile gelen bilgilere addslashes() fonksiyonu ile "\" karakterini etkilemektedir. Bildiğim kadarı ile Php6 ile bu özellik kalmakta.
Ayrıca bu özellik sürekli olarak trafiği modifiye ettiğinden performans kayıplarınada neden olmaktadır.sudo gedit /etc/php5/apache2/php.ini
magic_quotes_gpc = On
magic_quotes_gpc = Off
sudo /etc/init.d/apache2 restart
Ubuntu 9.04 LAMP kurulumu
İlk olarak LAMP nedir diyorsanız LAMP Linux, Apache, Mysql, Php (Perl,Python) 'nin başharflerinden oluşan bir kısaltmadır. Windows içinse WAMP gibi bir kısaltma kullanılır. Hatta windows ortamında wamp adında içerisinde tüm modüllerin olduğu bir setup dosyasıda vardır.
Şimdi kuruluma başlamadan evvel uçbirimi açalım. Uçbirime Uygulamalar/Donatılar/ menüsünden erişebilirsiniz. Ubuntu 9.04 üzerindeki LAMP kurulumuna uçbirim ile devam edeceğiz.
sudo apt-get update komutu ile güncelleme yapalım ve Apache serverı kurarak işe başlayalım.
sudo apt-get install apache2
Komutunu uçbirimden girerek apache2'yi sistemimize indirip kurması talimatını verelim. Kurulum bittikten sonra tarayıcımızı açıp http://localhost adresine gidelim. Eğer It works! yazısını gördüysek, /var/www dizini içerisindeki index.html dosyası local sunucumuz tarafından yorumlanmaktadır.
Şimdi ise Php dosyalarımızın Apache tarafından yorumlanabilmesi için Php kuralım.
sudo apt-get install php5 libapache2-mod-php5
Kurulum bittikten sonra Apache'nin kurduğumuz Php5'i tanıması ve php dosyalarımızı çalıştırması için resetlememiz gerekiyor.
sudo /etc/init.d/apache2 restart
Komutunu kullanarak resetledik. Şimdi ise /var/www dizini içerisinde deneme.php dosyası oluşturalım. /var/www içine girdik mouse sağ tuşu ile tıkladık fakat Dizin oluştur / Belge oluştur gibi menüler çıkmadı ama neden?

/var dizini içindeyken /www dizinine sağ tıklayıp özellikler menüsünü seçtiğimizde açılan pencereden Erişim Hakları bölümüne geldiğinizde bu klasöre sadece root kullanıcısı tarafından erişilebileceğini görmüşsünüzdür. Dosyalarımızın ve Dizinimizin sahibini değiştirmek için chown, grubunu değiştirmek içinse chgrp komutlarından faydalanırız.
sudo chown -R kullanıcı-adınız /var/www
Komutunu uçbirimden girip dizin özelliklerine baktığınızda farkı görebilirsiniz.

Şimdi www dizini içerisinde ddeneme.php dosyasını oluşturup içerisine phpinfo(); yazıp kaydedin ve deneyin. http://localhost/deneme.php
Dinamik siteler yapmak için scriptlerimizde veritabanları kullanırız. Mysql ücretsiz bir veritabanı sunucusudur. Şimdide mysql-server kurulumunu yapalım.
sudo apt-get install mysql-server
NOT: Ubuntu üzerinde kurulum yaparken "Devam etmek istiyor musunuz [E/h]?" sorularına eğer "E" harfini girdiğinizde programdan çıkıyorsanız yada hata alıyorsanız "Y" harfini kullanarak tekrar deneyin.
Kurulum aşamasında aşağıki gibi bir pencere gelecek burada mysql için root şifresi girmeniz istenecektir. Burada root şifrenizi girin.

Phpmyadmini kuralım.
sudo apt-get install phpmyadmin
Gelecek ekrandan apache2 yi seçerek onaylıyoruz. Sonrasındaki ekranda ise tekrar Evet diyoruz.

Mysql-Server kurulumunda girdiğmiz root şifremizi giriyoruz.

http://localhost/phpmyadmin
adresine gittiğimizde eğer phpmyadmin'e ulaşamıyorsak
sudo gedit /etc/apache2/apache2.conf
komutu ile apache2.conf
dosyasını açıp içerisine
Include /etc/phpmyadmin/apache.conf
satırını ekliyor ve apacheyi resetliyoruz. Ben ServerRoot satırının hemen altına ekledim.
ServerRoot "/etc/apache2"
Include /etc/phpmyadmin/apache.conf
şeklinde.
Sonrasında http://localhost/phpmyadmin adresine gittiğinizde kurulduğunu göreceksiniz.
Ubuntu 9.04 üzerindeki local serverımıza curl extensionunuda kuralım.
sudo apt-get install php5-curl
ve sonrasında Apache'yi resetliyoruz.
Ubuntu 8.10'da PHP-GTK 2.0.1 Kurulumu
Bbu yazımda Ubuntu 8.10 üzerinde PHP-GTK 2.0.1 kulumunu anlatmaya çalışıcam.
İlk olarak bu adresten php-gtk-2.0.1'i indiriyoruz.
Ben /home/r00t/ dizinine indirdim. Sonrasında indirdiğimiz arşivi tar -zxvf php-gtk-2.0.1.tar.gz komutu ile açarak cd php-gtk-2.0.1 ile içerisine girelim. Bu adımlardan sonra Ubuntu üzerinde php-gtk 2.0.1 kurmak için yapmamız gerekenler,
./buildconf
./configure
make
sudo make install
Komutlarını sırası ile uçbirimden girmekten ibaret. Eğer php-gtk kurulumunda hatalar aldıysanız okumaya devam edin :)
Ubuntu üzerinde php-gtk kurulumu için php sürümünüzün 5.1 yada daha yüksek olması gerekli. Eğer LAMP kurulumunu anlattığım biçimde gerçekleştirdiyseniz php sürümünüz 5.2.6 olacaktır. Ayrıca sisteminizde php5-cli paketi kurulu olmalıdır.
NOT:
Bunun yanında libglade2-dev, libglademm-2.4-dev, libgladeui-1-dev, libgtk2.0-dev, php5-dev, php5-gd paketleri php-gtk 2.0.1 kurarken bende önceden kurulu bulunmaktaydılar.
O yüzden eğer sorunlarla karşılaşırsanız anlattığım kurulum işlemlerini, bu paketlerden sizde olmayanları kurarak tekrar deneyin. Konumuza gönelim.
Şimdi ilk olarak/usr/share/aclocal dizinine gidiyoruz ve
su
Parola: ile root olarak giriş yapıp aşağıdaki komutu yazıp entera basıyoruz.
cat lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4 >> libtool.m4
Aksi halde:
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
configure.in:77: warning: LTOPTIONS_VERSION is m4_require'd but not m4_defun'd
aclocal.m4:2912: LT_INIT is expanded from...
aclocal.m4:2947: AC_PROG_LIBTOOL is expanded from...
configure.in:77: the top level
configure.in:77: warning: LTSUGAR_VERSION is m4_require'd but not m4_defun'd
configure.in:77: warning: LTVERSION_VERSION is m4_require'd but not m4_defun'd
configure.in:77: warning: LTOBSOLETE_VERSION is m4_require'd but not m4_defun'd
configure:5174: error: possibly undefined macro: m4_ifval
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
configure:8184: error: possibly undefined macro: _LT_SET_OPTIONS
configure:8184: error: possibly undefined macro: LT_INIT
Bu hatalardan kurtulamıyoruz. https://bugs.launchpad.net/ubuntu/+source/php5/+bug/262251
Daha sonra php-gtk-2.0.1 dizinimize gidip,
./buildconf --with-phpize=/usr/bin/phpize5
./configure --with-php-config=/usr/bin/php-config5
make
sudo make install
komutlarını giriyoruz uçbirimden. Herşey tamamsa php-gtk-2.0.1 dizini içindeki demos klasörüne geçip
chmod +x phpgtk2-demo.php komutu ile demo php dosyamızı çalıştırılabilir yapalım. Sonrasında ./phpgtk2-demo.php
Please load the php-gtk2 module in your php.ini hatasını aldık. Hemen
/etc/php5/conf.d/ içerisine gidip
php_gtk2.ini dosyasını oluşturup içine extension=php_gtk2.so yazıyoruz ve kaydediyoruz. Tektar ./phpgtk2-demo.php ./phpgtk2-demo.php: line 4: syntax error near unexpected token `('
./phpgtk2-demo.php: line 4: `* dl() is deprecated in PHP 5 - use php.ini to load PHP-GTK 2'
hatalarını alırsanız dosyanızın en başına aşağıdaki satırı ekleyin.
#!/usr/bin/php5
Eğer ubuntu üzerinde php-gtk yı başarılı bir şekilde kurmuşsak ekran görüntümüz aşağıdaki gibi olacaktır.
Bu arada php-gtk nın ubuntu üzerinde başarılı bir şekilde kurulup kurulmadığını test etmek için uçbirimde.php -m | grep php-gtk
Komutunu yazıyoruz. Eğer aşağıdaki gibi tek satırlık bir sonuç dönüyorsa kurulumu tamamladık demektir.
php-gtk
Ubuntu 8.10 LAMP Kurulumu (Php,PhpMyadmin,Mysql,Apache)
Php sayfalarımızı çalıştırmak için ilk olarak Apache Server'ı kuracağız. Bunun için yeni bir uçbirim açarak aşağıdaki komutu yazıp entere basıyoruz. Böylelikle Apache web server'ı Ubuntu (8.10) muza kurmuş olduk.
sudo apt-get install apache2
Yaptığımız kurulumu test etmek için browserınızdan http://localhost yada http://127.0.0.1 adreslerini yazmanız yeterli olacaktır. Eğer ekranda "It works!" yazdı ise ubuntu üzerinde kurduğunuz Apache Web Server'ınız çalışıyor demektir.
Şuana kadar herşey güzel peki bu "it works!" yazısı nerden geldi. Nasıl olduda localhost yada 127.0.0.1 adreslerine girdiğimde karşıma çıktı diye soruyor olabilirsiniz. Siz Apache Web Server'ı kurduğunuzda /var/www/ dizini oluştu ve içerisinde index.html adında bir dosya kondu.
Bu dizin kurduğunuz apache serverın default olarak okuduğu ve web dosyalarını yorumladığı dizindir. Burada test.html isminde bir dosya oluşturup içerisine ise rasgele bişeyler yazdığınızda Apache'nin bu dosyayıda yorumlayıp size göstereceğini göreceksiniz.
Yanlız şuna dikkat edin sürekli html dosya uzantıları var. Php bir dosya oluşturup içerisine Php kodlarını yazdığınızda Apache'nin bu dosyayı yorumlamayacağını ve kaydedilsinmi diye soracağını göreceksiniz.
İşte bu yüzden Php dosyalarının Local Server'ımız tarafından yorumlanıp işlenilmesi için Ubuntu üzerinde Php yi kuracağız. Php'yi kurmak için uç birimden aşağıdaki komutu kullanacağız.
sudo apt-get install php5
kurulum bittikden sonra local web serverımızı yeniden başlatıyoruz (restart)
sudo /etc/init.d/apache2 restart
Daha sonra /var/www dizinine giderek test.php adında bir adet php dosyası oluşturalım ve içerisine yazarak çalıştırmayı deneyelim.
Eğer kurduğunuz Php sürümü, server bilgileri, çeşitli dosya yolları gibi bilgiler yani klasik phpinfo(); çıktısını aldıydak artık Apache Web Server'ımız php dosyalarımızıda yorumluyor ve bize html çıktıyı üretiyor demektir.
Not: Default olarak /var/www dizinine yazma izniniz yoktur. Bunun için sudo chmod 777 tam izin verin. Ayrıca apt-get install php5 dediğimizde libapache2-mod-php5 paketinin kurulduğuna dikkat edin. Eğer sorun yaşarsanız sudo apt-get install libapache2-mod-php5 diyerek bu paketi kurabilirsiniz.
Fakat Ubuntu 8.10 üzerinde bir sorun yaşacağınızı sanmıyorum. Ki ben denemediğim hiçbir şeyi bu blogda yazmıyorum (:
Şimdi gelelim LAMP'ın olmazsa olmazına. Verilerimizi işlemek için veritabanı sunucumuz olan MySQL'i kurmaya. Kurulum için uç birimden
sudo apt-get install mysql-server
komutunu girin. Enter'a bastığınızda
Aşağıdaki ek paketler de yüklenecek:
libdbd-mysql-perl libdbi-perl libnet-daemon-perl libplrpc-perl
mysql-client-5.0 mysql-server-5.0
Önerilen paketler:
dbishell mysql-doc-5.0 tinyca mailx
Aşağıdaki YENİ paketler kurulacak:
libdbd-mysql-perl libdbi-perl libnet-daemon-perl libplrpc-perl
mysql-client-5.0 mysql-server mysql-server-5.0
0 yükseltildi, 7 yeni kuruldu, 0 kaldırılacak ve 0 yükseltilmeyecek.
İndirilmesi gereken dosya boyutu 35,8MB
After this operation, 109MB of additional disk space will be used.
Devam etmek istiyor musunuz [E/h]?
Şeklindeki sorulan soruya "E" yazıp tekrar entera basın. Böylelikle Ubuntu 8.10 üzerinde mysql server kurulumu başlamış olacak.
Kurulum esnasında "Paket yapılandırılması başlıklı" mysql-server için root şifresi belirtin diye bir ekran çıkacak.
Buradan mysql serverımız için root şifresi girelim. Gerekli değil fakat güvenlik için şifre girmemiz daha iyi olur. Sifremizi girdikten sonra mysql server kurulumumuz sona erecektir.
Bu işide atlattıkdan sonra sıra geldi Php ile mysql'i beraber kullanmaya. Evet mysql serverımızı kurduk fakat Php ile beraber kullanmak için php5-mysql paketinide kurmalıyız. Aksi halde mysql serverımıza bağlanmaya çalıştığımızda
Fatal error: Call to undefined function mysql_connect() in /var/www/test.php on line 3
gibi bir hata alırız. Hemen paketimizi kuralım. sudo apt-get install php5-mysql
Apache Web Serverımızı reserleyelim.
sudo /etc/init.d/apache2 restart
ve bir php dosyası oluşturarak mysql_serverımıza bağlanmaya çalışalım.
$conn = mysql_connect("localhost","root","root_sifreniz");
if($conn)
{
echo "MySQL Servera Bağlanıldı";
}else{
echo "MySQL Servera Bağlanılamadı";
}
Bu şekilde test edebileceğiniz gibi phpinfo(); fonksiyonundan yararlanarakta test edebilirsiniz. Aşağıdaki resim bu paketleri kurduktan sonra phpinfo(); fonksiyonundan alınmıştır.
Daha önce bu kısım phpinfo() fonksiyonumuzun çıktısında yoktu.
Evet Ubuntu 8.10 üzerinde Apache, Php ve MySQL Server'ı kurduktan sonra sanırım bir olmazsa olmazda phpMyAdmin dir. MySQL serverımızı yönetmek, üzerinde veritabanları, tablolar oluşturmak bunları silmek yada veri girmek gibi işlemlere yarayan phpMyAdmin'i kurmaya başlayalım.
ilk olarak http://www.phpmyadmin.net/home_page/downloads.php adresinden phpMyAdmin'i indirelim. İndirdikten sonra (ben tar.gz olarak english versiyonunu indirdim) arşivi açalım ve klasör ismini phpmyadmin vererek /var/www içerisine atalım. Sonrasında ise http://localhost/phpmyadmin adresine giderek aşağıdaki resimde gördüğüz gibi root kullanıcı adı ve şifremizi girerek mysqlserver'ımıza bağlanalım.
Ubuntu üzerinde LAMP kurduk Curl kurmayı unuttuk. Aşağıdaki komut ile Curl kurulumunu tamamlayın ve phpinfo(); fonksiyonu ile curl'un kurulup kurulmadığını araştırın. Eğer Curl sorunsuz kuruldu ise şöyle bir görüntü olacaktır phpinfo() fonksiyonunun çıktısında.
sudo apt-get install php5-curl
ve Apache'yi resetliyoruz.
sudo /etc/init.d/apache2 restart
Bugün yeni kurduğum Ubuntu 8.10 üzerindeki tüm güncellemeleri yaptıkdan sonra LAMP kurmaya karar verdim. Daha önce Xampp nasıl kurulur ve konfigüre edilir onu anlatmıştım. Bu yazımda ise manuel olarak sırası ile Ubuntu 8.10 üzerinde Apache, Php, Mysql ve PhpMyadmin kurulumunu anlatmaya çalıştım. Umarım işinize yarar.
Php bot Süper Lig Puan durumu
Php ile yazdığım ve fotomac.com.tr sitesinden Turkcell Super Lig puan durumunu çeken ufak bir php bot. Php ile ufak bir bot nasıl yazılır bu kodları takip ederek anlayabilirsiniz.
<?php
$desen = '#<div id=\"ew_1\">(.*)<div id=\"ew_2\">#s';
$url = 'http://fotomac.com.tr';
$gelenler = file_get_contents($url);
preg_match_all($desen,$gelenler,$aktar);
print $aktar[1][0];
?>
Şöyle bir bakınca zaten kodların basit olduğunu görürsünüz.
file_get_contents() fonksiyonu ile web sayfasından verleri alıp $gelenler değişkenine aktarıyoruz.
preg_match_all() fonksiyonunu kullanarak, $Desen değişkenindeki düzenli ifade yardımı ile $aktar dizisine, eşleşen kayıtları atıyoruz. Kısaca bu fonksiyon yardımı ile gelen html kodlarından sadece işimize yarayan bölümü, yani puan tablosunu alacağınız için filtreleme yapıyoruz.
Dizimizin $aktar[1][0] elemanı bizim işimize yarayan ve Süper Lig puan durumunu içeren bölüm olduğundan bu kısmı print() fonksiyonu ile ekrana yazdırıyoruz.
Kendim kullanmadığım için tasarım olarak üzerinde pek uğraşmadım. Çalışan demosunu görmek için bu adrese bakabilirsiniz. Bu botu web sitenizde kullanablir yada kendinize göre modifiye edebilirsiniz.
Php'de string dizi fonksiyonları
Bu yazımda string diziler, string karakter setleri üzerinde kullanıdığımız iki php fonksiyonundan bahsedeceğim. Ucwords() ve str_word_count() fonksiyonları.
<?php
$salt = "linux apache mysql php";
echo ucwords($salt);
?>
Sonuç: Linux Apache Mysql Php
ucwords() fonksiyonu string içerisindeki tüm kelimelerin ilk harflerinin büyük harf ile ekrana yazılmasını sağlamaktadır. Daha önce yazdığım ucfirst() php fonksiyonu ise sadece string içerisindeki ilk kelimenin başharfini büyük karakter olarak yazmaktaydı.
Bir string dizi içerisindeki tüm kelimelerin sayısını hesaplamak (bulmak) için ise str_word_count() php fonksiyonunu kullanabiliriz. Üç parametre almaktadır. 0,1 ve 2.
<?php
echo str_word_count($salt);
?>
Yukarıdaki komut ile $salt değişkeni içerisindeki toplam kelimele sayısını ekrana yazdırdık. Çıktı 4 olacaktır. Bu şekilde kullanımda default olarak 0 parametresi ile kullanmış oluyoruz.
Eğer fonksiyonu 1 parametresi ile kullanırsak istediğimiz string türündeki bilgiyi bir diziye (Array) aktarabiliriz. Böylece hiç explode() v.s. gibi fonksiyonlar ile uğraşmadan bu fonksiyonla işlerimizi halledebiliriz.
<?php
print_r(str_word_count($salt,1));
?>
Yukarıdaki fonksiyonu çalıştırdığınızda string içerisindeki kelimelerin bir diziye aktarıldığını göreceksiniz. Çıktımız ise aşağıdaki gibi olcak.
Array
(
[0] => linux
[1] => apache
[2] => mysql
[3] => php
)
Şu kısma dikkat edin Array (dizi) mizdeki elemanların indisleri 0 dan başlamakta.
str_word_count() fonksiyonu 2 parametresi ile kullanıldığında ise hem stringdeki kelimeleri bir array (dizi) içinde toplamakta, hemde array indislerini string içerisinde bulduğu kelimenin ilk harfinin sıra numarısını vermektedir. Aşağıdaki komutu çalıştırdığınızda
<?php
print_r(str_word_count($salt,2));
?>
Array
(
[0] => linux
[6] => apache
[13] => mysql
[19] => php
)
Bu sonucu alacaksınız. Gördüğünüz gibi array içerisindeki linux elemanının indis numarası 0 iken apache elemanının indis numarası ise 6 dır. Şimdi 0 dan başlayarak saymaya başladığınızda $salt değişkeni içerisindeki apache kelimesinin başladığı sıra numarası 6 dır. Not: String içerisindeki boşluklarda sayılmaktadır.
ereg_replace ve eregi_replace fonksiyonları
Ereg_replace ve Eregi_replace Php ile sıklıkla kullandığımız fonksiyonlardır. Daha önce php ile düzenli ifadeler yazılarımda ereg ve eregi fonksiyonlarından söz etmiştim. Bu fonksiyonlar'dan True yada False sonucu dönmekteydi. Ereg_replace ve Eregi_replace fonksiyonları ise yaptığımız karakter aramalarını bulup istediğimiz karakterler ile değiştirebiliyor. Bu iki fonksiyon arasındaki fark ise birinin büyük küçük harf duyarlılığına sahip diğerinin ise sahip olmamasıdır. (Case sensitive). Eregi_replace fonksiyonunda büyük küçük harf duyarlılığı yoktur. Bu fonksiyonlarda düzenli ifadeleride kullanabilmekteyiz. Basit bir örnek yapalım.
<?php
$salt = "Ubuntu bir Linux dagitimidir.";
$bul = 'Ubuntu';
$degistir = "Özgür";
echo ereg_replace($bul,$degistir,$salt);
?>
Yukarıdaki örnekte $bul değişkeni içerisindeki değeri $salt değişkeni içerisinde arıyoruz eğer değerimiz bulunursa $degistir değişkeni içerisindeki değer ile değiştirilip ekrana yazdırılıyor.
Yukarıdaki örnekte aranan kelimeler büyük küçük harf olarak tam eşleşmektedirler. Şimdi $bul içindeki değeri ubuntu yapalım ve test edelim. ("u" harfi büyük değil) Eğer test ederseniz ereg_replace() fonksiyonunun eşleşmediğini göreceksiniz. İşte bu gibi durumlarda eregi_replace() fonksiyonu kullanarak büyük küçük harf duyarlılığından sıyrılabiliriz. Örnekte eregi_replace() kullandığımızda Ubuntu kelimesi ubuntu ile eşleşip ekrana Özgür yazılacaktır.
Daha ayrıntılı bilgi için ereg_replace eregi_replace bu adreslere gözatın.
Ubuntu ile Apache Mysql Php ve PhpMyadmin kurulumu ( XAMPP )
Ubuntu da Apache, Mysql, Php ve PhpMyadmin kurmak için ilk olarak XAMPP dosyasını indiriyoruz. XAMPP, LAMP diye tabir edilen Linux, Apache, MySql ve Php yi tek bir paket içerisinde barındırmaktadır . Bizim kuracak olduğumuz 55Mb lık XAMPP Linux 1.7 versiyonununda bulunan diğer bileşenlere kendi sitesinden bakabilirsiniz.
İndirme işlemi bittikten sonra konsol ekranını Uygulamalar / Donatılar / Uçbirime tıklayarak açın. XAMPP dosyasını indirdiğiniz dizine cd komutu aracılığı ile gidin. Örnek:
cd Masaüstü
su
root parolanız
tar xvfz xampp-linux-1.7.tar.gz -C /opt
Hepsi bukadar. /opt/lampp dizininde XAMPP kurulu olduğunu göreceksiniz.
XAMPP'ı başlatmak için
sudo /opt/lampp/lampp start
Komutunu kullanıcaz. Komutdan sonra aşağıdaki gibi bir görüntü alacaksınız.

Sonrasına ise http://localhost adresine web tarayıcınız ile giderek XAMMP'ın çalışıp çalışmadığını test edebilirsiniz. Resimde gördüğünüz gibi başarı ile kurulumu gerçekleştirdik ve sunucumuzu çalıştırdık.

Kurulumdan sonra dikkat edilmesi gereken önemli güvenlik ayarları bulunmaktadır.
XAMPP kurulduktan sonra default olarak Mysql root şifresi yoktur.
nobody kullanıcısının ProFTPD şifresi lampp dır.
PhpMyadmin klasörüne dışarıdan erişilebilir. v.s.
Bu tarz güvenlik ayarlamalarını düzenlemek için şu komutu kullanıyoruz.
sudo /opt/lampp/lampp security
Sonrasında ise XAMPP aracılığı ile aşağıdaki resimde gördüğünüz gibi bir sihirbaz geliyor. Buradan kendiniz için gerekli olan ayarları yapabilirsiniz. Benim ayarlar resimdeki gibi :p

XAMMP açılışına şifre koyduğum için localhost a girince böyle bir kimlik doğrulama inputboxı çıkıyor. Eğer sizde buraya kadar anlattığım şekilde geldiyseniz ve bir türlü bu kutucuğa kullanıcı adı olarak ne gireceğim diyorsanız :) heyecana gerek yok default xampp kullanıcı adınız "lampp" :)
Xampp security sekmesine gitdiğinizde ayarlarımızın şu şekilde göründüğünü göreceksiniz.

Peki ayarlarımızı yaptık Php dosyalarımızı hangi klasörde çalıştırıcaz? diyorsanız bunun için /opt/lampp/htdocs dizinine gidip php dosyalarınızı bu klasöre atıyoruz. Sonrasında ise tarayıcımız ile dosya ismini adres çubuğuna yazarak test edebiliriz.
Bu arada XAMPP ile birlikte curl enable olarak gelmekte. Harici bir konfigürasyon yapmanıza gerek yok.
sudo /opt/lampp/lampp start XAMPP'ı başlatır.
sudo /opt/lampp/lampp stop XAMPP' durdurur.
sudo /opt/lampp/lampp restart XAMPP' durdurup yeniden çalıştırır.
sudo /opt/lampp/lampp startapache Sadece Apache'yi başlatır. Php desteği ile.
sudo /opt/lampp/lampp startssl Apache'nin ssl desteğini başlatır.
sudo /opt/lampp/lampp startmysql Sadece Mysql'i başlatır.
sudo /opt/lampp/lampp startftp ProFTPD serverı başlatır.
sudo /opt/lampp/lampp stopapache Apache Server'ı durdurur.
sudo /opt/lampp/lampp stopssl Apache'nin SSL desteğini durdurur.
sudo /opt/lampp/lampp stopmysql Mysql'i durdurur.
sudo /opt/lampp/lampp stopftp ProFTPD Server'ı durdurur.
sudo /opt/lampp/lampp security Security kontrol programını başlatır.
XAMPP'ı uninstall etmek için ise komutumuz.
rm -rf /opt/lampp
Strrev() Fonksiyonu Php
Bu fonksiyon değişken içerisindeki verinin tersten yazılışını sağlar.
Aslında bu fonksiyon görünüşte ne işime yaracakki gibi bir izlenim uyandırabilir sizde. Örneğin bir kullanıcı şifresini kaydeteceksiniz. Smf forumlarda kullanıcının user ve şifresi bitiştirilip sonra küçük harfe çevrilip sonrada sha1() ile kriptolanıyor. Alın işte size radikal bir çözüm :p kullanıcının username ini ters çevirip md5() sha1() ile kriptolayın. :)
<?php
$url = "http://webcodez.blogspot.com";
echo strrev($url)."<br>";
$sayi =1234;
echo strrev($sayi);
?>
Çıktısı böyle olacak:
moc.topsgolb.zedocbew//:ptth
4321
Php ve str_replace() Fonksiyonu
str_replace() fonksiyonu kısaca bir karekter setindeki karakterleri istenilen karakterler ile değiştirir. Bu fonksiyon case-sensitive dir yani büyük küçük harfe duyarlıdır. Eğer büyük küçük harf duyarlılığı istemiyorsanız str_ireplace() fonksiyonunu kullanabilirsiniz.
Fonksiyonun söz dizimi şu şekildedir.
str_replace(değiştirmek istenilen karakter dizisi,değiştirilecek olan karakter,aranılan karakter dizisi, kaç kere değiştirme işlemi yapıldı);
Bir iki örnek yapalım.
<?php
echo str_replace("deli","harika","Yakuake deli bir olay :p");
?>
Çıktı "Yakuake harika bir olay :p" olacaktır. Gördüğünüz gibi Burda "deli" arandı, bulundu, "harika" ile değiştirildi.
<?php
$salt = "Yakuake deli deli bir olay :p";
$aranan = "deli";
$degistir = "süper";
$sonuc = str_replace($aranan,$degistir,$salt,$say);
echo $sonuc;
echo $say;
?>
Daha anlaşılır olması açısından değişkenlere atayarak yazdım.
$say değişkenini kullanmamıza gerek yok. opsiyoneldir bize kaç kez değiştirilme işlemi yaptığını söyler. Eğer $salt değişkenine bir tane daha "deli" kelimesi ilave ederseniz $say değişkeninin 2 olduğunu göreceksiniz.
str_replace() fonksiyonu ile array (dizi) lerdeki değerleride arayıp değiştirebiliriz.
<?php
$salt = array("Ubuntu","Vista","Redhat","Windows","Güzel işletim sistemleridir.");
$degistir = array("Vista","Windows");
$neyle = array("Pardus","Suse");
$sonuc = str_replace($degistir,$neyle,$salt,$say);
print_r($sonuc);
print $say." tane eleman değiştirildi";
?>
Çıktımız Array ( [0] => Ubuntu [1] => Pardus [2] => Redhat [3] => Suse [4] => Güzel işletim sistemleridir. ) 2 tane eleman değiştirildi şeklinde olacaktır.
Php ve String fonksiyonlar
Bu yazımda ise strlen() strtoupper() strtolower() ucfirst() trim() substr() strpos() str_repeat() gibi stringler üzerinde çalışmamıza yardım eden php fonksiyonlarından söz edeceğim.
<?php
$salt = " webcodez.blogspot.com ";
echo "$salt ".strlen($salt)." Karakterden oluşmaktadır<br>";
//strlen() fonksiyonu verilen string içindeki karakter sayısını bulur.
echo strtoupper($salt)."<br>";
//strtoupper() Fonksiyonu verilen karakterleri büyük harfe çevirir.
echo strtolower($salt)."<br>";
//strtolower() Fonksiyonu verilen karakterleri küçük harfe çevirir.
echo ucfirst($salt)."<br>";
//ucfirst() fonksiyonu verilen karakterin ilk harfini büyük harfe çevirir.
echo trim($salt)."<br>";
//trim() Fonksiyonu verilen stringin sağ ve sol tarafındaki boşlukları atar.
?>
Buraya kadar çalıştırdığımızda böyle bir çıktı alıyoruz.
webcodez.blogspot.com 21 Karakterden oluşmaktadır
WEBCODEZ.BLOGSPOT.COM
webcodez.blogspot.com
Webcodez.blogspot.com
webcodez.blogspot.com
<?php
$salt = "webcodez.blogspot.com";
$bul = substr($salt,0,8);
echo $bul;
?>
substr() Fonksiyonuna ilk giren değer aramayı yapmak istediğimiz stringdir. İkinci değer ise aramaya kaçıncı karakterden başlayacağımız, üçüncü karakter ise kaç karakter alacağımızdır. Karakter dizilerinin ilk karakteri 0 dan başlar. Yukarıdaki kkodu çalıştırınca çıktı webcodez olacaktır.
Peki tersden arama yapmak istersek.Ozaman ise eksi işaretini kullanıyoruz. $bul değişkenini değiştirelim. $bul = substr($salt,-12,8); Burada ise sondan 12. karakterden sonra 8 karakter al demiş olduk ve çıktı blogspot olarak yazıldı.
<?php
$salt = "webcodez.blogspot.com";
$bul = substr($salt,-12,8);
echo $bul;
?>
strpos() Fonksiyonu aradığımız karakterin, kaçıncı karakterde bulunduğunu gösterecektir.Çıktı 12 olarak ekrana yazılacaktır. Eğer aradığımız karakter bulunmaz ise fonksiyondan False değeri dönecektir.
<?php
$salt = "webcodez.blogspot.com";
$bul = strpos($salt,"g");
echo $bul;
?>
str_repeat() fonksiyonu ilk girilen argümanı ikinci gireceğiniz argüman kadar tekrarlar. Bu örnekte alt alta 5 kez webcodez.blogspot.com yazacaktır.
<?php
echo str_repeat("webcodez.blogspot.com<br>", 5);
?>
Php ile Düzenli ifadeler -3
Köşeli parantezlerden [] hariç ayrıca düzenli ifadelerde () normal parantezlerde kullanılmaktadır. Parantez İşaretlerini gruplama yaparken kullanırız. Şöyle bir örnek vermek gerekirse.
<?php
$desen = "(cumar|pazar)tesi";
$cumle = "bugün pazartesi";
if(ereg($desen,$cumle)) {
echo "Regular expression (Düzenli ifade) bulundu.";
}else {
echo "Regular expression (Düzenli ifade) bulunamadı.";
}
?>
Gördüğünüz gibi parantez içindeki düzenli ifademizi grupladık. Arama karakter dizimizde başı cumar veya pazar olan ve sonu tesi ile eşlenen kriterler bulduğunda bu örnek kod parçacığı TRUE dönecektir.
Parantezler hakkında bir iki örnek daha verelim.
<?php
$desen = "web(co)*dez"; // * kendisinden bir önceki karakter sıfır yada
daha fazla olmak zorundaydı
$cumle = "webcodez";
if(ereg($desen,$cumle)) {
echo "Regular expression (Düzenli ifade) bulundu.";
}else {
echo "Regular expression (Düzenli ifade) bulunamadı.";
}
//output webcoodez FALSE, webdez,webcodez, webcocodez TRUE dönecektir.
?>
Nokta karakterini açıklamayı unuttum. Düzenli ifadelerde nokta karakteri herhangibir karakter anlamına gelmektedir. Şimdi bu karakter ile ilgili bir örnek yapalım.
<?php
$desen = "Pa.dus";
$cumle = "Pardus";
if(ereg($desen,$cumle)) {
echo "Regular expression (Düzenli ifade) bulundu.";
}else {
echo "Regular expression (Düzenli ifade) bulunamadı.";
}
// $desen = ".dus"; Patdus,Pavdus,Pa2dus,Pa-dus TRUE döner
Padus,Pa22dus,Pa--dus FALSE dönecektir.
?>
Şimdide Düzenli ifadeler kullanırken en çok kullanılan ereg_replace() ve eregi_replace() fonksiyonlarına bakalım. Bu fonksiyonlar bize arama ve değiştirme yapma imkanı sunarlar. ereg_replace() büyük küçük harf ayrımı yaparken eregi_replace() fonksiyonu büyük küçük harf ayrımı yapmamaktadır. En basitinden bir örnek üzerinde açıklayalım.
<?php
$cumle = "özgürlük için pardus";
$bul = ereg_replace("pardus","PARDUS",$cumle);
echo $bul;
//çıktı özgürlük için PARDUS olacaktır.
?>
Gördüğünüz gibi fonksiyon ilk parametre olarak aranacak değeri alıyor, ikici parametresi ise bulduğu değeri neyle değiştireceğidir ve üçüncü parametresi ise hangi karakter dizisinde arama yapacağıdır.
Php ile Düzenli ifadeler -2
Düzenli ifadelerdeki özel karakterler
Düzenli ifadeler hakkında yazdığım ilk yazıda sadece | veya(or) karakterinden bahsetmiştim. Burda ise diğer özel karakterlerin ne işe yaradıklarını ve diğer düzenli ifadeleri yazacağım.
$desen = "google"; Aranılan karakter dizisinde google bulunmak zorundadır.
$desen = "^google"; Aranılan karakter dizisi google ile başlamak zorundadır.
$desen = "google$"; Aranılan karakter dizisi google ile bitmelidir.
$desen = "^google$; Aranılan karakter dizisi sadece google olmalıdır.
$desen = "goog?le"; ? işaretinden bir önceki karakter olsada olur olmasada olur. goole ve google TRUE, goorle g00le gole FALSE dönecektir.
$desen = "goo+gle"; + işaretinden bir önceki karakter olan "o" bir yada daha fazla sayıda bulunmak zorundadır.
gooogle, goooogle, gooooogle TRUE gogle,glogle,gorgle, goolgle FALSE dönecektir.
$desen = "goo*gle"; * işaretinden bir önce gelen karakter olan o sıfır yada daha fazla sayıda bulunmalıdır.
gogle,gooogle,googles TRUE gobgle, aoogle, goodle FALSE dönecektir.
Bu özel karakterlerden (^?*) hariç olarak düzenli ifadelerde [] köşeli parantezler ile bu parantezlerin içinde belirlediğimiz karakter kümelerini arayabiliriz.
Köşeli parantezler içerisinde kullanılan "-" tire işareti, Aralığında olarak kullanılır. [abcde] yerine [a-e] aynı ifadedir. Aynı şekilde rakamlar içinde geçerlidir. [0123456789] ile [0-9] gibi.
$desen = "[a-z]"; Aranılan karakter dizisinde küçük harf olmak zorundadır.
$desen = "[A-Z]"; Aranılan karakter dizisinde büyük harf olmak zorundadır.
$desen = "[juv]"; Aranılan karakter dizisinde j yada u yada v bulunmalıdır.
$desen = "[0-9]"; Aranılan karakter dizisinde rakam bulunmalıdır.
$desen = "[a-zA-Z0-9]"; Aranılan karakter dizisinde rakam veya harf bulunmalıdır.
$desen = "^[a-z]+$"; Aranılan karakter dizisi küçük harf iel başlayıp devam etmeli ve bitmelidir.
$desen = "[rth]$"; Aranılan karakter dizisi r, t, yada h harfleri ile bitmelidir.
$desen = "^[a-zA-Z0-9]+$"; Aranılan karakter dizisinde özel karakter olmamalıdır. Sadece harf veya rakamdan oluşmalıdır.
$desen = "^[123]"; Aranılan karakter dizisi 1,2 yada 3 ile başlamalıdır.
Aşağıdaki kod parçacığı üzerinde $desen değişkenini değiştirerek düzenli ifadeleri test edebilirsiniz.
<?php
$desen = "^[123]";
$cumle = "webcodez.blogspot.com google tarafından host edilmektedir.";
if(ereg($desen,$cumle)) {
echo "Regular expression (Düzenli ifade) bulundu.";
}else {
echo "Regular expression (Düzenli ifade) bulunamadı.";
}
?>


















