Get Adobe Flash player

PHP

“Notice: Undefined index” uyarısı için basit bir çözüm

Bu uyarı tanımlanmamış bir değişkene ulaşmaya çalıştığınız zaman size bilgi vermek için PHP’nin size döndürdüğü bir mesaj veya log dosyasında gördüğünüz bir uyarıdır. Kodunuzun başına error_reporting(E_ALL ^ E_NOTICE); satırını eklediğinizde bu mesajlardan kurtulabilirsiniz. Ama bu uyarıları kapatmak yerine çözmeye çalışmak ileride gerekli olan mesajları engellemeden çözüm sağlamak için daha iyi bir çözüm olur.

Bunun için genelde isset komutu ile değişkenin tanımlı olup olmadığı kontrol edilir. Böylece değişken tanımlı değilse o değişkenden veri çekilmeye çalışmaz.
if (!isset($degisken)) {} şeklinde bir kontrol ile her değişkenin kullanılmadan önce kontrol edilmesi, değişken tanımlanmadan işlem yapılmasını engelleyebilir.

Bir fonksiyon ile bu işi daha profesyonel çözemeye çalışalım.
Devamını okuyun »

Share

Metin içindeki başı ve sonu aynı verileri diziye çekme

Text veri içinden belirli bir kurala göre girilmiş verileri çekmek için uzun kodlar yazmanıza gerek yok. icindebul fonksiyonu tam bu iş için. Aşağıda kolay anlaşılması için ufak bir örnek ile fonksiyonu paylaşıyorum. Umarım işinize yarar.

<?php
// başlangıç ve bitiş olarak verilen karakterlerin arasındaki değerleri dizi değişkeni olarak döndürür
    function icindebul($baslangic, $bitis, $incelenecekmetin) {
        preg_match_all('/' . preg_quote($baslangic, '/') . '(.*?[^\\\])'. preg_quote($bitis, '/').'/i', $incelenecekmetin, $bulunanlar);
        return $bulunanlar[1];
    }
    
    $baslangic = "benim";
    $bitis = "var";
    $incelenecekmetin = "benim 3 koyunum var, benim 7 köpeğim var, benim 5 keçim var. Senin neyin var.";

    $sonuc = icindebul($baslangic, $bitis, $incelenecekmetin);

    print_r ($sonuc);

/* Çıktı aşağıdaki gibi olacaktır
Array
(
    [0] =>  3 koyunum 
    [1] =>  7 köpeğim 
    [2] =>  5 keçim 
)
*/
?>
Share

MyISAM tablolarını INNODB’ye topluca çevirmek

Umarım işinize yarar.

<?php 
 // Veritabanına bağlantı yapılıyor
$vthost = 'localhost';
$vtkullanici = 'root';
$vtsifre = '';

$baglanti = mysql_connect($vthost, $vtkullanici, $vtsifre) or die ('MySQL Baglanti Hatasi');
$vtismi = 'veritabani';
mysql_select_db($vtismi);

// İş yapan kodumuzun başlangıcı
$sql = "SHOW tables";
$rs = mysql_query($sql);
while($satir = mysql_fetch_array($rs))
{
$tbl = $satir[0];
$sql = "ALTER TABLE $tbl ENGINE=INNODB";
mysql_query($sql);
echo "".$tbl;
}
echo " Tamamlandı.";
?>
Share

Sayfanız frame içinde gösterilemesin

Sayfanızın farklı sayfalar içinde frame içinde gösterilememesi için çeşitli yöntemler mevcut.

Eğer Javascript ile frame içinde gösterilmesini engellemek isterseniz; aşağıdaki kodu sayfanıza ekleyebilirsiniz.

<Script language="JavaScript">
<!-- Force all the previous frames off
if (self.parent.frames.length != 0) self.parent.location=document.location.href;
// -->
</script>

Php içinden header fonksiyonu kullanarak frame içinden kullanımı engellemek isterseniz; aşağıdaki gibi daha kısa bir kod ile amacınıza ulaşabilirsiniz.

<?php
header("X-FRAME-OPTIONS: DENY");
?>
Share

PHP’de Sınıf Yapısına Giriş

PHP OOP’nin (Object Oriented Programming – Nesne Yönelimli Programlama) temeli sınıflardan (class) oluşur.

PHP’de sınıf (class) tanımlaması şu şekilde yapılır:

class isim
{

}

Oluşturduğumuz sınıfı kullanabilmemiz için onun görüntüsünü (instance) oluşturmamız gerekir. Görüntüsünü oluşturmak için new kodunu kullanırız.

$degisken = new isim();

Devamını okuyun »

Share

.htaccess ile dizin listeleme hizmetini düzenlemek

Bir web dizini içinde index.html dosyası (veya başka bir dizin dosyası) yoksa, bu web sitesinde bir dizine tarayıcı ile girildiğinde, o dizindeki dosyalar listelenir.

Bunu engellemek için genelde apache konfigurasyon dosyasından ayar yapılır. Alternatif olarak, htaccess dosyası kullanılarak da dizin listesi engellenebilir ya da engelleme kaldırılabilir.
Devamını okuyun »

Share

Debian tabanlı Linux dağıtımlarına Sublime Text 2 kurulum betiği

Kod yazarken kullandığım sublime text 2 editörü için hazır kurulum betiği buldum. Betik, Debian, Mint, Ubuntu gibi apt kullanan dağıtımlarda çalışıyor.

 


#!/bin/sh
# Sublime Text 2 debian install
wget http://blog.anantshri.info/content/uploads/2010/09/add-apt-repository.sh.txt
sudo mv add-apt-repository.sh.txt /usr/sbin/add-apt-repository
sudo chmod o+x /usr/sbin/add-apt-repository
sudo chown root:root /usr/sbin/add-apt-repository
sudo add-apt-repository ppa:webupd8team/sublime-text-2
sudo apt-get update
sudo apt-get install sublime-text

Share

PHP ile Türkiye’ye göre zaman ayarı

Hepinizin başına gelmiştir; farklı sunucularda çalıştırdığınız PHP kodları zamanı farklı göstermiştir. Bu sorunun çözümü için, çok pratik 2 satır ile kodlarınızın başında ayar yaparsanız, her sunucuda Türkiye saatini alırsınız.

setlocale(LC_ALL, "tr_TR", "turkish");
date_default_timezone_set("Europe/Istanbul");

Kolay gelsin.

Not : Sorunun çözümünde yardımcı olan Sinan İlyas‘a teşekkür ederim.

Share

PHP session işlemlerinde ekstra güvenlik

Php ile kodlama yaparken, güvenlik için sessionlara belli bir yere kadar güvenebiliriz.  Session işlemlerinde daha fazla güvenliğe ihtiyacımız olduğu durumlarda ekstra güvenlik önlemleri almamız gerekebilir. Çünkü Apache sunucu; aynı IP adresinden gelen her bir bağlantı için tek oturum tutar. Bunun anlamı; aynı IP adresinden giren kişiler, her sunucuya tek bir oturumla girerler. Bu durumda oturum dizisi aşağıdaki gibi bir görünür.

Array([GENEL] => Array([ip] => 127.0.0.1[tarayici] => Mozilla/5.0 ….)) [UYE] => Array([sessionstarttime] => 1267461947))

bu durumda, aynı script iki yerde de kurulmuşsa ve oturumlar aynı isimle başlıyorsa sizin için bir risk olabilir…
Tedbir olarak:
1: session için bir değeri DEFINE edip…
2: değeri md5 ile hash leyebilirsiniz

örnek: define (‘OTURUM’,md5(‘oturum_degeri’);
ve oturum çağırırken bu define değer ile çağırın
$_SESSION[OTURUM] _SESSION dizisi artık aşağıdaki gibi olacaktır:

Array([243ac90d379c414f6e447f9a4e8e4a95] => Array([ip] => 127.0.0.1[tarayici] => Mozilla/5.0 ….)))

Share

Session belli bir süre geçerli olsun

Session belli bir süre geçerli olsun, böylece daha güvenli olsun isterseniz aşağıdaki kod, bu işin nasıl yapılacağı ile ilgili size fikir verebilir.

<?php
session_start();
$gecerlilik = 1000;
//milisaniye cinsinden sessionin geçerlilik süresi

if(isset($_SESSION['zamanasimi']) )
{
$session_suresi = time() - $_SESSION['zamanasimi'];
if($session_suresi > $gecerlilik)
{
session_destroy();
header("Location: cikis.php");
}
}
$_SESSION['zamanasimi'] = time();
?>
Share