31 Temmuz 2008 Perşembe

PHP dosyanıza resim (dosya) gömmek

Böyle birşeye neden ihtiyaç duyarsınız?

En büyük nedeni, tek dosyadan oluşan bir script yazıyor olabilirsiniz (konuyla ilgili olarak PHP ile tek dosyadan oluşan proje üretmek dökümanını okuyabilirsiniz). Ya da yazdığınız projede kullandığınız ufacık ikonların bir sürü dosya şeklinde durmasını istemiyor olabilirsiniz. Başka bir tercih de dosyalarınızı bir veritabanında tutuyormuşcasına tek dosyada depolamak isteyebilirsiniz. Çok küçük boyutlu resimler için bahsettiğim konu daha yaygın kullanılır.



Yani yazdığınız betik kendi içindeki css kuralları ile şekillendirilmiş, ikonlarla da güçlendilirmişse ve ikonlar için ek dosyalar koymak istemiyorsanız bu yöntemi kullanabilirsiniz.





Teknik



Aslında yapılan iş oldukça basit. Öncelikle dosyalarımızı php dosyamızın içine nasıl gömeceğiz? PHP dosyalarımız ascii dosyalar, binary içeriği alabilmek ve saklayabilmek için base64 ile şifreleyeceğiz. Sonuçta ortaya çıkacak olan şey bir ascii şifre olacaktır. Dosya boyutuna göre bu şifrenin uzunluğu artacaktır. Unutmayın ki bu anlattığım yöntem tamamen ufak dosyaları gömmek içindir 100kb üzeri dosyaları php dosyanıza gömerseniz, ya da php dosyanızın boyutu megabyte'ları aştığı zaman işlenmesi zorlaşacaktır. Birkaç ufak dosya için kullandığınız sürece verimli olacaktır.



Dosyalarımız encode etmek için bir kod kullanacağız. Bu işlemi başka bir php dosyası oluşturarak yapın.



  1. <?php

  2.  

  3. $dosya = 'resim.gif';

  4.  

  5. // dosya icerigini okuyalim

  6. $dosya_binary = fopen($dosya, "r");

  7. $icerik_binary = fread($dosya_binary, filesize($dosya));

  8. fclose($dosya_binary);

  9.  

  10. // binary icerigi ascii'ye base64 ile cevirelim

  11. $icerik_ascii = base64_encode($icerik_binary);

  12.  

  13. print $icerik_ascii;

  14.  

  15. ?>


Bu kod resim.gif dosyasını ekrana ascii karakterlerle şifrelenmiş şekilde uzun bir metin şeklinde basacaktır. Bu metini kopyalayarak kullanacağız ve orjinal proje dosyamız şöyle olacak



  1. // dosyalar

  2. $dosyalar["resim.gif"] = "R0lGODlhEAAQAMQAAGZmZsbGxaSko4OEgxl4ueT//3G59ejo6Lu7u9zd3".

  3.                          "DOMxXp6eqjU/5mZmX+RmdPU1LKzsfb29v///3u75a2tpY6OjczMzDqPz6".

  4.                          "ysq////wAAAAAAAAAAAAAAAAAAAAAAACH5BAUUABkALAAAAAAQABAAAAW".

  5.                          "JYIaNJDlNWZpiUuu2U4GqrHPd+MTItHQZEoPQoNvNWISkkjBROBUpgQQT".

  6.                          "qVojj6wgOg0IAAEAQBBgbTMNiSCRALDDCWkjlRYcDoBD+C5PVSQNCAgAg".

  7.                          "wKCaRV+gBZfYWIWiCkDEhVslpZ/AykLlBCen55/C5sSAw2nqKeToxmcL6".

  8.                          "8trAuztLW1GSEAOw==";


Yukarıda gördüğünüz şey aslında çok uzun bir string. Yani o satırlar yan yana bitişik fakat ben bu dökümanda açıkca görülebilmesi için bu hale getirdim. Bu gördüğünüz string 258 byte'lık 16x16'lık bir ikonun base64 şifresidir. 258 byte'ın bu kadar sürdüğünü düşünürseniz 10-20kb'lık bir dosyanın ne kadar uzun süreceğini tahmin edebilirsiniz. Onun için büyük dosyalarınızı php dosyanıza gömmeyin.



Yukarıdaki şekilde tüm dosyalarınızı base64_encode'dan geçirip $dosyalar dizisine dosyanın adını taşıyan indiste yazın.

Unutmayın bu dizi proje dosyanızın en üstünde tanımlanmalı. Yani proje dosyanızın içinde her türlü işlemi yapıyor olabilirsiniz ama bu teknikteki kodlar dosyanın en üstünde durmalı.



Neyse, dosyalarınızı $dosyalar dizisine kendi adları indis olacak şekilde kaydettiniz. php dosyanızın boyutu kabardı farkındaysanız (kontrol ediniz). Şimdi bu tanımların ardına ufak bir kod ile işlemi bitireceğiz.



  1. if( $_GET["islem"] == 'dosya' ){

  2.   if( array_key_exists($_GET["dosya"], $dosyalar) ){

  3.     die( base64_decode( $dosyalar[ $_GET["dosya"] ] ) );

  4.   }else{

  5.     die("Dosya bulunamadı!");

  6.   }

  7. }

  8.  

  9. // projenizin normal işlemlerini bu satırdan sonra

  10. // yapabilirsiniz.


Eğer get methodu ile islem değişkeni dosya olarak gelmişse ve get methodu ile dosya değişkeninin içeriği bizim $dosyalar dizisinde indis olarak varsa $dosyalar dizisindeki o elemanın içeriğini base64_decode edip ekrana basıyoruz. Yoksa dosya bulunamadı hatası verip duruyoruz.





Nasıl kullanacaksınız?



Projenin devamındaki bir kısımda



  1. <img src="index.php?islem=dosya&dosya=resim.gif" ...>


şeklinde kullandığınızda dosyanız resim olarak görüntülenecektir. Aynı şeyi bir arşiv dosyası için de yapabilirsiniz.



  1. <a href="index.php?islem=dosya&dosya=kurulum_dokumani.pdf">Dosyayı indirmek için tıklayın</a>


gibi.





Dosya deposu



Yukarıdaki kodları ayrı bir dosya olarak kaydedip dosyalarınızı tek parça hale getirdiğiniz bir veritabanı gibi düşünebiliriz. Yani



  1. <?php

  2. // dosyalar

  3. $dosyalar["..."] = "....";

  4. $dosyalar["..."] = "....";

  5.  

  6. // gosterelim

  7. if( array_key_exists($_GET["dosya"], $dosyalar) ){

  8.   die( base64_decode( $dosyalar[ $_GET["dosya"] ] ) );

  9. }else{

  10.   die("Dosya bulunamadı!");

  11. }

  12.  

  13. ?>


Bu dosyaya goster.php, resimler.php veya indir.php diyebilirsiniz. Kullanırken yukarıda index.php olarak gösterdiğimiz yola dosyanızın adını yazın.

RSS export mekanizması php ile

Sitemize neden RSS hizmeti koymalıyız, Ne işimize yarar?

RSS günümüz teknolojileri arasında en yaygın takip standardı haline geldi. Şu an insanlar RSS okuyucu programları veya web uygulamalarına takip ettikleri siteler/forumlar/haber kaynaklarına ilişkin kayıtları tek standart'da okumak için ekliyor ve her gün binlerce insan bu sistem sayesinde birçok siteye girmeden tek merkezden çoğu haberi takip edip çoğu gelişmeden haberdar olabiliyor.



  1. header('Content-type: text/xml');


kodunu basıyoruz sayfanın çıktı basılmamış bir kısmına.



Şimdi size 2 kayıtlık bir XML çıktısı örneği verip açıklayayım :



  1. <?xml version="1.0" encoding="iso-8859-9"?>
  2. <rss version="2.0">
  3.   <channel>
  4.  
  5.     <title>MFYZ.Com Etkinlik Takvimi</title>
  6.     <link>http://www.mfyz.com/?takvim</link>
  7.     <description>Etkinlik Takvimi</description>
  8.     <language>en-us</language>
  9.     <generator>MFYZ.Com RSS Exporter v0.1</generator>
  10.     <managingEditor>Mehmet Fatih YILDIZ</managingEditor>
  11.  
  12.     <item>
  13.       <title>MFYZ v0.6 Test Sürüşü</title>
  14.       <link>http://www.mfyz.com/?takvim</link>
  15.       <pubDate>Sat, 29 Jul 2006 21:00:00 GMT</pubDate>
  16.       <description><![CDATA[ Bu etkinlige ait aciklama ]]></description>
  17.     </item>
  18.  
  19.     <item>
  20.       <title>Linux Şenliği 4.Gün</title>
  21.       <link>http://www.mfyz.com/?takvim</link>
  22.       <pubDate>Sat, 13 May 2006 21:00:00 GMT</pubDate>
  23.       <description><![CDATA[ HTML etiketleri kullanabilirsiniz. RSS okuyucunuzun yorumlamasýna göre gosterilecektir. ]]></description>
  24.     </item>
  25.  
  26.   </channel>
  27. </rss>


Bu gördüğünüz kod RSS işlem sayfanız tarafından çıktısı yapılmış TÜM RSS örneğini ifade ediyor.



  1. <item>
  2.   <title>MFYZ v0.6 Test Sürüşü</title>
  3.   <link>http://www.mfyz.com/?takvim</link>
  4.   <pubDate>Sat, 29 Jul 2006 21:00:00 GMT</pubDate>
  5.   <description><![CDATA[ Bu etkinlige ait aciklama ]]></description>
  6. </item>


kod bloğu ise sizin for veya while gibi bir döngü mekanizması ile kayıtlarınızı dönüp çıktısını alacağınız kısımdır. Bunun dışında kalan kısımlar (öncesindeki kısım ve sonrasindaki kısım) sizin statik basacağınız bölümdür.



Burada dikkat edilmesi gereken nokta pubDate olarak çıktı vereceğiniz tarih yukarıda gödrüğünüz formatta olmak zorundadır.



Bu tarih formatını "Y-m-d H:i:s" formatındaki genel kullanımdan bu formata;



  1. gmdate( 'D, d M Y H:i:s', $tarihinize_ait_degisken ) . " GMT"


ile oluşturabilirsiniz.



2.önemli konu ise kod olarak basacağınız diğer string'ler yani title ve description etiketlerinin içerisine ekleri ile basmanızdır. Tahmin edeceğiniz gibi link etiketinde ise bu gönderinize ait url/link olacak. RSS çıktısı basan işlemler bundan ibaret.



Ben dinamik gönderileri basarken tüm kayıtlarımı RSS'e yazdırmıyorum. RSS okuyucular genelde yeni eklenen kayıtları saptayıp onları kullanıcıya gösterir. Bu yüzden sitenizde RSS export edeceğiniz kayıt kümesinin güncellenme yoğunluğuna bağlı olarak maksimum 50-100 kayıt bastırın. Çünkü eğer büyük boyutta bir RSS çıktınız olursa, hem kullanıcılar tarafından bunun güncellenmesi zor/uzun olacaktır. Hemde gereksiz kayıtları her seferinde boşuna transfer ettirmiş olursunuz.





13 Temmuz 2008 Pazar

php de ICONV

ICONV
Bu fonksiyon kodlamalar arasında dönüşüm sağlayabiliyor.
Aşağıdaki kod ISO-8859-9 ile kodlanmış metni UTF-8 'e dönüştürüyor. PHP 4.0.5 ve üzeri sümler içindir.
$kayit = iconv('ISO-8859-9', 'UTF-8', 'Türkçe karakterler ÜĞİŞÇÖ'); echo $kayit;

11 Temmuz 2008 Cuma

Kur hesaplama phpprogramlama

Php de dolar kur hesaplama $ işareti








 

Kur dolar hesap


<?

Define(‘kur’,1,25);

Echo 1000*kur;


?>

 

arttırma eksiltme oparötörü php programlama

artırma eksiltme oparötörü kullanımı phpprogramlama









 

--   ++ operatörleri


<?

$a=10

$b=$a--;                                      çıktısı 10

Echo $b;                                                  9    

Echo $b;


?>

 

Not ortalaması hesaplama phpprogramlama

Vize final notları ile not ortalamasını bulan php program kodu








 

<?


$d[0][‘ad’]=’ali’;

$d[0][‘vize’]=30;

$d[0][‘final’]=80;


$d[1][‘ad’]=’veli’;

$d[1][‘vize’]=70;

$d[1][‘final’]=90;


Echo $d[0][‘ad’].”:”;

Echo $d[‘vize’]*0,4+$d[0][‘final’]*0,6;


?>

 

Birleştirme oparatörü php de








 

Birleştirme oparatörü “.”

<?


$a=”ali”;$b=”can”;

$c=”merhaba”,$a.$b;

Echo $c;


?>

 

Php info php ye giriş








 

PHP


Phpinfo= Bilgisayarda yüklü olan php bilgilerini bize verir.


Local host Bağlanma;


 


<?

echo mysql_connect("localhost", "root", "");


phpinfo();



?>


 

Eşitliğini kontrol eden php program kodu

Sayı eşitmi değilmi kontrol eden php programı








 

<?


$a=3;

if ($a==0) echo "a sıfır eşit";

else if ($a>0) echo "a sıfırdan büyük";

else echo "a sıfırdan küçük";


?>


 

1 den 100 kadar çift sayıların toplamı

1 den 100 kadar çift sayıların toplamı php kodu


  



$t=0;

for ($x=1; $x<=100; $x++)

if ($x%2<>0) contine;

$t=$t+$x;

echo "toplam : $t";

?>



php de çarpma işlemi

php de çarpma işlemi kodları








 

<?


echo "<table border=1>";


for ($x=1; $x<=10; $x++)


{

echo "<tr>";

for ($y=1; $y<=10; $y++)

{

echo "<td>";


echo $x*$y;


echo "</td>";


}



echo "</tr>";


}


echo "</table>";


?>

 

0 dan 100 e kadar toplama

0 dan 100 e kadar toplama yapan php dilindeki kodu








 

<?


$t=0;


for ($x=0; $x<=100; $x++)



$t=$t+$x;



echo "toplam : $t";


?>