RSS
 

Archive for the ‘PHP’ Category

PHP & Bing API 2.0 ile Search

22 Sep

Merhaba,

Bu makalemde sizlere Microsoft’un yeni arama motoru(seçim motoru desek daha doğru olur.)’nun bize sağlamış olduğu Search API(Application Interface) ile kendimize özel bir arama motoru oluşturacağız. Öncelikle http://www.bing2.net adresinden register olarak giriş yapmamız gerekiyor. Eğer Live Messenger kullanıyorsanız bu hesabınız ile de oturum açabilirsiniz. Daha sonra http://www.bing.com/developers/createapp.aspx adresinden yeni bir AppID alarak işlemlerimizi tamamlıyoruz.

Öncelikle her şeyimizi UTF-8 kullanacağımızdan sayfa yapımızı da Zend Studio’nun Project>Properties>Text File Encoding menüsünden UTF-8 olarak ayarlamalıyız. Eğer yeni bir project oluşturmadıysanız sayfanıza sağ tıklayarak properties menüsünden file encoding’i değiştirebilirsiniz.

Arama sorgularımızı göndereceğimiz bir XHTML form hazırlamamız gerekmektedir.

  1.  
  2. <html>
  3. <head>
  4. <title>Bing Search API 2.0 – Test Sayfası</title>
  5. </head>
  6. <body>
  7. <form action="result.php" method="get" id="searchForm01">
  8.  Ara: <input type="text" name="q" id="q" />
  9. <input type="submit" value="Bul" />
  10. </form>
  11. </body>
  12. </html>
  13.  

Yukarıdaki gibi basit şekilde arama formumuzu da tamamladıktan sonra şimdi sıra geldi bu form’dan gelen değere göre Bing API 2.0′ı kullanarak sonuçları almaya.
Bing API XML olarakta size sonuç dönebilme özelliğine sahip fakat JSON daha hızlı olduğundan ben JSON kullanacağım. Hemen yukarıdaki formun altından kodlarımızı yazmaya devam ediyoruz.

  1.  
  2. <?php
  3. if(isset($_GET["q"]) && !empty($_GET["q"])){
  4. $request = ‘http://api.search.live.net/json.aspx?Appid=[AppID]&sources=web&Web.Count=50&market=’ . $lang . ‘&query=’ . urlencode ( $_GET ["q"] );
  5. $response = file_get_contents($request);
  6. $jsonobj = json_decode($response);
  7. foreach($SearchResponse->Web->Results as $value){
  8.      print($value->Url. " – " .$value->;Title. " – ". htmlentities($value->Description, ENT_QUOTES, "UTF-8") . " – ". $value->DisplayUrl . " – ". $value->CacheUrl . "<br>";
  9.  }
  10. }
  11. ?>

Yukarıdaki şekildeki gibi bir çok bilgiye erişmeniz mümkün. Yukarıda sadece web aramaları verildi fakat resim gibi bir çok arama türüne göre sonuçları almanız yine mümkündür. Bunun yanında sonuçlarda reklamda gösterebilirsiniz. Bunun için Microsoft ile bir anlaşma yapmanız gerekmektedir. Yoksa API yetki kısıtlaması nedeni ile reklamları gösteremezsiniz. Ben yinede onunda kodunu vereyim. Belki ileride işinize yarar. Bunun içinde aşağıdaki şekilde bir HTTP Request (HTTP İsteği) göndermeliyiz.

  1.  
  2. <?php
  3. $request = "http://api.search.live.net/json.aspx?Appid=[AppID]&sources=Ad&";
  4. $request .= "market=en-us&query=pc&version=2.0&Ad.AdUnitId=10&Ad.PropertyId=2&Ad.PageNumber=0";
  5. $response = file_get_contents($request);
  6. $jsonobj = json_decode($response);
  7. foreach ($jsonobj->SearchResponse->Ad->Results as $v){
  8.         print($v->AdLinkUrl."-".$v->Title."-".$v->DisplayUrl."-".$v->Description."-".$v->Position."<br>");
  9. }
  10. ?>
  11.  

Bing bize hizmetlerini kişiselleştirerek kullanmamız için 2.0 versiyonu ile gelişmiş bir API sunmaktadır. Tüm özelliklerini ve bu özelliklerin aldığı değerleri açıklamaya kalksam sanırım çok uzun bir makale olacaktır. Eğer bu konu ile ilgilenenler varsa yorum olarak sorularını konun altına eklerse en kısa sürede cevap vererek. Makaleyi düzenlerim.

Bir Öneri: Bilmiyorum, belkide kötü bir öneride bulunuyorum ama yazmak istiyorum. :D İlk denediğim şey search result’u kendi oluşturduğum database’e kaydederek aynı keyword için bir search request geldiğinde kendi database’imden döndürmek oldu. Eğer geniş bir keyword list’e sahipseniz veya sitenizden çok arama oluyorsa bu şekilde aranılan keyword’lerin Bing’in index server’larından alarak kendi index database’nizi oluşturabilirsiniz. Tabii bunu yapmak için geçerli bir sebebiniz de olması gerekiyor. Yoksa bu şekilde TB’larca büyüklüğünde SQL oluştursanız bile, bu datayı yönetmek ve her yerden erişimini sağlamak çok zor. Yüksek seviyeli internet çıkışlarına ve farklı lokasyonlara hizmet verecek bir sürü server’larınız olması gerekmektedir. Belki farklı ihtiyaçlarınız için veya yapacağınız testler için alabilirsiniz.

İyi Çalışmalar.

 
No Comments

Posted in PHP

 

PHP & Ms SQL Server 2008 Kullanımı

10 Aug

Bilindiği üzere Microsoft IIS(Internet Information Services) 6.0 ve 7.x sürümlerinde artık PHP’ye destek vermektedir. Bununla da kalmayıp SQL Server 2005/2008 ile daha kolay işlem yapmamızı sağlayan “SQL Server Driver For PHP” extension’nı geliştirmiştir. Daha öncede bahsettiğim gibi IIS üzerine PHP kurmak istiyorsak, Windows Server’lar için özel olarak geliştirilen PHP sürümleri üzerinede çalışmalar başlamıştır. VC9  ile geliştirilmekte olan bu PHP sürümlerine http://windows.php.net adresinden ulaşabilirsiniz.

SQL Server Driver For PHP eklentisini IIS 7.x kullanıyorsanız Web Platform Installer ile kurabilirsiniz. Bu eklenti PHP üzerine kurulan curl veya zip kütüphanelerinden farkı yoktur. Aynı diğer eklentiler gibi bir DLL(Dynamic-link library) olarak extension klasörüne atılmakta ve php.ini ayar dosyamızdan diğer eklentiler gibi tanıtılmaktadır. Tek farkı şuan yeni olmasından ve çok yaygın kullanılmamasından dolayı Zend gibi IDE’ler henüz bu extension’nın metodlarını desteklememektedir. Yani bu eklentiyi kullanırken dikkatli olmalısınız. Çünkü Zend Studio v.b. IDE’ler kod tamamlama/ hata yakalama desteğini henüz bu extension için vermemektedirler.

Şimdi gelelim manuel kurulumunu nasıl yapacağımıza. Öncelikle http://tinyurl.com/5z3u6s bu adresin sizi yönlendireceği Microsoft Download sayfasından ilgili eklentiyi indiriniz. Daha sonra size dosyaları çıkartması için bir hedef dizin soracaktır. Uygun bir dizine dosyaları çıkarttıktan sonra ilgili dizine giderek içindeki dosyalara bakalım. Bizim için önemli olan içerisinde 2 adet .dll uzantılı dosya vardır. Bunların ikiside benzer isimlerdedir. Birinde sadece _ts.dll diye bir fazlalık vardır. Bu DLL eğer PHP sürümünüz thread safe ise kullanmanız gereken DLL’dir. Diğeri tahmin ettiğiniz gibi PHP’nin non thread safe sürümünü kullanıyorsanız kurmanız gereken eklentidir.Peki, ben bunu nasıl anlayacağım diyorsanız. PHP’nin kurulu olduğu dizine bakınız eğer php5ts.dll dosyasını kullanıyorsanız, PHP kurulumunuz thread safe’dir. Php5.dll ise non-thread safe sürümünü kullanmaktasınızdır.  Biz php_sqlsrv_ts.dll olanını kopyalayarak PHP’mizin kurulu olduğu dizindeki ext isimli klasörün içine atıyoruz. Bu sizde extension isminde de olabilir. Daha sonra php.ini dosyamızı açarak extension’ların tanıtıldığı bölüme extension=php_sqlsrv_ts.dll şeklinde eklentimizi PHP’ye tanıtıyoruz. Son olarak IIS veya Apache server’mıza restart atıyoruz.

Pc’niz de SQL Server 2005 veya SQL Server 2008 kurulu ise artık çalışmalarımıza başlayabiliriz. Biz bu uygulamaları yaparken IIS 7.5 üzerine FastCGI olarak Web Platform Installer yardımı ile kurulumumuzu yaptık ve SQL Server 2008 Enterprise Edition SP1 ‘i kullandık. PHP sürümü olarakta 5.x ve IDE olarakta Zend Studio 6.x kullandık.

İlk önce SQL Management Studio ile SQL Server’mıza bağlanıyoruz. Ardından aşağıdaki gibi bir sql table oluşturuyoruz. Tüm kodlara ve dosyalara yazının sonundaki vereceğim linkten ulaşabilirsiniz.

db_create

Bu table’mızın adı tbl_users olsun. Şimdi sıra geldi PHP tarafından bu table’a sql command göndermeye. Öncelikle en basit anlamda SQL Server 2008 ile nasıl çalışacağınızı anlatacağım daha sonra OOP’e uygun şekilde SQL Server ile çalışacağız.

İlk olarak bağlantımızı sağlayalım. Bunu 2 şekilde yapabiliriz.

  1. Windows Authentication
  2. SQL Server Authentication

Ben her zaman 2. Seçeneğini tercih ediyorum. :) Ama siz 1. Seçenek ile bağlanmak isterseniz Bağlantı kodunuz aşağıdaki şekilde olacaktır. Diğerini örnekte kullanacağımdan burada açıklamıyorum.

Windows Authentication Connection;

$connStr = array(“Database”=>”myMsSQL”);

Sadece veri tabanı adını belirtmemiz yetiyor. Bunun dışında eğer bağlanacağımız SQL Server default’un dışında farklı bir port üzerinden servis’i dinliyorsa bunun için’de server name’i tanımlarken aşağıdaki şekilde tanımlamalıyız.

define(“myServer”,”10.20.30.40, 7541″);

myServer’ı da sqlsrv_connect(); metoduna sqlsrv_connect(myServer); şeklinde verirsek 10.20.30.40 IP’li SQL Server’a 7541 no’lu porttan bir connection request(Bağlantı isteği) gönderecektir.

Hazır bağlantılara değinmişken SQL Server For PHP extension’ı connection pooling’i de desteklemektedir. Yine Connection String’imiz de true(1)/false(0) değerlerini vererek kullanabiliriz.

$connStr = array(“Database”=>”myMsSQL”,

“ConnectionPooling”=>true);

Bu kadar giriş bilgisinden sonra sanırım çalışmalarımıza başlayabiliriz.

İlk önce SQL Server ile nasıl iletişime geçeceğimizi görelim.

  1. "myMsSQL",
  2.                                  "UID"=>"sa",
  3.                                  "PWD"=>"10");
  4.  
  5. // SQL connection.
  6. $conn = sqlsrv_connect(Server,$connStr);
  7. !$conn ? exit("Connection Error: ".print_r(sqlsrv_errors(),true)) : print("Baglanti Saglandi!");
  8.  
  9. // Close the connection.
  10. sqlsrv_close($conn);
  11. ?>
  12.  

Burada yaptıklarımızı kısaca açıklayacak olursak, ilk önce bağlantı bilgilerimizi tanımladık. Daha sonra sqlsrv_connect(); metodu ile sql server’a bir bağlantı açtık. Hemen alt satırında olası bağlantı problemlerini yakalayabilmek için bir if ile bağlantı durumunu kontrol ettik. Daha sonra da sqlsrv_close(); metodu ile sql server’a açmış olduğumuz bağlantımızı kapattık.

Aynı örnek üzerinden giderek INSERT,SELECT,UPDATE,DELETE işlemlerimizi yapalım.

Öncelikle tablomuzda eğer daha önceden oluşturulmuş kayıtlar var ise aşağıdaki T-SQL kodu ile tablomuzu boşaltıyoruz.

use [myMsSQL]

TRUNCATE TABLE myMsSQL.dbo.tbl_users

Şimdi sıra geldi veri tabanımızda oluşturduğumuz tablomuza yeni bir kayıt eklemeye. Hemen aşağıdaki örneği inceleyerek sql server’a gönderilmek üzere nasıl command oluşturulduğunu görebilirsiniz.

  1. "myMsSQL",
  2.                                  "UID"=>"sa",
  3.                                  "PWD"=>"10");
  4.  
  5. // SQL connection.
  6. $conn = sqlsrv_connect(Server,$connStr);
  7. !$conn ? exit("Connection Error: ".print_r(sqlsrv_errors(),true)) : print("Bağlantı Sağlandı!");
  8.  
  9. // Execute the sql command query.
  10. $sqlCommand = "INSERT INTO myMsSQL.dbo.tbl_users (username,passwd,testData)
  11.                                 VALUES (‘Hakan DAMAR’,’2a1b0e’,'PHP ile SQL Server 2008 Kullanıyoruz.’)";
  12. $execQuery = sqlsrv_query($conn,$sqlCommand);
  13. !$execQuery ? print("Hatalı Sorgu!") : print("Sorgu Başarıyla Çalıştırıldı.");
  14.  
  15. // Close the connection.
  16. sqlsrv_close($conn);
  17. ?>
  18.  

Eğer herşey yolunda gitti ise bu kod ekrana;

insert_db

Yazdırması gerekmektedir.

Not: Eğer IE8 kullanıyorsanız ve SQLDriver4PHP extension’ı ile çalışırken 500 Internal Server Error alıyorsanız. Hatayı görmek için Firefox ile aynı sayfayı çalıştırabilirsiniz. :)

IE dahil tüm tarayıcılar içinde hata raporlamayı açabilirsiniz. Extension bunuda desteklemektedir. PHP.ini ‘den error_reporting ‘i de açmayı unutmayınız.

Şimdi çalıştırdığımız bu sorgunun gerçektende giderek sql server’daki ilgili table yeni bir kayıt ekleyip, eklemediğini aşağıdaki şekilde kontrol edelim.

select_db1

Bu görüntüdende anlaşılacağı üzere PHP ile SQL Server’a başarılı bir şekilde bağlantı sağlayarak, t-sql sorgumuzu çalıştırdık. Üstelik Türkçe karakter problemide olmadan. :)

Not: SQL Management Studio’da yazdığımız tüm kodları çalıştırmak için alt+x tuş kombinasyonunu kullanabiliriz. Sadece tek bir sorgu için ise ilgili sorguyu seçerek alt+x tuş kombinasyonunu kullanabiliriz.

Şimdi bu kaydı değiştirecek UPDATE sorgusunu yazalım ve çalıştıralım. Bir de her seferinde SQL Server’a gidip kod yazmak yerine tablodaki kayıtları sayfanın içine bastıralım.

Veri tabanından dataları alarak ekrana bastıran kodlarını bir önceki insert örneğine göre değiştirerek aşağıdaki şekilde veriyorum. Örnek kodları çalıştırarak inceleyebilirsiniz. Sayfayı her yenilediğinizde(F5) yeni bir kaydın ekrana basıldığını göreceksiniz.

  1. "myMsSQL",
  2.                                  "UID"=>"sa",
  3.                                  "PWD"=>"10");
  4.  
  5. // SQL connection.
  6. $conn = sqlsrv_connect(Server,$connStr);
  7. !$conn ? exit("Connection Error: ".print_r(sqlsrv_errors(),true)) : null;
  8.  
  9. // Execute the sql command query.
  10. $randPass = rand(1500,358415874);
  11. $newPasswd = sha1($randPass."2a1b0e");
  12. $sqlCommand = "INSERT INTO myMsSQL.dbo.tbl_users (username,passwd,testData)
  13.                                 VALUES (‘Hakan DAMAR’,'{$newPasswd}’,'PHP ile SQL Server 2008 Kullanıyoruz.’)";
  14. $execQuery = sqlsrv_query($conn,$sqlCommand);
  15. !$execQuery ? print("Hatalı Sorgu!") : null;
  16.  
  17. // Data Grid
  18. $sqlCommand2 = "SELECT TOP 25 * FROM myMsSQL.dbo.tbl_users";
  19. $executeQuery = sqlsrv_query($conn,$sqlCommand2);
  20. !$executeQuery ? print("SELECT Sorgusu Çalıştırılamadı!") : null;
  21.  
  22. while($dataRow=sqlsrv_fetch_array($executeQuery)){
  23.         print $dataRow["UID"]." – ".$dataRow["username"]." – ".$dataRow["passwd"]. " – ".$dataRow["testData"]."";
  24. }
  25. // Free result
  26. sqlsrv_free_stmt($executeQuery);
  27.  
  28. // Close the connection.
  29. sqlsrv_close($conn);
  30. ?>
  31.  

Bu kodları çalıştırarak bir kaç kez abartmadan :) F5 ile sayfamızı yenileyelim. Ekran çıktısı aşağıdaki şekilde olacaktır.

select_db2

Sıra geldi UPDATE sorgusunu yazmaya. Bunun için öncelikle XHTML ile mini bir form hazırlamamız ve burada HTML kontrollerinin value’larına sql server’dan çektiğimiz bilgileri yazdırmalıyız. Daha sonra form post edildiğinde bu dataları alarak ilgili kaydı UPDATE etmeliyiz.

Merak etmeyin hiç zor bir şey değil. Biraz get biraz post ile halledicez. :)

İlk olarak HTML formumumuzu oluşturduk.

  1.  
  2.  
  3.  
  4.  
  5.  
  6. <form id="frm01" method="post">
  7.   Username:
  8. <input name="uname" type="text" value="<?=$username?>" />
  9.   Test Data:
  10. <input name="tdata" size="50" type="text" value="<?=$testData?>" />
  11. <input type="submit" value="Güncelle" />
  12.  </form>
  13.  
  14.  

Ardından ekrana grid’mizi bastıran kodu düzenleyerek biraz eklenti yaptık.

  1.  
  2.  

Bilerek INSERT yapan kodu yorum satırına aldım. Her Düzenle’ye tıkladığınız da bir GET REQUEST(istek)’i olacağından sayfa yenilenecek ve INSERT tekrar, tekrar çalışacaktı. Bunu önlemek için kapattım. AJAX ile yapsaydık bu sorun olmazdı tabi. :) Bir de bu ilk örneğimizde OOP’in yanından bile geçmediğimizden tek sayfada işlerimizi hallediyoruz. Bu yüzden böyle problemler ile karşılaşabiliyoruz. Öncelikle kodun ekran çıktısını görelim. Arındanda kodları inceleyelim.

update_1

Güncelleme işlemi eklenmiş kodumuzun son hali;

  1. "myMsSQL",
  2.                                  "UID"=>"sa",
  3.                                  "PWD"=>"10");
  4.  
  5. // SQL connection.
  6. $conn = sqlsrv_connect(Server,$connStr);
  7. !$conn ? exit("Connection Error: ".print_r(sqlsrv_errors(),true)) : null;
  8. /*
  9. // Execute the sql command query.
  10. $randPass = rand(1500,358415874);
  11. $newPasswd = sha1($randPass."2a1b0e");
  12. $sqlCommand = "INSERT INTO myMsSQL.dbo.tbl_users (username,passwd,testData)
  13.                                 VALUES (‘Hakan DAMAR’,'{$newPasswd}’,'PHP ile SQL Server Kullanıyoruz.’)";
  14. $execQuery = sqlsrv_query($conn,$sqlCommand);
  15. !$execQuery ? print("Hatalı Sorgu!") : null;
  16. */
  17. // Data Grid
  18. $sqlCommand2 = "SELECT TOP 250 * FROM myMsSQL.dbo.tbl_users";
  19. $executeQuery = sqlsrv_query($conn,$sqlCommand2);
  20. !$executeQuery ? print("SELECT Sorgusu Çalıştırılamadı!") : null;
  21.  
  22. while($dataRow=sqlsrv_fetch_array($executeQuery)){
  23.         $userID = $dataRow["UID"];
  24.         print "<a href="?updateID=$userID">[Düzenle]</a> ".$userID." – ".$dataRow["username"]." – ".$dataRow["passwd"]. " – ".$dataRow["testData"]."";
  25. }
  26.  
  27. // Free result for memory :)
  28. //sqlsrv_free_stmt($execQuery);
  29. sqlsrv_free_stmt($executeQuery);
  30.  
  31. // Update Process
  32. if(isset($_POST["uname"]) &amp;&amp; !empty($_POST["uname"]) &amp;&amp;
  33.    isset($_POST["tdata"]) &amp;&amp; !empty($_POST["tdata"])){
  34.  
  35.         $updateID = intval($_GET["updateID"]);
  36.         $username = $_POST["uname"];
  37.         $testData = $_POST["tdata"];
  38.  
  39.         /* Parametreleri sqlsrv_query() metodunda vermek istersek.
  40.         $updateCmd = "UPDATE myMsSQL.dbo.tbl_users
  41.                                         SET username = ?, testData = ?
  42.                                         WHERE UID = $updateID";
  43.         $sqlParams = array($username,$testData);
  44.         $execQuery = sqlsrv_query($conn,$updateCmd,$sqlParams);
  45.         */
  46.  
  47.         $updateCmd = "UPDATE tbl_users
  48.                         SET username = ‘$username’, testData = ‘$testData’
  49.                         WHERE UID = $updateID";
  50.         $execQuery = sqlsrv_query($conn,$updateCmd);
  51.         !$execQuery ? print "UPDATE Sorgusunda Hata Var!" : sqlsrv_free_stmt($execQuery);
  52.         header("Location:test.php");
  53.         exit;
  54. }
  55.  
  56. if(isset($_GET["updateID"]) &amp;&amp; !empty($_GET["updateID"])){
  57.         $updateID = intval($_GET["updateID"]);
  58. $sqlCmd = "SELECT username,testData FROM myMsSQL.dbo.tbl_users as                  users   WHERE users.UID = $updateID";
  59.         $execCmd = sqlsrv_query($conn,$sqlCmd);
  60.         !$execCmd ? print("SELECT Sorgusunda Hata Var.") : null;
  61.         while ($row=sqlsrv_fetch_array($execCmd)){
  62.                 $username = $row["username"];
  63.                 $testData = $row["testData"];
  64.         }
  65.         /*
  66.         $username = sqlsrv_get_field($execCmd,1); // mysql_result(); gibi.
  67.         $testData = sqlsrv_get_field($execCmd,3); // Sorgudaki tek bir alanı döndürür.
  68.     */
  69.  
  70. ?>
  71.  
  1.  
  2.  
  3.  
  4.  
  5.  
  6. <form id="frm01" method="post">
  7.   Username:
  8. <input name="uname" type="text" value="<?=$username?>" />
  9.   Test Data:
  10. <input name="tdata" size="50" type="text" value="<?=$testData?>" />
  11. <input type="submit" value="Güncelle" />
  12.  </form>
  13.  
  14.  
  1.  
  2.  

Güncelleme işlemini de tamamladıktan sonra sıra geldi silme işlemimizi yapmaya. Silme işlemi için uygulamamızın bir yerinde değişiklik yapacağız ve silme işlemini yapmak için bir karar kontrol mekanizması ekleyeceğiz.

İlk olarak gridimizi ekrana bastıran kodları şöyle değiştirelim.

  1. [Düzenle] | <a href="?deleteID=$userID">[SİL]</a> ".$userID."".$dataRow["username"]."".$dataRow["passwd"]. "".$dataRow["testData"]."";
  2. }
  3. ?>
  4.  

Ardından silme işlemi için bir karar kontrol mekanizması ekleyelim.

  1.  
  2.  

Bu kodu güncelleme işlemi yapan kodun hemen üzerine ekleyeceğiz. Kodumuzun son hali ise şu şekilde olacaktır.

  1. "myMsSQL",
  2.                                  "UID"=>"sa",
  3.                                  "PWD"=>"10");
  4.  
  5. // SQL connection.
  6. $conn = sqlsrv_connect(Server,$connStr);
  7. !$conn ? exit("Connection Error: ".print_r(sqlsrv_errors(),true)) : null;
  8.  
  9. // Data Grid (SELECT)
  10. $sqlCommand2 = "SELECT TOP 250 * FROM myMsSQL.dbo.tbl_users";
  11. $executeQuery = sqlsrv_query($conn,$sqlCommand2);
  12. !$executeQuery ? print("SELECT Sorgusu Çalıştırılamadı!") : null;
  13.  
  14. // Print Grid
  15. while($dataRow=sqlsrv_fetch_array($executeQuery)){
  16.         $userID = $dataRow["UID"];
  17.         print "<a href="?updateID=$userID">[Düzenle]</a> | <a href="?deleteID=$userID">[SİL]</a> ".$userID." – ".$dataRow["username"]." – ".$dataRow["passwd"]. " – ".$dataRow["testData"]."";
  18. }
  19.  
  20. // Free result for memory :)
  21. sqlsrv_free_stmt($executeQuery);
  22.  
  23. // Update Process
  24. if(isset($_POST["uname"]) &amp;&amp; !empty($_POST["uname"]) &amp;&amp;
  25.    isset($_POST["tdata"]) &amp;&amp; !empty($_POST["tdata"])){
  26.  
  27.         $updateID = intval($_GET["updateID"]);
  28.         $username = $_POST["uname"];
  29.         $testData = $_POST["tdata"];
  30.  
  31.         $updateCmd = "UPDATE tbl_users
  32.                                         SET username = ‘$username’, testData = ‘$testData’
  33.                                         WHERE UID = $updateID";
  34.         $execQuery = sqlsrv_query($conn,$updateCmd);
  35.         !$execQuery ? print "UPDATE Sorgusunda Hata Var!" : sqlsrv_free_stmt($execQuery);
  36.         header("Location:test.php");
  37.         exit;
  38. }
  39.  
  40. // For DELETE Record.
  41. if(isset($_REQUEST["deleteID"]) &amp;&amp; !empty($_REQUEST["deleteID"])){
  42.         $deleteID = intval($_REQUEST["deleteID"]);
  43.  
  44.         $sqlDeleteCmd = "DELETE FROM tbl_users WHERE tbl_users.UID = {$deleteID}";
  45.         $execSqlCmd = sqlsrv_query($conn,$sqlDeleteCmd);
  46.  
  47.         !$execSqlCmd ? print("DELETE Sorgusunda Hata Var!") : sqlsrv_free_stmt($execSqlCmd);
  48.         print("Silme İşlemi Başarıyla Gerçekleşmiştir.");
  49.         header("Location:test.php");
  50.         exit;
  51. }
  52.  
  53. // SELECT record for UPDATE.
  54. if(isset($_GET["updateID"]) &amp;&amp; !empty($_GET["updateID"])){
  55.         $updateID = intval($_GET["updateID"]);
  56.         $sqlCmd = "SELECT username,testData FROM myMsSQL.dbo.tbl_users as users WHERE users.UID = $updateID";
  57.         $execCmd = sqlsrv_query($conn,$sqlCmd);
  58.         !$execCmd ? print("SELECT Sorgusunda Hata Var.") : null;
  59.         while ($row=sqlsrv_fetch_array($execCmd)){
  60.                 $username = $row["username"];
  61.                 $testData = $row["testData"];
  62.         }
  63. ?>
  64.  
  65.  
  66.  
  67.  
  68.  
  69. <form id="frm01" method="post">
  70.   Username:
  71. <input name="uname" type="text" value="<?=$username?>" />
  72.   Test Data:
  73. <input name="tdata" size="50" type="text" value="<?=$testData?>" />
  74. <input type="submit" value="Güncelle" />
  75.  </form>
  76.  
  77.  
  78.  

Bu kadar bilgiden sonra kendiniz bir form hazırlayarak SQL Server’a yeni bir kayıt eklemeyi deneyiniz. Kolaylık olsun diye INSERT yapan t-sql kodunuda veriyorum. PHP ile tek yapmanız gereken form’dan aldığınız datayı ilgili yerlere eklemek. Bunuda $_REQUEST veya form’un send method’una göre $_GET/$_POST ile yapabilirsiniz.

Veri tabanımıza yeni bir kayıt ekleyen t-sql kodu;

INSERT INTO tbl_users(username,passwd,testData) VALUES(‘$username’,'$passwd’,'$testData’)

Bu koda gelen $username,$passwd,$testData değişkenlerinin değerlerini daha öncede belirttiğim gibi FORM’dan almanız gerekiyor. Aslında kodları incelerseniz daha önce bir INSERT yaptığımızı göreceksiniz. Önceki kodlar size yardımcı olabilir. Tek fark biz VALUE’ları elle verdik, siz FORM’dan dinamik verdireceksiniz. Eğer yeni bir kayıt INSERT ettiremezseniz www.sanalkurs.net adresinden bana ulaşabilirsiniz. Daha fazla bilgi isterseniz, ücretsiz seminerlerimize katılabilirsiniz.

Şimdiye kadar geliştirdiğimiz test.php sayfamıza http://tinyurl.com/kkpotv adresinden ulaşabilirsiniz.

Evet, şimdi sıra OOP ile biraz nefes almaya geldi. Aynı işlemleri OOP’e uygun şekilde yazacağız. Bu makalemde OOP halinide anlatmak istiyordum fakat çok uzun süreceğinden sizleride sıkmak istemiyorum. Bir sonraki yazımda aynı projenin OOP(Object-oriented programming) standartlarına uygun bir şekilde anlatacağım. Ayrı bir makale konusu olacağından daha derinlemesine anlatabilirim.

Hepinize çalışmalarınızda başarılar diliyorum.

Saygılarımla,

-    Hakan DAMAR

 
No Comments

Posted in MsSQL, PHP

 

SQL Server Driver For PHP Connection Error

10 Jul

SQL Server Driver FOR PHP 5

Merhaba,

Bildiğiniz üzere Microsoft PHP için bir SQL Server Driver’ı çıkarttı. Bu extension’ı PHP’nin üzerine kurduğunuzda SQL Server 05 ve 08 ile sorunsuz ve hızlı bir şekilde işlemler yapabiliyorsunuz.  e-mail’me gelen soru yağmurları arasından seçtiğim bir sorunun cevabını buradan vermek istiyorum. Çünkü SQL Driver henüz yeni bir extension ve Türkçe kaynak hiç yok. Orjinal dökümantasyonu ise pek iç açıcı değil. :)

Hata: (SQL Server 08 üzerinde çalışıyorsanız.)

Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -1

[/code]

=> -1 [2] => Invalid option xÁò was passed to sqlsrv_connect. [message] => Invalid option xÁò was passed to sqlsrv_connect. ) )

Çözüm:

SQL Connection string'inizi daha doğrusu array'nizi hazırlarken eğer string türünden hariç bir şifreniz varsa ve string'e convert etmemişseniz bu hatayı olabilirsiniz. Bunun için connection string'inizdeki ilgili alanı ya string'e convert edin yada çift tırnak ( " ) içine alarak otomatik string olarak gösteriniz.

Örnekler;

- Hatalı Örnek:

$connectionStr= array( "Database"=>"fooDb","UID"=>"sa2","PWD"=>15461068071951080841);

- Doğru Örnek:

$connectionStr = array( "Database"=>"fooDb","UID"=>"sa2","PWD"=>(string)15461068071951080841);

veya (Aşağıdaki tavsiyem aynı zamanda. )

$connectionStr = array( "Database"=>"fooDb","UID"=>"sa2","PWD"=>"15461068071951080841");

Böyle basit bir işlemden dolayı sinir katsayınızı arttırabilir. :) Henüz yeni ve ilk versiyonları bunlar. Umarım 2. versiyonunda bunların hepsini halletmiş olurlar.

iyi çalışmalar.

 
No Comments

Posted in MsSQL, PHP

 

PHP Type Güvenliği Fonksiyonu

13 Jun

Merhaba,

Bildiğiniz üzere PHP , C# gibi type güvenliği olan dillerden değildir. Değişkenler tipi belirtilmeden yaratılır ve ona göre kullanılır.  Peki tip güvenliği dedimiz olay nedir?

Tip güvenli bir değişken oluşturalım.

[C#]

int sayi = 1535;

float fSayi = 15.4;

string yazi = “Microsoft Windows 7″;

Tip güvenliği olmadan oluşturalım.

[PHP]

$sayi = 1535;

$fSayi = 14.45;

$yazi = “I lost control. :) ”;

Şimdi bu iki tanımlama arasındaki fark sizinde tahmin ettiğiniz gibi birisinde oluşturulan değişkenin tipi baştan belirtilerek oluşturuluyor böylece ileride kullandığımızda programımız her birini tipine uygun çalıştırıyor veya hata veriyor. Diğerinde ise tip belirtmeden bunu dilin kendisinin anlamasını tercih ediyoruz. Gerçi PHP 5.2.x sürümünden sonra bu ayrımı çok daha iyi yapıyor fakat büyük programlarda tür dönüşümleri ve değer tip değişikliklerinden çok büyük problemler çıkabilmektedir.

Peki PHP bunun için ne yapıyor? Tabii ki bir çözümümüz var. Yukarıdaki aynı tanımlamayı şu şekilde de yapabiliriz.

[PHP]

$sayi = (int)1535;

$fsayi = (double)14.45;

$yazi = (string)”I lost control”;

Böylece hem değişken tanımlamış hem de aynı zamanda bir convert işlemi ile değişkenlerin türlerini istediğimiz türe çevirdik. PHP ile değişken tanımlama seviyesinde yapabileceğimiz maximum budur diye tahmin ediyorum. Peki biz önemli projelerimizde bu tipleri nasıl kontrol edeceğiz. Büyük bir program geliştirdiğimizde, değişkenin nerelerden geçtiğini ve son değişken değerinin, bizim istediğimiz tipten olup olmadığını anlamak güçtür. Ayrietten bunu run time’da denetlemek daha da zordur. Çünkü, gelen veriler kullanıcılardan veya farklı 3. bir web servisinden olabilir. Bu nedenle bizim bunu program içinde denetlememiz gerekmektedir. Böylece runtime’da gelen datalar kontrol fonksiyonu tarafından denetlenerek olası problemler öngörülecektir.

İlgili fonksiyonu aşağıda veriyorum. Kendi class’larınıza ekleyebilirsiniz.

  1.  
  2. class foo {
  3.         protected $type;
  4.         /**
  5.          * Type Controller
  6.          *  @var any type
  7.          */
  8.         public function typeControl($type) {
  9.                 $this->type = $type;
  10.                 is_string($type) ? $type = "String" : null;
  11.                 is_int($type) ? $type = "Int" : null;
  12.                 is_double($type) ? $type = "Double" : null;
  13.                 is_bool($type) ? $type = "Bool" : null;
  14.                 is_array($type) ? $type = "Array" : null;
  15.                 is_float($type) ? $type = "Float" : null;
  16.                 is_object($type) ? $type = "Object" : null;
  17.                 $type = "Bu değişken ".$type." türündendir.<br>";
  18.                 return print $type;
  19.         }
  20. }
  21. // Variables
  22. $control = new foo();
  23. $int = 3;
  24. $str = "test";
  25. $double = 7.9;
  26. $bool = false;
  27. $arr = array("Hakan",9,"Arda",7,"Atilla",3);
  28. $object = new foo();
  29.  
  30. // Type Controller
  31. $control->typeControl($bool);
  32. $control->typeControl($double);
  33. $control->typeControl($str);
  34. $control->typeControl($int);
  35. $control->typeControl($arr);
  36. $control->typeControl($object);
  37. ?>
  38.  

İyi Çalışmalar.

 
1 Comment

Posted in PHP

 

Basit Bir Spider Yazalım

21 Apr

Merhaba,
Biliyorum biraz uzun zaman oldu yazmayalı :) Ama bildiğiniz üzere CPU %100 çalışıyorum. Bu makalemde sizlere PHP ile nasıl basit bir spider yazabileceğinizi anlatacağım.

Her zaman ki gibi PHP bunun içinde bizi düşünmüş ve get_meta_tags adında bir function yazmış. Bu fonksiyon bize meta taglarındaki attribute’leri bir dizi olarak dönmektedir.  Şimdi bunun için bir class yazmamı beklemeyin.  OOP’in de suyunu çıkartmayalım. Herşey için bir class olmaz. :) Bunun için bir function yazacağım. Hemen kodlamaya başlayalım.

  1.  
  2. <?php
  3. function Spider($URL){
  4.   $Spider = get_meta_tags($URL);
  5.   return $Spider;
  6.   //print_r($Spider); //For Debug or list all meta tags array
  7. }
  8.  
  9. $TargetURL = "http://e-uzman.org";
  10. $mySpider = Spider($TargetURL);
  11.   print $mySpider["author"]."<br>";  
  12.   print $mySpider["keywords"]."<br>";    
  13.   print $mySpider["description"]."<br>";
  14.   print $mySpider["robots"]."<br>";
  15. ?>
  16.  

Unutmadan her tag her sitede olacak diye bir şart yok. Bu yüzden bazı alanların null gelmesi yüksek ihtimal bu yüzden eğer araya database koyacaksanız is_null() function’nı kullanmayı unutmayınız. Bunun dışında farklı dillerdeki sayfalarda karakter seti problemi yaşabilirsiniz. Onun içinde mb_detect_encoding function’nından yararlanabilirsiniz.

Sorularınız olursa ki Spider işleri ile uğraşıyorsanız kesin olur. Bekliyorum. Son olarak eğer arama motoru veya benzer bir yapı ile uğraşıyorsanız regex(regular expression) üzerine biraz kafa yormanızı tavsiye ederim. Gözüktüğü kadar zor değildir.

İyi Çalışmalar.

 
1 Comment

Posted in PHP

 

PHP’de Merkezileştirme (OOP)

09 Apr

Merhaba arkadaşlar,

Bildiğiniz üzere PHP artık bir çok görevi başarıyla yerine getirebilir seviyeye gelmiştir. Bu nedenlede PHP artık Web sayfalarından Web uygulamalarına geçişte önemli bir yerde durmaktadır.

Merkezileştirme derken anlatmak istediğim web uygulamalarımızda bütün bir uygulama üzerinde gerekli olan ve kullanılan ihtiyaçlarınızı bir pipeline’dan geçirerek bağımsızlaştırmaktır.Yaptığımız bir nevi DAL’dır aslında.[Data Access Layer(Veri Erişim Katmanı)] Nasıl olacak sorusunun cevabını beraberce arayalım.
Örnek senaryo üzerinden daha iyi anlatabileceğimi düşündüğümden, bir örnek ile açıklayayım.

Basit bir contact manager yazmamız gerektiğini düşünelim. Bu tür uygulamalar veri işleme üzerine kurulduğundan tüm verilerin doğru ve kontrollü şekilde ilerlemesi gerekmektedir. Veri tabanı olarak ne kullanırsanız kullanın mutlaka önemli alanlar için Transaction yönetimi yapmayı unutmayın. Konumuz veri tabanları olmadığından bu konuya girmiyorum. İlerleyen makalelerim de bu konuyuda ayrıntılı şekilde anlatacağım. Şimdilik devam edelim. Diyelim ki veri tabanı olarak MySQL Server’ı seçtik. İşimiz aslında her developer’ın da yaptığı gibi database programming. Biz yazılım ile uğraştığımızı sanıyoruz ama yaptığımız 10 projeden 7/8′i veri tabanı programlamadır. :) Şimdi object-oriented şekilde nasıl uygulamamızı merkezileştireceğimize bakalım.

Bu uygulamada veri tabanı kullanacağımızdan mutlaka veri tabanına sorgu göndereceğiz. Demin söylediğimi hatırlarsak uygulamamızın bütününde bize gereken şeyleri bir yerde toplayacaktık ve yönetimini kolaylaştıracaktık. Şimdi biz SQL sorgularımızı bir yerden geçecek şekilde hazırlıyoruz ve daha sonra sağladığı kolaylığı inceleyeceğiz.

  1.  
  2. <?php
  3. /**
  4. * OOP ile Uygulama Bağımsızlaştırma.
  5. * Lang: PHP DB: MySQL
  6. * Developer: Hakan DAMAR
  7. * @copyright GPL
  8. */
  9.  
  10. Class DBProvider{
  11. private $dbType;
  12. private $dbConn;
  13. private $sqlQuery;
  14.         public function __construct(){
  15.                 // Nesnenin İlk Noktası
  16.         }
  17.  
  18.         public function __destruct(){
  19.                 // Nesnenin Son Noktası
  20.         }
  21.  
  22.         public function Provider($Type,$Connection){
  23.                 $this->dbType = $Type;
  24.                 $this->dbConn = $Connection;
  25.  
  26.         }
  27.  
  28.         public function Query($ExecQuery){
  29.                 $this->sqlQuery = $ExecQuery;
  30.         }
  31.         switch ($this->dbType){
  32.                 case "MySQL":
  33.                 // Transaction için Table Engine Type InnoDB olmalıdır.
  34.                 @mysql_query("BEGIN");
  35.                 // Eğer birden fazla veri tabanı ile çaışıyorsanız!
  36.                 // mysql_query() fonksiyonuna 2. parametreyi veriniz.
  37.                 # $executeQuery = mysql_query($ExecQuery,$this->dbConn);
  38.                 $executeQuery = mysql_query($ExecQuery);
  39.                        
  40.                if ($executeQuery){
  41.                     @mysql_query("COMMIT");
  42.                     // Sorgu Başarılı
  43.                 }else{
  44.                    @mysql_query("ROLLBACK");
  45.                    // Sorgu BAŞARISIZ!!!
  46.                 }
  47.                 break;
  48.                 case "MsSQL":
  49.                         // Ms SQL Server code here… etc…
  50.                 break;
  51.                 case "Oracle":
  52.                         // Oracle Connection here.. etc..
  53.                 break;
  54.                 case "PostgreSQL":
  55.                         // PostgreSQL connection and execute sql query code here.
  56.                 break;
  57.                 default:
  58.                         die("Bu veri tabanı henüz desteklenmiyor.<br>
  59.                         Şimdilik: MySQL,MsSQL,Oracle,PostgreSQL desteklenmektedir.");
  60.                         exit();
  61.         }
  62.   }
  63. }
  64.  
  65. /**
  66. * İlgili Sayfanıza require_once() ederek
  67. * aşağıdaki şekilde kullanabilirsiniz.
  68. */
  69. // Nesnemizi Oluşturduk.
  70. $DAL = new DBProvider();
  71. //Veri Tabanı Türümüzü ve Bağlantımızı Belirttik.
  72. $DAL->Provider("MySQL",$DB->Connection);
  73. //SQL Sorgumuzu Çalıştırdık.
  74. $DAL->Query("SELECT count(*) as TotalUser FROM tbl_user ORDER BY UName DESC");
  75. ?>
  76.  
  77.  

Yukarıdaki kod bize sorgularımızı merkezi tek bir noktadan kontrol etme imkanı verdi. Bizde Transaction yaparak işlem bütünlüğünü sağladık. Bu ders olmadığından diğer tüm özelliklerini de yazmadım. Sadece mantığını anlatmak adına bir kısmını yazdım. Siz bunu geliştirmek adına ekstra olarak bir string temizleme function’ı yazarak gelen sorgularınızı çalıştırmadan önce temizleyebilirsiniz.

Kod’da $DB->Connection(); diye bir parça var. Bu bölümü kodun içerisinde göremiyorsunuz çünkü DB Class’ı da ayrı bir parçasıdır programın. DB Class’ını yazdıktan sonra bağlantı parametrelerini alan Connection isminde bir function ile bu kodu tamamlayabilirsiniz. Tavsiyem Connection() bool bir değer dönsünki Connection State yapmak istediğinizde bunu if gibi karak kontrol mekanizmalarında kullanabilin. İleri de DAL’da yazacağımızdan bu konuya girmiyorum. Çünkü kendisi başlı başına bir konudur. :)

Burada değinmek istediğim ikinci nokta ise Query function’nın içerisinde gördüğünüz Switch döngüsüdür. Bu döngü ile (şimdilik DAL’ı bilmediğimizden) veri tabanı bağımsız şekilde uygulamamızı geliştirmeye devam edebiliriz. Olduda bir gün artık uygulamanızı Ms SQL Server’a geçirmek isterseniz tek yapmanız gereken Provider Function’na set ettiğiniz Type parametresini MsSQL olarak değiştirmektir. Gerekli ayarları yaptıktan sonra artık uygulamanız Ms SQL Server üzerinde başarılı bir şekilde çalışıyor olacaktır.

Gördüğünüz gibi OOP(Nesne tabanlı programlama) ile web uygulamaları geliştirdiğimizde bir sayfaya database connection sağlayıp, güvenli sorgular çalıştırmak için yazacağımız kod satırı 3′ü geçmemektedir. Ayrietten Uygulamalarınızdaki bazı noktaları merkezileştirerek uygulamamızı nasıl bağımsız hale getireceğimizide gördük.

Saygılarımla,

Hakan DAMAR

 
No Comments

Posted in PHP

 

PHP İle Tüm Cookie’leri Silme

09 Apr

Merhaba,

Oxijen Framework’ün parça, parça işinize yarayabilecek kısımlarını function olarak sizlerle paylaşıyorum.

<?php
// Remove All Cookie
foreach ($_COOKIE as $k => $v){
	setcookie($k,"",time()-3600,"/",".hakandamar.com");
}
?>

Bu kod $_COOKIE super global üzerinde dönerek içerisindeki tüm key’leri alıyor daha sonra null’a set ederek boşaltıyor ve geçerlilik süresini bitiriyor.

İyi Çalışmalar.

 
No Comments

Posted in PHP

 

Yeni Zend Server

30 Mar

Zend Server

Merhaba,

Zend firması bildiğiniz üzere PHP dilininde geliştirici firmasıdır. Son olarak çıkarttığı ve benim de test ederek beğendiğim Web Application Server’ı gerçekten güzel hazırlanmış.  Gözlemlediğim kadarı ile Zend firması Microsoft ile haşır, neşir olmaya başladıktan sonra yavaş,yavaş ücretli yazılımlar üretmeye yönelik vizyonununda revizeler yapmaya başladı. Zend Server’da bunun bir habercisi olabilir. Gerçi daha kısıtlı özelliklere sahip ücretsiz bir sürümünüde veriyor ama beğendiğim özellikleride ticari versiyonuna eklemiş. :) Zaten sitesindeki açıklamarıda okursanız eğer kritik PHP uygulamaları hazırlıyorsanız ticari versiyonunu almnızı öneriyorlar.

Kurulumda size PHPmyAdmin’den MsSQL ile işlem yapabilmeniz için gerekli olan eklentilere kadar kurup kurmaması gerektğini sorarak otomatik kurulumlarını gerçekleştiriyor. Kurulum işlemi bittiğinde yönetici şifrenizi oluşturmanız için sizi ilgili sayfaya yönlendiriyor. Güzel bir web arayüzü ile Zend Server’ı yönetebiliyorsunuz. Şifrenizi oluşturduktan sonra karşınıza gelen ekran şöyle oluyor.

Zend Server Login

Giriş yaptıktan sonra ise size çalışan servislerin ve görevlerinde bulunduğu ergonomik bir arayüz gösteriyor.

Zend Server  - Home Page

PHP Info sekmesine geldiğinizde ise en çok hoşuma giden yanlarından bir diğeri ile karşılaşıyorsunuz. PHP’yi FastCGI modunda kurarak çok daha hızlı çalışmasını sağlamışlar.

Son olarak toparlayacak olursak eğer bir web server için astronomik rakamlar açıklamazlarsa, ticari uygulamalarda veya onların tabiri ile kritik php web uygulamalarında tercih edilecek bir web sunucusu hazırlamışlar.  Ben 10 üzerinden 7 verdim betasına. İstikrarlı sürümü çıktığında tekrar daha ayrıntılı inceleme fırsatı bulursam sizede buradan gelişmeleri yazarım.

Saygılarımla.

 
No Comments

Posted in PHP

 

PHP ve MsSQL Server 2008 İle Hızlı Uygulamalar

15 Mar

Merhaba,

Bu yazımda sizlere Microsoft’un değişen open source vizyonu ve PHP denildiğinde akla gelen MySQL veri tabanının yavaş,yavaş yıkılmaya doğru ilerlediğinden bahsedeceğim. Bildiğiniz üzere kısa bir süre önce MySQL Sun Microsystems tarafından 1 milyar dolar’a satın alınmıştı. Bunun ardından herkesin aklında oluşan acaba MySQL ücretli olacak mı? sorusunun cevabını henüz alamadık ama zaten MySQL Server Enterprise Edition ücretli.

Şimdi hazır konu ücretlere değinmişken şu Microsoft’un ürünlerine gelelim. Burada konu olan MsSQL Server ailesi bilindiği üzere ücretlidir. Fakat Express Edition olarak ücretsiz sürümleride mevcut. Yanlış hatırlamıyorsam bu sürümü 4GB  db stroge alanı ile sınırlandırılmıştı. Şimdi birde konuya şu açıdan bakın. Profesyonel bir kadronun yıllarca emek sarf ettiği bir yazılımı alarak kendiniz uygulamalar geliştirmek istiyorsunuz. Fakat siz uygulamalarınızı geliştirip satarak para kazanırken. Microsoft ücretle satıyor diye tepki gösteriyorsunuz. Üstelik ücretsiz bir sürümünüde size sunduğu halde. Şimdi diyeceksiniz ki onun alan sınırı var. Doğru var ama 4GB’lık bir veri tabanına ulaştıysanız zaten siz bu uygulamadan veya siteden kar elde ediyorsunuzdur ve artık bir üst sürümünü almanın zamanı gelmiştir. Biraz bireyselden uzaklaşıp kurumsal uygulama geliştirme tarafına geçecek olursak. Bu sınır firmalar için yetmeyebilir. Peki bu durumda ne yapacağız? Tabii ki bunu Microsoft’ta düşünmüş ve Developer Edition diye bir sürüm çıkartmış. Üstelik Microsoft SQL Server 2008 Developer Edition’ın fiyatı sadece 50$(dolar). Evet, yanlış okumadınız.  Şimdi burada MySQL v.s. MsSQL yapmayacağım şuan için MsSQL Server 2o08 karşılaştırma yapılamayacak kadar farklarla zaten liderlik tahtından inmeyecek gibi duruyor. Birde bildiğiniz üzere IIS 7.0 üzerine PHP’yi FastCGI modülu olarak kurarsanız Apache server’dan %70 daha hızlı çalışmaktadır. Bunu da yanlış okumadınız. :)   Üstelik Microsoft bunlarlada kalmayarak Windows Server’lar için optimize edilmiş özel PHP sürümlerinide oluşturmaya başladı. http://windows.php.net adresi altından bu sürümlere ulaşabilirsiniz.  IIS tarafındaki FastCGI ile ilgili bilgi almak istersenizde http://www.iis.net/php adresinden bilgi edinebilirsiniz. Şimdi bu bilgileride yanımıza alarak yazımıza devam edelim.

Kısa bir süre önce duyurulan Microsoft MsSQL Server 2005 Driver For PHP diye bir PHP eklentisini Microsoft kullanıcılara sunmuş ve şimdiye kadar pek görmeye alışık olmadığımız PHP ile ilgili makalelerini MSDN’e eklemiş bulunmaktadır. SQL Server 2005/2008 Driver ile ilgili açıklamayı ve anlatımı daha sonraki teknik makalemde yapacağım. Geçen gün IIS 7.0 üzerine FastCGI olarak kurduğun PHP 5 ve MsSQL Server 2008 ile yaptığım bazı testler beni bu yazıyı yazmaya iten en büyük sebeblerden biridir. Hız farkı gerçekten tahmin ettiğimin çok üzerinde çıkarak beni şaşırttı ve artık dedim ki PHP ile MySQL yerine çok güçlü bir kullanıcı arayüzü sunan MsSQL Server’ı kullanmanın zamanı geldi. Üstelik iletişim v.s. gibi problemlerde yaşayacağınızı sanmıyorum. PHP kurulumunuza Microsoft’un sunduğu SQL Server Driver’ı kurarak bunun üzerinden çalışırsanız çok rahat MySQL ile yaptığınız işlemlerinizi gerçekleştirebilirsiniz. Tabi size sağladığı sadece performans değil. Tür güvenliği ve işlem bütünlüğünden daha sayamayacağım bir çok konuya kadar destek veren MsSQL Server 2008 gerçekten denemeniz gereken bir veri tabanı eğer ilk defa kuracaksanız size biraz karmaşık gelebilir fakat biraz öğrendikten sonra vazgeçebileceğinizi sanmıyorum.

Silverlight ile yapılmış Türkçe çok güzel bir siteside mevcut. http://www.sqlenerji.com adresinden özelliklerini inceleyebilir,indirebilir veya daha ayrıntılı bilgi alabilirsiniz.

Saygılarımla.

 
No Comments

Posted in PHP

 

HTTP REFERER Kontrolü

11 Feb

Merhaba,

Sitenize bazı sitelerden link verilmesini engellemek veya sadece istediğiniz sitelere izin vermek isterseniz. Kullanıcının geldiği referans site bilgisini alarak buna göre işlemlerinizi yapabilirsiniz. Öncelikle belirtmek isterim. Güvenilir bir yöntem değildir. Biraz uğraşma ile aşılabilir.

<?php
/**
 * @author Hakan DAMAR
 * @copyright www.hakandamar.com
 */
$RegexURL = parse_url($_SERVER['HTTP_REFERER']);
$Allow_Domain_Spaces =  $RegexURL['host'];
$DomainArr = array("hakandamar.com","inter.gen.tr","uploadmax.net","azbul.net","mssql.us");

if(in_array($Allow_Domain_Spaces,$DomainArr)) {
	print "Geçerli bir siteden istek yapıldı.";
	// Çalıştırılacak Kodlar
}else {
	print "$Allow_Domain_Spaces sitesinden bu sayfaya erişim engellenmiştir.";
	die("Lütfen, Site yönetimi ile iletişime geçiniz.");
	exit();
}
?>

Kısa bir süre önce bir projede kullanmam gerekti. İnternettede rastlamadım. Buradan paylaşmak istedim.

İlgili Kaynaklar;
1. PHP.NET:
— http://www.php.net/manual/tr/function.in-array.php
— http://www.php.net/manual/tr/function.parse-url.php
— http://us3.php.net/manual/tr/reserved.variables.server.php
— http://us3.php.net/manual/tr/ref.array.php

İyi Çalışmalar.

 
No Comments

Posted in PHP