php – Dubluve.net http://www.dubluve.net Biz de yazılımcıyız Fri, 27 May 2016 21:57:40 +0000 tr-TR hourly 1 http://i2.wp.com/www.dubluve.net/wp-content/uploads/2016/04/logo_small.png?fit=32%2C29 php – Dubluve.net http://www.dubluve.net 32 32 Laravel’e başlangıç http://www.dubluve.net/2014/01/04/laravele-baslangic/ http://www.dubluve.net/2014/01/04/laravele-baslangic/#respond Sat, 04 Jan 2014 16:10:58 +0000 http://dubluve.net/?p=2811 Laravel, bir PHP frameworkudur. Web sitesinde ( laravel.com ) THE PHP FRAMEWORK FOR WEB ARTISANS. mottosuyla tanıtılmakta. Bu aralar çok popüler olmasından dolayı merak edip araştırdım. Kendinden restfuldur kendileri.

İnternet üzerinde bir çok yerde ve yazılımla ilgili muhabbetlerin bir çoğunda son dönemin en iyi frameworklerinden biri olarak nitelendiriliyor. Örnek olarak şuraya göz atabilirsiniz : http://www.sitepoint.com/best-php-frameworks-2014/

Bende araştırırken karşıma çıkan faydalı ve güzel linkleri bir araya getirdim. Aşağıdan ulaşabilirsiniz;

Laravel Documentation http://laravel.com/docs/introduction [ olmazsa olmaz 🙂 ]

Laracast https://laracasts.com/series [ özellikle Laravel From Scratch kısmında, Laravel’in temel prensipleri güzel anlatılmış ]

Visualizing Laravel Relationships http://matthewhailwood.co.nz/visualizing-laravel-relationships/

Laravel Blog örneği https://github.com/ibrahimhizlioglu/laravel-blog-ornegi

Events & Queue örneği https://github.com/Ardakilic/laravel-4-workshop-sunum

Laravel Request Lifecycle http://laravel-recipes.com/recipes/52

Laravel Tricks http://www.laravel-tricks.com/

CMS https://github.com/sseffa/sfcms

Laravel E-Commerce https://medium.com/laravel-4/c5afca925f28 [ Laravel ile e-ticaret sistemi ]

 

 

Faydalı olan başka linkleri de iletirseniz yazıya ekleyebilirim 🙂

]]>
http://www.dubluve.net/2014/01/04/laravele-baslangic/feed/ 0
phpmyadmin session süresini arttırmak http://www.dubluve.net/2013/07/24/phpmyadmin-session-suresini-arttirmak/ http://www.dubluve.net/2013/07/24/phpmyadmin-session-suresini-arttirmak/#comments Wed, 24 Jul 2013 06:41:43 +0000 http://dubluve.net/?p=2704 Local ortamda çalışırken phpmyadmin’de sürekli timeout yiyerek tekrar giriş yapmak zorunda kalmak canımı sıktı. Bende bu süreyi nasıl uzatacağımı buldum.

Öncelikle phpmyadmin’in config.inc.php dosyasını bulunuz. (linux’ta /etc/phpmyadmin/ klasörünün altında olması gerekiyor.) Buraya $cfg[‘LoginCookieValidity’] parametresini ekleyeceğiz. Ben 1 yıl timeout süresi verdim şu şekilde;

$cfg[‘LoginCookieValidity’] = 31536000; /*365 * 24 * 60 * 60*/

NOT : BUNU SADECE LOCAL ORTAMDA ÇALIŞIRKEN UYGULAYINIZ!!!

]]>
http://www.dubluve.net/2013/07/24/phpmyadmin-session-suresini-arttirmak/feed/ 4
PHP 5.5 yayinlandi – yeni ozellikler http://www.dubluve.net/2013/06/21/php-5-5-yayinlandi-yeni-ozellikler/ http://www.dubluve.net/2013/06/21/php-5-5-yayinlandi-yeni-ozellikler/#comments Fri, 21 Jun 2013 13:37:57 +0000 http://dubluve.net/?p=2660 20 haziran 2013 itibariyle php.net php 5.5‘in yayınlandığını duyurdu.

Yeni özellikler neler?

  • Üreticiler (generators) ve eşyordamlar (coroutines) eklendi. (yield komutu eklendi). basitçe bir metodda array’e toplayıp array’i return ettiğiniz işi yapmaktadır. Dönen değerler foreach ile gezilerek işlem yapılabilir. bkz : http://tr1.php.net/manual/tr/language.generators.syntax.php
  • Exceptionlar için finally özelliği eklendi. Artık Try – catch te bir exception oluşması durumunda dahi son bir iş yapabileceğimiz bloğumuz olacak. Özellikle kod okunabilirliğini çok artırmasını tahmin ediyoruz.
  • md5, sha1 gibi eskimiş şifre üretme algoritmaları yerine password_hash fonksiyonu eklendi. bkz : http://tr1.php.net/manual/tr/function.password-hash.php
  • Array dereferencing (arrayde değişkene atama zorunluluğunun kalkması)
  • empty() fonksiyonu artık parametre olarak metod da alabilmeye başladı. !!!
  • foreach içinde list kullanabileceğiz. Mesela : foreach ($arr as list($var1, $var2)){…
  • SinifAdi::class yazarak sinifin tam yol adını alabilmemiz artık mümkün! get_class() benzeri bir işlev bu da. Ancak tam adını veriyor.
  • Resim işleme kütüphanesi olan GD ye eklemeler yapıldı.
  • Windows XP ve 2003 desteği kaldırıldı. bu demektir ki, php 5.5 windows xp’lerde ve 2003’lerde çalışmayacak!

Tüm değişiklikleri http://php.net/ChangeLog-5.php#5.5.0 linkinden okuyabilirsiniz.

]]>
http://www.dubluve.net/2013/06/21/php-5-5-yayinlandi-yeni-ozellikler/feed/ 5
PHP – Sayfanin iframe icerisinde acilmasini engellemek http://www.dubluve.net/2013/05/13/php-sayfanin-iframe-icerisinde-acilmasini-engellemek/ http://www.dubluve.net/2013/05/13/php-sayfanin-iframe-icerisinde-acilmasini-engellemek/#comments Mon, 13 May 2013 07:00:24 +0000 http://dubluve.net/?p=2595 Bazı durumlar olur ki, sitenizin, veya bir web sayfanızın iframe içinde açılmasını istemezsiniz. Bu durumda ne yapabiliriz diye bir bakındım ve güncel browser’ların kullandığı bir yöntem gördüm.

Örneğimiz şöyle olacak :

1 adet test.html sayfası,
1 adet test.php sayfası.

test.html içeriği

test.php in iframe <br />
<iframe src = 'test.php'>

test.php içeriği :

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

echo "hello world";

?>

Görüldüğü gibi, php dosyamızda bir adet header gönderiyoruz, ve burada Frame seçeneklerini DENY yani engellemesini söylüyoruz.
Böyle olunca örneğin chrome ve mozilla’da iframe içinde “hello world” yazmıyor, çünkü request’i deny üstteki header’dan dolayı ediyor.
Chrome ek olarak konsol’a bir uyarı da basıyor.
Ekran görüntüsü de chrome için şu şekilde oluyor. php-deny-iframe

]]>
http://www.dubluve.net/2013/05/13/php-sayfanin-iframe-icerisinde-acilmasini-engellemek/feed/ 7
PHP – singleton pattern vs clone http://www.dubluve.net/2013/04/30/php-singleton-pattern-vs-clone/ http://www.dubluve.net/2013/04/30/php-singleton-pattern-vs-clone/#comments Mon, 29 Apr 2013 22:51:36 +0000 http://dubluve.net/?p=2588 Class Test{ /** * Örnek Değişken */ public $sampleVariable = NULL; /** * Singelton bir yapı kullanılmaktadır * @var Test */ private static $_instance; /** * Singelton yapıyı desteklemek için private constructor yarattım içi boş. */ private function __construct(){ } /** * Singelton yapıyı destekleyen getInstance metodu * @return Test */ public static function getInstance(){ if (self::$_instance == null) { self::$_instance = new Test(); } return self::$_instance; } }

Yukarıdaki kod basitçe bir singleton mimariyi gösteriyor.

Burada ben

 $test = new Test()

yaratamıyorum. Çünkü constructor method’un erişilebilirliği “private” olarak belirlenmiş.
Yani ancak bu sınıfı

$test = Test::getInstance()

diyerek kullanabilirim.

Peki gelin görün ki, unuttuğumuz bir şey var.

Php’de “clone” diye bir obje kopyalama özelliği var. Nedir bu?

$a = new stdClass();
$k = $a;

dediğimizde, $a->var = 5 dediğimizde, $k da aynı şekilde değişiyor. yani bu ikisi aynı objeyi işaret ediyor.

Ancak

$a = new stdClass();
$k = clone $a;

Yazdığımızda ise, artık $k, $a nın en son halinden kopyalanıp yeni bir obje olarak oluşturuluyor.

Yani ben ilk örnekte,

$test = Test::getInstance();

yazdıktan sonra bir yerlerde
$anotherTest = clone $test;
dersem, artık yeni bir obje türetebilmiş oluyorum.

Buyrun deneyin :

$test = Test::getInstance();
$anotherTest = clone $test;

$test->sampleVariable = 5;
$anotherTest->sampleVariable = 10;

var_dump($test);
var_dump($anotherTest);

Birbirinin aynısı olmayan, aynı objenin farklı 2 instance’ını singleton mimaride de yapabilmiş oldum.

Sonuç : Demek ki, PHP de singleton mimarisi güvenilir değildir. Class’ın içerisine ancak private bir __clone metoru tanımlayınca güvenli oluyor. (@edit adil ilhan’ın yorumuna istinaden)
Yine de güzel bir design patterni olarak beğeniyorum. Ancak bilinçli kullanmanızı tavsiye ederim.

]]>
http://www.dubluve.net/2013/04/30/php-singleton-pattern-vs-clone/feed/ 14
mysql’deki tablonun olup olmadığını kontrol etmek (php kullanarak) http://www.dubluve.net/2013/04/18/mysqldeki-tablonun-olup-olmadigini-kontrol-etmek-php-kullanarak/ http://www.dubluve.net/2013/04/18/mysqldeki-tablonun-olup-olmadigini-kontrol-etmek-php-kullanarak/#comments Wed, 17 Apr 2013 22:49:36 +0000 http://dubluve.net/?p=2576 Php ile çalışırken, mysql’de kullandığımız veritabanı içerisinde, herhangi bir isimdeki tablonun var olup olmadığını kontrol etmenin bir kaç yolu vardır. Bu yazıda onlardan bahsedeceğim.

Bunlardan ilki, SHOW TABLES querysini kullanmaktır.

Örneğin, test isminde bir veritabanımız olsun. İçerisindeki tabloların ismi de, admin, member, log, test1, test2 olsun. Yani mysql’e konsoldan bağlanıp use test dedikten sonra, show tables dediğimizde karşımıza şu çıksın.

+------------------------+         |
| admin                  |
| member                 |
| log                    |
| test1                  |
| test2                  | 
+------------------------+

Şimdi işin Php kısmına geçelim.

// burada mysql'e bağlanmış olalım.

$result = mysql_query( "SHOW TABLES FROM test" );

if (! $result) {
	echo "Sorguda hata meydana geldi 
"; echo 'mysql error: ' . mysql_error(); } else { $row = array(); while ( $row = mysql_fetch_row( $result ) ) { echo "Tablo ismi : ".$row[0]."
"; } } mysql_free_result( $result );

SHOW TABLES FROM test querysinin ardından, LIKE parametresi ekleyerek, sonucu daraltabiliriz. Ardından da sonuçları php ile parse ederek, aradığımız isimdeki tablonun olup olmadığını kontrol edebiliriz. (SHOW TABLES FROM test LIKE ‘%min%’ gibi)

İkinci yöntemimiz ise, mysql’deki information_schema databasei içerisindeki TABLES tablosundaki bilgiler. Bu tabloda TABLE_SCHEMA sütununda veritabanı isimleri TABLE_NAME sütununda ise tablo isimleri yer almaktadır.

SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = ‘{database ismi}’ AND table_name = ‘{tablo ismi}’ şeklinde çalıştıracağımız sorgudan gelen sonuç ile istediğimizi elde etmiş olacağız. Yapalım;

// burada mysql'e bağlanmış olalım.

$result = mysql_query( "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='test' AND table_name='test1'" );

if (! $result) {
	echo "Sorguda hata meydana geldi 
"; echo 'mysql error: ' . mysql_error(); } else { $count = mysql_num_rows($result); if($count == 1){ // tablo var, gerekli işlemler } else { // tablo yok, gerekli işlemler } } mysql_free_result( $result );
]]>
http://www.dubluve.net/2013/04/18/mysqldeki-tablonun-olup-olmadigini-kontrol-etmek-php-kullanarak/feed/ 2
php strict standards – only variables should be passed by reference error http://www.dubluve.net/2013/03/21/php-strict-standards-only-variables-should-be-passed-by-reference-error/ http://www.dubluve.net/2013/03/21/php-strict-standards-only-variables-should-be-passed-by-reference-error/#comments Thu, 21 Mar 2013 21:44:53 +0000 http://dubluve.net/?p=2553 strict standards – only variables should be passed by reference error hatasını alıyorsanız, referans olarak değişken göndermeniz gereken yere, siz farklı bir şey göndermişsiniz demektir.

Ben hatayı şöyle almıştım.

$var = end(explode( "/", $filename ));

end işlemini yaptığım şey explode işleminin sonucu. Ancak explode bir array döndürürken, bu male dating rules arrayi bir değişkene atamadığım için, arrayin sadece adresini döndürmüş oluyor. Bu free sex slave videos online da end fonksiyonunun çalışmamasına sebep http://crosspointnyc.com/uemz-free-contact-personals-websites oluyor.

Çalışması için aşağıdaki gibi basit bir düzenleme yapıyoruz :

$tmpArr= explode( webcams in argentina  "/", $filename);
$var = end($tmpArr);

Bu problem php 5.4.x sürümlerinde karşınıza çıkmıyor ancak php 5.3.x sürümlerinde mevcuttur.

]]>
http://www.dubluve.net/2013/03/21/php-strict-standards-only-variables-should-be-passed-by-reference-error/feed/ 6
TypeHinting nedir? Php Typehinting http://www.dubluve.net/2013/03/15/typehinting-nedir-php-typehinting-2/ http://www.dubluve.net/2013/03/15/typehinting-nedir-php-typehinting-2/#comments Fri, 15 Mar 2013 21:05:10 +0000 http://dubluve.net/?p=2529 Typehinting demek, bir class’a ait metodun aldığı parametrelerin türünün önceden belirlenmesi, force edilmesi demektir. Ancak bu işlemi sadece objelerde ve arraylerde yapabilmekteyiz.

Örnek verecek olursak;

class Dubluve{
 public function deneme(array $a){
  var_dump($a);
 }
}
$obj = new Dubluve();

deneme metodu için şunları söyleyebiliriz;

// bu kodlar hata verecektir
$obj->deneme("php");
$obj->deneme(123);
$obj->deneme("1");

// bu kod çalışacaktır
$obj->deneme(array("a", "b", "c"));

Type hinting işlemini düzgün olarak array ve objelerde kullanabiliyoruz onun da şöyle bir püf noktası var. Metoda gönderdiğimiz parametre için default değer olarak NULL atarsak, gönderdiğimiz parametre de NULL olabilir. Bunu da örnekle açıklamak gerekirse,

class DubluveRSS{
 public function deneme(Dubluve $dubluve) // $dubluve değişkeni sadece Dubluve'nin objesi olabilir
 public function deneme(Dubluve $dubluve = NULL) // $dubluve değişkeni Dubluve'nin objesi olabilir veya NULL olabilir
}

Öte yandan ;

public function deneme(array $dubluve = array("a", "b", "c"))

bu fonksiyonu deneme(null); şeklinde çalıştıramayız. Ancak diyorsak ki, null parametre gönderilebilsin ancak null geldiyse default olarak bir şeyler atayabileyim, o zaman da şöyle birşey yapabiliriz

public function deneme(array $dubluve = null){
 if($dubluve === null){
   $dubluve = array("a", "b", "c");
 }
 .
 .
 .
}

Typehinting fonksiyonlarda da çalışmaktadır. Yine class metodlarında olduğu gibi sadece obje ve arrayler ile işlem yapılabilmektedir.

]]>
http://www.dubluve.net/2013/03/15/typehinting-nedir-php-typehinting-2/feed/ 4
PHP Namesapace Autoload http://www.dubluve.net/2013/02/15/php-namesapace-autoload/ http://www.dubluve.net/2013/02/15/php-namesapace-autoload/#comments Thu, 14 Feb 2013 22:04:51 +0000 http://dubluve.net/?p=2475 Merhaba,

PHP 5.3.x ile beraber gelen namespace konusuna bu yazımda değinmiştim. Şimdi namespace autoload konusuna değinerek sizlere bilgilerimi paylaşmak istiyorum.

Koskoca bir proje tek bir include ile olur mu demeyin oluyor. Kullanmak istediğimiz namespace’yi use diyerek çağırmak ve ilgili sınıfın otomatik olarak include edilmesi için autoload mekanizması var. Şimdi bu yapıyı kurmak için proje dizinimize composer.json dosyası oluşturarak içine şu jsonu ekleyelim :

{

   "autoload":{
      "psr-0":{
         "" : "library" // sınıflarımın bulunduğu path (index.php ile aynı seviyede)
      }
   }
}

Not : composer işletim sisteminizde yüklü olmalıdır (ubuntu için curl -s https://getcomposer.org/installer | php)

Şimdi komut satırından proje dizinine gelerek şu komutu çalıştıralım ve ilgili dosyalarımızı oluşturalım :

composer install

Bu komutu çalıştırdıktan sonra vendor isminde bir klasör ve içerisine iligli dosyalar gelmiş olacak.Aynı zamanda composer ile uğraşmak istemiyorsanız internetten çeşitli kaynaklardan bu vendor içindeki dosyaları edinebilir veya kendiniz yazabilirsiniz. Nihayetinde PHP dosyaları ve composer sadece bu işi kolaylaştıran bir yapı.

Şimdi kullanımına gelecek olursak index.php dosyamıza vendor klasörü içindeki autoloader.php dosyamızı include etmek dışında hiçbirşey kalmıyor 🙂

]]>
http://www.dubluve.net/2013/02/15/php-namesapace-autoload/feed/ 3
Php Array Iterator Sinifina Kucuk Bir Ekleme http://www.dubluve.net/2013/01/04/php-array-iterator-sinifina-kucuk-bir-ekleme/ http://www.dubluve.net/2013/01/04/php-array-iterator-sinifina-kucuk-bir-ekleme/#comments Fri, 04 Jan 2013 13:57:57 +0000 http://dubluve.net/?p=2381 PHP de array objelerinin vazgeçilmezi array iteratörleridir. Array iteratör kullanmayacaksanız, array object yapmanıza pek de gerek yoktur açıkçası.
Array iteratör ile genelde while loop yaparsınız.

Burada hem
iterator->current(); demenize
hem de döngünün en sonunda da
iterator->next() demenize gerek kalmayacak bir metod ekledim kendi iterator sınıfıma.

Aşağıdaki iterator classı ile initialize edilen arrayobject sınıflarında iterator->getNext() dediğinizde hem currentı döndürecek hem de next yapmış olacaksınız.

Bu iterator sınıfına yeni metodlar eklenerek işlerinizi çok daha güzel ve kolay hale getirebilirsiniz. Bu da basit bir örneği olmuş oldu

class MyArrayIterator extends ArrayIterator
{
    public function getNext ()
    {
        $current = $this->current(); 
        
        parent::next();
        return $current;
    }
}
]]>
http://www.dubluve.net/2013/01/04/php-array-iterator-sinifina-kucuk-bir-ekleme/feed/ 9