Css, JavaScript ve Resim Dosyalarında Tarayıcı Önbelleği

Bildiğiniz gibi tarayıcı bu dosyaları sürekli okumamak için önbelleğe alıyor.. Dosyalarda bir değişiklik yapsak bile, kullanıcının bunu görebilmesi için ya bir süre beklemesi gerekiyor ya da ctrl + shift + r ile önbelleği temizleyip yenilemesi gerekiyor.. Hal böyle olunca çoğu kullanıcı yaptığınız güncellemleri çok geç görüyor buda projede sorunlara yol açabiliyor.. Bu yüzden küçük bir hile yaparak bu sorunu çözebiliriz.. Normal şartlarda çağırdığımız css, js ya da resim dosyaları şu şekildedir;

<!-- Style -->
<link rel="stylesheet" href="/style.css" type="text/css" media="screen" />
<!-- Script -->
<script type="text/javascript" src="/script.js">
<!-- Resim -->
<img src="/resim.jpg" alt="" />

Şimdi bu kodları şöyle değiştirelim;

<!-- Style -->
<link rel="stylesheet" href="/style.css?v=1" type="text/css" media="screen" />
<!-- Script -->
<script type="text/javascript" src="/script.js?v=1">

<img src="/resim.jpg?v=1" alt="" />

Sonuna getirdiğimiz ?v=1 ifadesi illaha bu şekilde tanımlanmak zorunda değil.. Yani ?a=1 gibi de tanımlanabilir.. Ama bu çoğu sitenin kullandığı genel bir tanım olduğu için bende bu şekilde kullanıyorum.. Bir nevi versiyonu temsil ediyor ???? Böyle kaydettiğimizde, artık bu dosyalarda herhangi bir değişiklik yaptığımızda kullanıcı anlık olarak görecektir.

Güncelleme

Eğer bu şekilde doğru sonucu vermiyorsa php’nin time fonksiyonunu kullanabilirsiniz.

<!-- Style -->
<link rel="stylesheet" href="/style.css?v=" type="text/css" media="screen" />
<!-- Script -->
<script type="text/javascript" src="/script.js?v="></script>
<!-- Resim -->
<img src="/resim.jpg?v=" alt="" />

Verot.net Çoklu Upload Sorunu

Sizde benim gibi resim upload işlemleri için verot.net’de bulunan upload sınıfını kullanıyorsanız bu sorun (daha doğrusu sorunda denemez buna) sizinde başınıza gelmiştir.. Normal tekli yüklemede sorun yok ama çoklu yüklemede? işte orada bir mantıksızlığa düşüyoruz.. Çözümü ise şöyle.. Önce html yapımız şöyle olsun;

<form method="post" action="" enctype="multipart/form-data">
<input type="file" name="resim[]" multiple />
<input type="submit" name="submit" value="Yükle" />
</form>

Bu şekilde dosyaları birden fazla seçip yükle dediğimizde ise aşağıdaki php kodumuz çalışacak;

$images = array();
foreach ($_FILES['resim'] as $k => $l) {
  foreach ($l as $i => $v) {
	if (!array_key_exists($i, $images))
	  $images[$i] = array();
	$images[$i][$k] = $v;
  }
}

foreach ($images as $image){

	$handle = new Upload($image);
	if ($handle->uploaded) {
		
		/* Resmi Yeniden Adlandır */
		$handle->file_new_name_body = substr(base64_encode(uniqid(true)), 0, 20);

		/* Resmi Yeniden Boyutlandır */
		$handle->image_resize = true;
		$handle->image_x = 150;
		$handle->image_ratio_y = true;
		
		/* Resim Yükleme İzni */
		$handle->allowed = array('image/*');
		
		/* Resmi İşle */
		$handle->Process(realpath("../")."/upload/resim/");
		if ($handle->processed) {
		      echo 'ok\n';
		} else {
                   echo $handle->error;
		}

		$handle-> Clean();

	} else {
		echo $handle->error;
	}

}

Olay bu şekilde çözüm buluyor, böylece çoklu yükleme işlemini kolayca yapabiliyorsunuz.. Kolay gelsin.

Db Show Sınıfı (php)

Çoğu zaman oluşturduğum tabloların ve tablolara ait alanların isimlerini unutuyorum.. Girip phpmyadmin’e bakmakta zor geliyor ???? Bundan dolayı kendime veritabanıma ait tablo ve alanları görebileceğim küçük bir sınıf hazırladım, sizlerle de paylaşayım işinizi görecektir eminim (Özellikle benim gibi üşengeç biriyseniz)
Not: Sınıf hazırlamakta yeniyimdir, ondan dolayı sınıfı inceleyipte artislik yapacaklara şeker verilmiyor bilginiz olsun ????

İndir;
http://yadi.sk/d/Kfnwk7B_2_-dd

Metodlar ve Kullanımları;

show_tables()
Veritabanınıza ait tabloları listeler.. true değerini parametre olarak gönderirseniz aşağıdaki gibi html çıktısı alırsınız, göndermezseniz dizi halinde geriye değer döndürür.

show_fields()
Tabloya ait alanları listeler.. 2 parametre alır, tablo adı ve html çıktısı olacaksa 2. parametre olarak true değeri.. Eğer 2. parametre girilmez ise dizi olarak geriye değer döndürülür.. 2. parametre girilir ise aşağıdaki gibi çıktı verir;

show_tables_and_fields()
Tablo ve tabloya ait alanları bir arada gösterir. Sadece html çıktısı verir, yukarıdaki görsellerin birleşmiş halidir.

Örnek Kullanımı;

<?php

	// sınıfı dahil edelim
	require "db.show.class.php";
	
	// sınıfı başlatalım
	$db_show = new db_show("host","user","pass","db");
	
	// tabloları dizi halinde görelim
	$db_show->_dump( $db_show->show_tables() );
	
	// tabloya ait alanları dizi halinde görelim
	$db_show->_dump( $db_show->show_fields("tablo_adi") );
	
	// tablo ve alanları bir arada html olarak görelim
	echo $db_show->show_tables_and_fields();
	
	// sadece tabloları html olarak görelim
	echo $db_show->show_tables(true);
	
	// sadece tabloya ait alanları html olarak görelim
	echo $db_show->show_fields("tablo_adi", true);
	
?>

Php Yönlendirme Fonksiyonu

Aslında zaten yönlendirme işlemi için header() fonksiyonunu kullanıyoruz. Ancak duruma bağlı olarak öze bir fonksiyonda daha hızlı kullanım kolaylığı elde edebiliriz. Aşağıdaki örnekte olduğu gibi.

<?php

function go ($url, $time = 0){
    if ($time) header("Refresh: {$time}; url={$url}");
    else header("Location: {$url}");
}

// Kullanımı
go("siteadi.com", 10);

// Ya da
go("siteadi.com");

Php Türkçe Tarih Fonksiyonu

PHP’de türkçe tarih ve zaman formatı için setlocale() ve strftime() fonksiyonlarını kullanabiliriz. Örnek vermek gerekirse;

// Türkçe olarak ayarla
setlocale(LC_TIME, 'tr_TR');

// Tarihi Ekrana Yazdır
echo strftime('%d %B %Y, %A - %T'); // Çıktı: 23 Aralık 2017, Cumartesi - 12:15:00

strftime() için girilecek formatlara şuradan bakabilirsiniz:
http://php.net/manual/tr/function.strftime.php

Php BBKod Fonksiyonu

Kendi hazırlamış olduğum bbkod fonksiyonu.

<?php

function bbkod($par) {
   $bul = array(
      '#\[youtube=(.*?)\]#',
      '#\[b\](.*?)\[/b\]#'
    );

   $degistir = array(
      '<iframe width="100%" height="315" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe>',
      '<strong>$1</strong>'
   );
 
   return preg_replace($bul, $degistir, $par);
}
 
// Kullanımı
$string = "Bu bir [b]kalın yazı[/b]dır.. Ve buda bir youtube videosudur; [youtube=9bZkp7q19f0]";
echo bbkod($string);

Php Sef Link Fonksiyonu

Bu fonksiyon ile kullanıcı dostu url’ler oluşturmak için türkçe metinlerinizi derleyebilirsiniz. Tek yapmanız gereken fonksiyona parametre olarak metninizi göndermeniz. Bu sayede dönen değer url’de kullanıma uygun ve düzgün bir değer olacaktır.

function permalink($str, $options = array())
 {
     $str = mb_convert_encoding((string)$str, 'UTF-8', mb_list_encodings());
     $defaults = array(
         'delimiter' => '-',
         'limit' => null,
         'lowercase' => true,
         'replacements' => array(),
         'transliterate' => true
     );
     $options = array_merge($defaults, $options);
     $char_map = array(
         // Latin
         'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'AE', 'Ç' => 'C',
         'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I',
         'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', 'Ő' => 'O',
         'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ű' => 'U', 'Ý' => 'Y', 'Þ' => 'TH',
         'ß' => 'ss',
         'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'ae', 'ç' => 'c',
         'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i',
         'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ő' => 'o',
         'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'ű' => 'u', 'ý' => 'y', 'þ' => 'th',
         'ÿ' => 'y',
         // Latin symbols
         '©' => '(c)',
         // Greek
         'Α' => 'A', 'Β' => 'B', 'Γ' => 'G', 'Δ' => 'D', 'Ε' => 'E', 'Ζ' => 'Z', 'Η' => 'H', 'Θ' => '8',
         'Ι' => 'I', 'Κ' => 'K', 'Λ' => 'L', 'Μ' => 'M', 'Ν' => 'N', 'Ξ' => '3', 'Ο' => 'O', 'Π' => 'P',
         'Ρ' => 'R', 'Σ' => 'S', 'Τ' => 'T', 'Υ' => 'Y', 'Φ' => 'F', 'Χ' => 'X', 'Ψ' => 'PS', 'Ω' => 'W',
         'Ά' => 'A', 'Έ' => 'E', 'Ί' => 'I', 'Ό' => 'O', 'Ύ' => 'Y', 'Ή' => 'H', 'Ώ' => 'W', 'Ϊ' => 'I',
         'Ϋ' => 'Y',
         'α' => 'a', 'β' => 'b', 'γ' => 'g', 'δ' => 'd', 'ε' => 'e', 'ζ' => 'z', 'η' => 'h', 'θ' => '8',
         'ι' => 'i', 'κ' => 'k', 'λ' => 'l', 'μ' => 'm', 'ν' => 'n', 'ξ' => '3', 'ο' => 'o', 'π' => 'p',
         'ρ' => 'r', 'σ' => 's', 'τ' => 't', 'υ' => 'y', 'φ' => 'f', 'χ' => 'x', 'ψ' => 'ps', 'ω' => 'w',
         'ά' => 'a', 'έ' => 'e', 'ί' => 'i', 'ό' => 'o', 'ύ' => 'y', 'ή' => 'h', 'ώ' => 'w', 'ς' => 's',
         'ϊ' => 'i', 'ΰ' => 'y', 'ϋ' => 'y', 'ΐ' => 'i',
         // Turkish
         'Ş' => 'S', 'İ' => 'I', 'Ç' => 'C', 'Ü' => 'U', 'Ö' => 'O', 'Ğ' => 'G',
         'ş' => 's', 'ı' => 'i', 'ç' => 'c', 'ü' => 'u', 'ö' => 'o', 'ğ' => 'g',
         // Russian
         'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'Yo', 'Ж' => 'Zh',
         'З' => 'Z', 'И' => 'I', 'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O',
         'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C',
         'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sh', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'Yu',
         'Я' => 'Ya',
         'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh',
         'з' => 'z', 'и' => 'i', 'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o',
         'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
         'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sh', 'ъ' => '', 'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu',
         'я' => 'ya',
         // Ukrainian
         'Є' => 'Ye', 'І' => 'I', 'Ї' => 'Yi', 'Ґ' => 'G',
         'є' => 'ye', 'і' => 'i', 'ї' => 'yi', 'ґ' => 'g',
         // Czech
         'Č' => 'C', 'Ď' => 'D', 'Ě' => 'E', 'Ň' => 'N', 'Ř' => 'R', 'Š' => 'S', 'Ť' => 'T', 'Ů' => 'U',
         'Ž' => 'Z',
         'č' => 'c', 'ď' => 'd', 'ě' => 'e', 'ň' => 'n', 'ř' => 'r', 'š' => 's', 'ť' => 't', 'ů' => 'u',
         'ž' => 'z',
         // Polish
         'Ą' => 'A', 'Ć' => 'C', 'Ę' => 'e', 'Ł' => 'L', 'Ń' => 'N', 'Ó' => 'o', 'Ś' => 'S', 'Ź' => 'Z',
         'Ż' => 'Z',
         'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n', 'ó' => 'o', 'ś' => 's', 'ź' => 'z',
         'ż' => 'z',
         // Latvian
         'Ā' => 'A', 'Č' => 'C', 'Ē' => 'E', 'Ģ' => 'G', 'Ī' => 'i', 'Ķ' => 'k', 'Ļ' => 'L', 'Ņ' => 'N',
         'Š' => 'S', 'Ū' => 'u', 'Ž' => 'Z',
         'ā' => 'a', 'č' => 'c', 'ē' => 'e', 'ģ' => 'g', 'ī' => 'i', 'ķ' => 'k', 'ļ' => 'l', 'ņ' => 'n',
         'š' => 's', 'ū' => 'u', 'ž' => 'z'
     );
     $str = preg_replace(array_keys($options['replacements']), $options['replacements'], $str);
     if ($options['transliterate']) {
         $str = str_replace(array_keys($char_map), $char_map, $str);
     }
     $str = preg_replace('/[^\p{L}\p{Nd}]+/u', $options['delimiter'], $str);
     $str = preg_replace('/(' . preg_quote($options['delimiter'], '/') . '){2,}/', '$1', $str);
     $str = mb_substr($str, 0, ($options['limit'] ? $options['limit'] : mb_strlen($str, 'UTF-8')), 'UTF-8');
     $str = trim($str, $options['delimiter']);
     return $options['lowercase'] ? mb_strtolower($str, 'UTF-8') : $str;
 }

// Kullanımı
$deger = "Bu Türkçe Bir Yazıdır";
echo permalink($deger);

$deger = "Συχνές Ερωτήσεις";
echo permalink($deger);

Eğer kullanımı ile ilgili daha fazla detay isterseniz yorumlar bölümünden bana sorabilirsiniz.