Ara 27
Browser’lar varsayılan olarak javascript, css ve resimler gibi harici dosyaları önbelleğe (cache) alırlar. Genellikle bunu sayfa yeniden açıldığında daha hızlı yükleyebilmek amacıyla yaparlar. Bazen css veya javascript dosyalarımızın browser tarafından ön belleğe alınmasını istemeyiz. Bu sorunu aşağıdaki gibi kolayca halledebilirsiniz.
<link href="/stylesheet.css?<?php echo time(); ?>" rel="stylesheet" type="text/css" />
Aşağıdaki gibi bir sonuç alırsınız. time() fonksiyonu sonucunda elde edilen değer sürekli değişeceği için bu şekilde tanımlanan css veya javascript etiketi browser tarafından farklı bir dosya olarak algılanıp yeniden yüklenecektir.
<link href="/stylesheet.css?1293444465" rel="stylesheet" type="text/css" />
Ara 27
Web sitenizde birden fazla css dosyası kullanıyorsanız sayfanızın yüklenmesi uzun sürebilir. Aşağıdaki php örneğini kullanarak css dosyalarınızı sıkıştırıp tek bir dosyada birleştirebilirsiniz. Hem tek dosya olması hem de gereksiz boşlukların ve yorumların temizlenmesi css dosyalarınızın daha çabuk yüklenmesini sağlayacaktır.
<?php
header('Content-type: text/css');
ob_start("compress");
function compress($buffer)
{
/* yorumlar temizleniyor */
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
/* tablar, boşluklar, satırlar temizleniyor */
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
return $buffer;
}
/* css dosyalarınız */
include('stylesheet.css');
include('typography.css');
include('grid.css');
include('print.css');
include('ozel.css');
ob_end_flush();
?>
Sitenizin header bölümünde css dosyalarınız yerine oluşturduğunuz bu php dosyasından istekte bulunanız yeterli.
Kas 29
Arama sonuçlarında aranan kelimeleri renklendirerek veya farklı bir biçimde göstererek vurgulamak isterseniz aşağıdaki fonksiyonu kullanabilirsiniz. Fonksiyon metin içerisindeki kelimeleri regular expression ile bulup değiştiriyor.
<?php
function vurgula($metin, $kelimeler)
{
if (!is_array ($kelimeler) || empty ($kelimeler) || !is_string ($metin))
{
return false;
}
$kelimeler = implode ('|', $kelimeler);
return preg_replace ('@\b('.$kelimeler.')\b@si', '<strong style="background-color:red">$1</strong>', $metin);
}
echo vurgula('Bu metindeki Linux, Apache, Php, Mysql kelimeleri renklendirilecek.', array ('Linux', 'Apache', 'Php', 'Mysql'));
?>
Kas 27
Siz de bir twitter kullanıcısı iseniz bilirsiniz, yazacağınız mesajlar 140 karakterle sınırlıdır. Bu sebepten mesajlarınıza bir link eklemek istediğinizde sıkıntı yaşayabilirsiniz. Bu durumu aşmak için internette çeşitli url kısaltma servisleri mevcut. Bunlardan bazılarını api’leri yardımı ile php uygulamalarımızda kullanabiliriz.
İlk olarak üyelik gerektirmeyen Tinyurl.com ile başlayalım :
function getTinyUrl($url)
{
return file_get_contents("http://tinyurl.com/api-create.php?url=".$url);
}
$turl = getTinyUrl('http://www.lampforweb.com/index.php/diger/php-url-kisaltma/');
echo $turl;
//http://tinyurl.com/337y28b
Tinyurl.com servisinin kullanımı kolay fakat alan adı nedeni ile karakter sayısında dezavantajları olabiliyor. Alternatif olarak bit.ly servisini kullanabiliriz. bit.ly için öncelikle üye olmanız ve http://bit.ly/a/your_api_key adresinden API kodunuzu almanız gerekiyor.
function getBitly($url)
{
$content = file_get_contents("http://api.bit.ly/v3/shorten?login=YOURLOGIN&apiKey=YOURAPIKEY&longUrl=".$url."&format=xml");
$element = new SimpleXmlElement($content);
$bitly = $element->data->url;
if($bitly)
{
return $bitly;
}else
{
return '0';
}
}
$burl = getBitly('http://www.lampforweb.com/index.php/diger/php-url-kisaltma/');
echo $burl;
//http://bit.ly/eWgVL4
Eki 26
Php ile proje geliştiren herkesin mutlaka veritabanıyla az veya çok mutlaka işi oluyordur. En ufak veritabanı işlemi için bile bir kaç satır kod yazmak gerekir.
$sorgu = "SELECT * FROM projeler WHERE aktif='E' ";
$sonuc = mysql_query($sorgu);
if (mysql_num_rows($sonuc) > 0)
{
$veri = mysql_fetch_object($sonuc);
}
Bir şekilde bu kodları uğraşıp yazmış olsak bile ileride projemiz için kullandığımız veritabanı uygulamasını değiştirmek istediğimizde bütün veritabanı kodlarında php komutlarını belli bir veritabanı uygulamasına göre kullandığımız için neredeyse tüm kodları yeniden yazmamız gerekecektir. (mysql_query, mysql_fetch_object gibi)
Peki ne yapmalıyız?
Hem kod yazımını kolaylaştırmak hemde düzgün bir kod yapısı sağlamak hemde ileriye dönük bir kod yapısı kurmak için özel bir veritabanı sınıfı veya fonksiyonlar kullanılabilir. Bu yapıyı ister kendiniz oluşturun isterseniz hazır kütüphanelerden faydalanın. Ama mutlaka böyle bir yapı kullanın.
ezSQL
ezSQL size böyle bir yapıyı kolayca kullanabileceğiniz bir şekilde sunuyor. Bir çok veritabanı programını destekliyor ezSQL. Aynı zamanda wordpress’in veritabanı sınıfı olan wpdb ezSQL kullanılarak geliştirilmiştir.
Yukarıdaki veritabanı işlemlerini ezSQL ile yazmak istesek aşağıdaki gibi bir satır yeterli olacaktır.
$veri = $db->get_row("SELECT * FROM projeler WHERE aktif = 'E' ");
Bu kadar basit
ezSQL Kullanımı
Öncelikle bu adresten ezSQL kütüphanesini indiriyoruz. İndirdiğiniz zip dosyasını proje dizinine açın. ezSQL’i projemizde kullanabilmel için iki dosyaya ihtiyacımız var birincisi ezSQL çekirdek dosyası (ez_sql_core.php) diğeri ise kullandığımız veritabanı uygulamasına ait dosya. (mysql için ez_sql_mysql.php)
Şimdi veritabanı işlemleri için ezSQL nesnesini oluşturalım.
include_once "ez_sql/shared/ez_sql_core.php";
include_once "ez_sql/mysql/ez_sql_mysql.php";
$db = new ezSQL_mysql('db_user','db_password','db_name','db_host');
Artık $db nesnesini kullanarak tüm veritabanı işlemlerimizi gerçekleştirebiliriz.
Sorgu örnekleri
Tabloya kayıt ekleme. Bu metod geriye Insert ID’yi döndürür.
$db->query("INSERT INTO projeler (id, proje_adi, baslangic_tarihi, aktif) VALUES (NULL,'ezSQL Sınıfı', NOW(), 'E')");
Kayıt güncelleme.
$db->query("UPDATE projeler SET aktif = 'H' WHERE id= '5' ");
Tek satır veri alma
$veri = $db->get_row("SELECT proje_adi, baslangic_tarihi FROM projeler WHERE id = 5");
echo $user->name;
echo $user->email;
Tek bir değer alma
$deger = $db->get_var("SELECT count(*) FROM projeler WHERE aktif= 'E' ");
echo $deger;
Birden fazla satır kayıt alma
$sonuclar = $db->get_results("SELECT proje_adi, baslangic_tarihi FROM projeler");
foreach ( $sonuclar as $veri )
{
echo $veri->proje_adi;
echo $veri->baslangic_tarihi;
}
Diğer örnekler ve daha detaylı bilgi için burayı kullanabilirsiniz.
Umarım projelerinizi daha kolay ve hızlı bir şekilde yürütmenizi sağlayacak bir yazı olmuştur.
Ara 27
Netbeans editör kullananlar netbeans’ın 6.5.1 versiyonundan sonra html kodlarında “unknown html tag” gibi bir hata alabilirler. Bu hatadan kurtulmak için netbeans 6.8′i kurduktan sonra kurulum dizinindeki “/home/netbeans-6.8/etc/netbeans.conf” dosyasını açıp “netbeans_default_options=” ile başlayan satırın sonuna “–locale en:US” seçeneğini ekleyin.
netbeans_default_options="-J-client -J-Xverify:none -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=200m -J-Dapple.laf.useScreenMenuBar=true -J-Dsun.java2d.noddraw=true --locale en:US"
Oca 23
Samashing Magazine sitesi Php uygulama geliştiricilerin kesinlikle işine yarayacak 50 adet kullanışlı bir araç listesi oluşturmuş. Liste kategorilendirilmiş. Aradığınız veya ihtiyacını olan bir çok şeyi bu listede bulabilirsiniz.
Hata Ayıklama Araçları
Test ve Optimizasyon Araçları
Dökümantasyon Araçları
Güvenlik Araçları
Resim ve Grafik Oluşturma Araçları
Php Kod Düzenleyiciler
Versiyon Kontrol Sistemleri
Kullanışlı Eklenti, Uygulama ve Kütüphaneler
Online Php Araçları ve Kaynakları
Php Frameworkler
Php Editörleri ve IDE’ler
Ara 22
Php sayfaları arasında POST veya GET metoduyla gelen değerleri veya sayfa içindeki dizi veya nesnelerin alt elemanlarıyla beraber değerlerini taşımak için aşağıdaki yöntemi kullanabilirsiniz.
form.html // Form verilerinin POST metodu ile gönderileceği form sayfası.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Form</title>
</head>
<body>
<form action="islem1.php" method="POST">
Adı : <input type="text" name="adi" size="30"><br>
Soyadı : <input type="text" name="soyadi" size="30"><br>
Email : <input type="text" name="email" size="50"><br>
Telefon : <input type="text" name="Telefon" size="30"><br>
Şehir : <select name="sehir">
<option>İstanbul</option>
<option>Ankara</option>
<option>İzmir</option>
</select><br>
<input type="submit" value="Gönder">
</form>
</body>
</html>
islem1.php //Formdan POST metoduyla gelen değerler islem2.php dosyasına aktarılacak.
<?
$param=base64_encode(serialize($_POST));
$link = 'islem2.php?data='.$param;
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>1. Adım</title>
</head>
<body>
<a href="<?=$link?>">2. Adıma Geç</a>
</body>
</html>
Burada form verilerini aktarmak için php’nin serialize ve base64_encode fonksiyonlarını kullanıyoruz. Serialize fonksiyonu bir değişken(dizi veya nesne) içindeki değerleri string’e dönüştürür. base64_encode fonksiyonu ise verilen değeri 64 bit olarak şifreler ve yine string bir değer oluşturur. Oluşturduğumuz bu string değeri sayfalar arasında taşımak, formdaki her bir değeri ayrı ayrı yazıp taşımaktan daha kolaydır. Hatta bazı durumlarda değişkenlerde değişebileceği için bu yöntem daha sağlıklı olacaktır.
<?
$renk[0]='mavi';
$renk[1]='kırmızı';
$renk[2]='yeşil';
$data = serialize($renk);
echo $data;
//a:3:{i:0;s:4:"mavi";i:1;s:10:"kırmızı";i:2;s:6:"yeşil";}
$data=base64_encode($data);
echo $data;
//YTozOntpOjA7czo0OiJtYXZpIjtpOjE7czoxMDoia8Sxcm3EsXrEsSI7aToyO3M6NjoieWXFn2lsIjt9
?>
islem2.php //islem1.php sayfasındaki form değerleri bu sayfaya aktarıldı.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>2. Adım</title>
</head>
<body>
<?
if(isset($_GET['data']))
{
$_POST=unserialize(base64_decode($_GET['data']));
echo 'Adı : '.$_POST['adi'].'<br>';
echo 'Soyadı : '.$_POST['soyadi'].'<br>';
echo 'Email : '.$_POST['email'].'<br>';
echo 'Şehir : '.$_POST['sehir'].'<br>';
}
?>
</body>
</html>
islem1.php dosyasından aktarılan değerleri yeniden kullanabilmemiz için yaptığımız işlemlerin tersini gerçekleştirmemiz gerekiyor. base64_encode ile şifrelediğimiz veriyi base64_decode fonksiyonu ile dönüştürüyoruz. serialize ile string hale dönüştürdüğümüz verieri de unserialize ile dönüştürüyoruz. Artık değişkenlerimizi sayfa içerisinde kullanabiliriz.
Ara 17
Aşağıdaki assoc_array2xml php sınıfı ile dizileri xml’e, xml verilerini de php dizilerine dönüştürebilirsiniz. Daha çok php4 kullananlar bu sınıfa ihtiyaç duyacaktır. Php5 kullananlar SimpleXML sınıfı ile aynı işlemleri ve daha fazlasını yapabilirler. SimpleXML ile ilgili örnekleri ve bilgileri yakında yayınlarız.
<?php
class assoc_array2xml
{
var $text;
var $arrays, $keys, $node_flag, $depth, $xml_parser;
function array2xml($array)
{
$this->text="<array>";
$this->text.= $this->array_transform($array);
$this->text .="</array>";
return $this->text;
}
function array_transform($array)
{
foreach($array as $key => $value)
{
if(!is_array($value))
{
$this->text .= "<$key>$value</$key>";
}
else
{
$this->text.="<$key>";
$this->array_transform($value);
$this->text.="</$key>";
}
}
return $array_text;
}
function xml2array($xml)
{
$this->depth=-1;
$this->xml_parser = xml_parser_create();
xml_set_object($this->xml_parser, $this);
xml_parser_set_option ($this->xml_parser,XML_OPTION_CASE_FOLDING,0);
xml_set_element_handler($this->xml_parser, "startElement", "endElement");
xml_set_character_data_handler($this->xml_parser,"characterData");
xml_parse($this->xml_parser,$xml,true);
xml_parser_free($this->xml_parser);
return $this->arrays[0];
}
function startElement($parser, $name, $attrs)
{
$this->keys[]=$name;
$this->node_flag=1;
$this->depth++;
}
function characterData($parser,$data)
{
$key=end($this->keys);
$this->arrays[$this->depth][$key]=$data;
$this->node_flag=0;
}
function endElement($parser, $name)
{
$key=array_pop($this->keys);
if($this->node_flag==1)
{
$this->arrays[$this->depth][$key]=$this->arrays[$this->depth+1];
unset($this->arrays[$this->depth+1]);
}
$this->node_flag=1;
$this->depth--;
}
}
$dizi=array('seviye1_1'=>'45','seviye1_2'=>array('seviye2_1'=>'56','seviye2_2'=>'78'),'seviye1_3'=>'62');
$cevir= new assoc_array2xml;
$xml=$cevir->array2xml($dizi);
echo htmlentities($xml);
echo "<br>";
$xml_dizi=$cevir->xml2array($xml);
print_r($xml_dizi);
?>
Ara 03
PHP’nin yaratıcısı ve geliştiricisi Zeev Suraski ile PHP dilinin aktif geliştiricilerinden biri olan Derick Rethans, 24 Ocak 2009‘da Taksim Nippon Otelde düzenlenen web programcıları platformu etkinliği için Türkiye’ye geliyorlar.
Golden Horn Ventures’un liderliğinde gerçekleştirilen etkinlik hakkında bilgi almak ve diğer katılımcıları görmek için www.webprogramcilariplatformu.org adresini ziyaret edebilirsiniz. Etkinlik programı için buraya, kayıt yaptırmak için buraya.
Web programcılarının kaçırmaması gereken bir etkinlik…
Son Yorumlar