<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dubluve.net &#187; Php</title>
	<atom:link href="http://dubluve.net/category/software/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://dubluve.net</link>
	<description>Biz de yazılımcıyız</description>
	<lastBuildDate>Sat, 19 May 2012 18:29:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Symfony2 &#8211; Ek Kutuphaneleri Yonetmek</title>
		<link>http://dubluve.net/2012/05/03/symfony2-ek-kutuphaneleri-yonetmek/</link>
		<comments>http://dubluve.net/2012/05/03/symfony2-ek-kutuphaneleri-yonetmek/#comments</comments>
		<pubDate>Thu, 03 May 2012 18:20:59 +0000</pubDate>
		<dc:creator>Boğaç Aslanyürek</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[symfony 2]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony bundles]]></category>
		<category><![CDATA[symfony vendors]]></category>
		<category><![CDATA[symfony yeni vendor eklemek]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=1308</guid>
		<description><![CDATA[Symfony2 için kullanılan ek kütüphaneleriyle tek bir bilgisayarda çalışırsanız sorun yaşamayabilirsiniz. Fakat canlı bir ortama ve ya başka bir yazılımcının bilgisayarına kurmak istediğinizde, hangi kütüphanenin hangi versiyonunu kurduğunuzu unutabilirsiniz ya da zamanla herkes farklı bir versiyona sahip olabilir. Ayrıca ek kütüphane klasörünüz fazlasıyla şişeceği için kullandığınız git deposunda gereksiz yer kaplar. Hataları önlemek ve işleri [...]]]></description>
			<content:encoded><![CDATA[<p>Symfony2 için kullanılan ek kütüphaneleriyle tek bir bilgisayarda çalışırsanız sorun yaşamayabilirsiniz. Fakat canlı bir ortama ve ya başka bir yazılımcının bilgisayarına kurmak istediğinizde, hangi kütüphanenin hangi versiyonunu kurduğunuzu unutabilirsiniz ya da zamanla herkes farklı bir versiyona sahip olabilir. Ayrıca ek kütüphane klasörünüz fazlasıyla şişeceği için kullandığınız git deposunda gereksiz yer kaplar.</p>
<p>Hataları önlemek ve işleri kolaylaştırmak için Symfony2 ile birlikte ek kütüphanelerinizin versiyonlarının yönetildiği bir dosya ve bunun için tek basit bir komutla çalıştırabileğiniz bir program geliştirilmiş. Bu program git versiyon kontrol sistemini kullanıyor, dolayısıyla git sisteminin bilgisayarınızda yüklü olması gerekiyor. Eğer git yüklü değilse Windows&#8217;ta yüklemek için <a title="Setup Git On Windows" href="http://help.github.com/win-set-up-git/" target="_blank">şuradaki</a> talimatları izleyebilirsiniz.</p>
<h4>deps Dosyası ve bin/vendors komutu</h4>
<p>Öncelikle Symfony2 framework <a title="Symfony2" href="http://symfony.com/download" target="_blank">şu adresten</a> ek kütüphaneler olmadan (without vendors) indiriyoruz, arşiv dosyasını açıyoruz. Arşivin açıldığı  klasörde deps ve deps.lock isminde 2 adet dosya göreceksiniz. Deps dosyasındaki her bir blok ek kütüphaneleri göstermekte ve ek kütüphaneler kurmak için kullanacağımız program bu dosyayı okuyor. Deps.lock dosyası ise yüklediğiniz kütüphanenin git tarafından oluşturulan ve o commit&#8217;e ait commit-hash bilgisini (<a title="Git Versiyon Kontrol Sistemine Giriş" href="http://dubluve.net/2012/03/31/git-versiyon-kontrol-sistemine-giris/" target="_blank">burada bahsetmiştim</a>) tutuyor.</p>
<p>Peki yeni bir kütüphane yüklemek için ne yapacağız? Oldukça basit, deps dosyasına yeni bir kayıt gireceğiz. Deps dosyasına göz atarsanız kayıtlar genel olarak şöyledir:</p>
<pre>[FOSUserBundle]
 git=git://github.com/FriendsOfSymfony/FOSUserBundle.git
 target=bundles/FOS/UserBundle
 version=1.2.0</pre>
<p>Bu blokta [] içindeki bilgi ek kütüphanemizin ismini gösterir. Eğer <em>target</em> parametresiyle herhangi bir klasör belirmediyseniz varsayılan olarak burada verilen isimde bir klasör yaratılır ve dosyalar bu klasöre indirilir.</p>
<p><em>git=&lt;git_repo_url&gt; </em>kısmına yazılan adres kısım ek kütüphanenini alınacağı adresi gösterir. Bu adrese git ve http/https ile başlayan kütüphane adreslerini girebilirsiniz. Gerekli olan parametreler aslında bu kadar, fakat diğer parametrelere de göz atalım.</p>
<p><em>target=&lt;vendor_target&gt; </em>kısmında kütüphane dosyalarının indirileceği klasörü giriyoruz. Buraya girilen klasör <em>&lt;proje_klasörü&gt;/vendor</em> altında yaratılıyor.</p>
<p>Son olarak <em>version= &lt;versiyon&gt;</em> kısmında ise bir kütüphane için belli bir versiyon ve ya branch belirtebiliyoruz.</p>
<p>Deps dosyasında kayıtlı olan ek kütüphaneleri indirmek için proje klasörüne geçtikten yapmamız gereken sadece aşağıdaki komutu çalıştırmak:</p>
<pre>php bin/vendors install</pre>
<p>Bu komuttan sonra eğer vendor klasörünüzde hiçbir klasör görmezseniz ve ya klasörleriniz hepsi boşsa, git sistemini işletim sisteminize düzgün kuramamış olabilirsiniz. Eğer bazı kütüphaneler yüklenemiyorsa tekrar denediğinizde bunlar da yüklenecektir. İlk kez çalıştırdığınızda bu işlem zaman alabilir, sabırlı olun <img src='http://dubluve.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h4>Sistem Nasıl İşliyor?</h4>
<p>Peki sistem nasıl işliyor, yukarıdaki komutu çalıştırdığımda neler oluyor diyenler için aşağıdaki şemayı hazırladım. Ek kütüphanelerimiz hayırlı olsun <img src='http://dubluve.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://dubluve.net/wp-content/uploads/2012/05/flow.jpg"><img class="alignnone  wp-image-1311" title="Akış Diyagramı" src="http://dubluve.net/wp-content/uploads/2012/05/flow.jpg" alt="vendors script flowchart" width="493" height="405" /></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/05/03/symfony2-ek-kutuphaneleri-yonetmek/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Symfony2- FOSFacebook &#8211; Facebook needs the CURL PHP Extension Hatasi</title>
		<link>http://dubluve.net/2012/04/29/symfony2-fosfacebook-facebook-needs-the-curl-php-extension-hatasi/</link>
		<comments>http://dubluve.net/2012/04/29/symfony2-fosfacebook-facebook-needs-the-curl-php-extension-hatasi/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 10:40:50 +0000</pubDate>
		<dc:creator>Boğaç Aslanyürek</dc:creator>
				<category><![CDATA[symfony 2]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[konsol]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php.ini]]></category>
		<category><![CDATA[symfony2]]></category>
		<category><![CDATA[wamp]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=1291</guid>
		<description><![CDATA[Symfony2&#8242;de FOSFaceBookBundle yüklemesi yaptıktan sonra, herhangi bir konsol komutu çağırmaya çalıştığımda aşağıdaki hatayı alıyordum. [Exception] Facebook needs the CURL PHP extension. Biraz araştırdığımda, WAMP gibi 3'ü bir yerde kurulumlarda Apache tarafından kullanılan php.ini dosyası ile konsoldan aşağıdaki şekilde çağırdığımız php komutunun farklı php.ini dosyası kullandığını öğrendim. php app/console container:debug Yani wamp&#8217;ın menüsünü kullanarak curl uzantısını [...]]]></description>
			<content:encoded><![CDATA[<p>Symfony2&#8242;de FOSFaceBookBundle yüklemesi yaptıktan sonra, herhangi bir konsol komutu çağırmaya çalıştığımda aşağıdaki hatayı alıyordum.</p>
<pre><code>[Exception] Facebook needs the CURL PHP extension.</code></pre>
<p><code>Biraz araştırdığımda, WAMP gibi 3'ü bir yerde kurulumlarda Apache tarafından kullanılan php.ini dosyası ile konsoldan aşağıdaki şekilde çağırdığımız php komutunun farklı php.ini dosyası kullandığını öğrendim.</code></p>
<pre>php app/console container:debug</pre>
<p>Yani wamp&#8217;ın menüsünü kullanarak curl uzantısını aktifleştirseniz bile aslında konsoldan çağrılan php programının kullandığı php.ini değişmiyor. WAMP için örnek vermek gerekirse, C:\wamp\bin\php\php5.3.8 klasöründeki php.ini dosyasını şu şekilde düzenlemek gerekiyor:</p>
<pre>;extension=php_curl.dll</pre>
<pre><strong>extension=php_curl.dll</strong></pre>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/04/29/symfony2-fosfacebook-facebook-needs-the-curl-php-extension-hatasi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>php magic methods</title>
		<link>http://dubluve.net/2012/04/23/php-magic-methods/</link>
		<comments>http://dubluve.net/2012/04/23/php-magic-methods/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 18:20:56 +0000</pubDate>
		<dc:creator>Gökhan Tunçkale</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[clone]]></category>
		<category><![CDATA[nesne klonlama]]></category>
		<category><![CDATA[nesne kopyalama]]></category>
		<category><![CDATA[nesneyi fonksiyon olarak kullanma]]></category>
		<category><![CDATA[nesneyi string olarak kullanma]]></category>
		<category><![CDATA[php magic methods]]></category>
		<category><![CDATA[__call()]]></category>
		<category><![CDATA[__callStatic()]]></category>
		<category><![CDATA[__clone()]]></category>
		<category><![CDATA[__construct]]></category>
		<category><![CDATA[__destruct]]></category>
		<category><![CDATA[__get()]]></category>
		<category><![CDATA[__invoke()]]></category>
		<category><![CDATA[__isset()]]></category>
		<category><![CDATA[__set()]]></category>
		<category><![CDATA[__set_state()]]></category>
		<category><![CDATA[__sleep()]]></category>
		<category><![CDATA[__toString()]]></category>
		<category><![CDATA[__unset()]]></category>
		<category><![CDATA[__wakeup()]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=1272</guid>
		<description><![CDATA[Php de bulunan özelliklerden biri de php magic methods. (Kendiliğinden çalışan da diyebiliriz türkçe olarak.) Ne İşe Yarar Bu Magic Metodlar? Magic metodlar, Class seviyesinde çalışan metodlardır. Örneğin aşağıdaki örnek için $deneme = new Deneme(); yazdığımızda Deneme sınıfındaki __construct magic metodu çalışır. Tıpkı bunun gibi, classta olmayan bir metodu çağırdığınızda __call() metodu çağrılır. class Deneme { public function __construct(){ [...]]]></description>
			<content:encoded><![CDATA[<p>Php de bulunan özelliklerden biri de php magic methods. (Kendiliğinden çalışan da diyebiliriz türkçe olarak.)</p>
<h3>Ne İşe Yarar Bu Magic Metodlar?</h3>
<p>Magic metodlar, Class seviyesinde çalışan metodlardır. Örneğin aşağıdaki örnek için $deneme = new Deneme(); yazdığımızda Deneme sınıfındaki <strong>__construct</strong> magic metodu çalışır. Tıpkı bunun gibi, classta olmayan bir metodu çağırdığınızda <strong>__call()</strong> metodu çağrılır.</p>
<pre name="code" class="php">
class Deneme {
                public function __construct(){
                        //
                }
}
</pre>
<p>Php 5.3 itibariyle destek verdiği magic metodları listeleyelim.</p>
<h3>php 5.3 magic methods</h3>
<p>__construct(),<br />
__destruct(),<br />
__call(),<br />
__callStatic(),<br />
__get(),<br />
__set(),<br />
__isset(),<br />
__unset(),<br />
__sleep(),<br />
__wakeup(),<br />
__toString(),<br />
__invoke(),<br />
__set_state(),<br />
__clone()</p>
<h4>__construct() :</h4>
<p>Yukarıda da bahsettiğim gibi $deneme = new Deneme(); yazdığımızda ilk olarak çalışan metoddur.</p>
<p>__construct metoduna parametre göndermek istiyorsak</p>
<pre name="code" class="php">$deneme = new Deneme($param1, $param2, ..);</pre>
<p>şeklinde yapabiliriz. Tercihe bağlı olarak sınıf için bir nesne yarattığımızda, gerekli tanımlama (define) işlemleri, bağlantı kurma (örneğin veritabanı bağlantısı, ya da dosya açma) metodlarını çalıştırma, gibi işlemler için kullanılır. Önemli olan bir nokta, __construct metodumuzu private ya da protected olarak değil <strong>public</strong> olarak tanımlamamız gerekir.</p>
<h4>__destruct() :</h4>
<p>Bu metod adından da açıkca belli olduğu üzere __construct metodunun aksine sınıf için nesne yaratıldığında değil değil sınıf sonlanırken çalışır.<br />
Sınıf sonlanırkenden kastım, sınıf içinde kullandığımız nesneleri unset(); ederken, veritabanı ile bağlantıyı kapatırken, ya da kullandığımız dosyayı kapatırken, log tutarken (Deneme sınıfı çalıştı, şu şu işlemler yapıldı, şu nesneler yok edildi) vb. işlemler için kullanılabilir.</p>
<h3>Method Aşırı yükleme (Method Overloading)</h3>
<h4>__call() :</h4>
<p>Erişilemeyen metod (ya da olmayan metod) nesne tarzında çağırıldıysa, __call metodu çalışır.</p>
<h4>__callStatic() :</h4>
<p>Erişilemeyen metod (ya da olmayan metod) statik tarzında çağırıldıysa __callStatic metodu çalışır.</p>
<p>Deneme sınıfımız üzerinden örnek verecek olursam;</p>
<pre name="code" class="php">class Deneme{
	public function __call($name, $arguments){
		echo "$name metodu nesne olarak, şu parametelerle çalıştırılmak istendi: ".implode(',', $arguments);
	}

	public function __callStatic($name, $arguments){
		echo "$name metodu statik olarak,şu parametelerle çalıştırılmak istendi: ".implode(',', $arguments);
	}

}</pre>
<p>Görüldüğü gibi iki metod da 2 parametre alıyor. İlki çalıştırılmak istenen metod ismi, ikincisi metod çağırılırken gönderilen parametreler. Yani biz sınıf dışından tanımlı olmayan, ya da tanımlı olup erişemediğimiz bir yerden, exec(); metodunu <strong>$deneme-&gt;exec(&#8220;admin&#8221;, 5); şeklinde çalıştırmak istersek __call</strong> metodu, <strong>Deneme::exec(&#8220;admin&#8221;, 5); şeklinde çalıştırmak istersek __callStatic</strong> metodu çalışır.</p>
<h3>Aşırı yükleme (Overloading)</h3>
<p>Overloading, dinamik olarak özellik ya da metod yaratmak anlamına gelir. Bu özellikleri ya da metodları kullanırken de magic metodlar üzerinden işlem yaparız. Örnek olarak Deneme sınıfının içerisinde bu metodları kullanıp daha sonra açıklamasını yapayım.</p>
<pre name="code" class="php">class Deneme{

	/*Overload verileri burada topluyoruz*/
	private $_data = array();

	public $length = 25;

	private $width = 20;

	public function __set($name, $value){
		echo "$name ozelligine $value degeri ataniyor\n";
		$this-&gt;_data[$name] = $value;
	}

	public function __get($name){

		if (array_key_exists($name, $this-&gt;_data)) {
			echo "$name ozelliginin degeri istendi: ";
			return $this-&gt;_data[$name];
        	}

		echo "__get ile tanimsiz ozellik istendi";
        return null;
	}

	public function __isset($name){
		echo "$name ozelliginin olup olmadigi : \n";
		return isset($this-&gt;_data[$name]);
	}

	public function __unset($name){
		echo "$name siliniyor\n";
		unset($this-&gt;_data[$name]);
	}

}</pre>
<p>Çalıştırıldığında daha net görülebilmesi için yorum satırı olarak eklemek yerine hangi metodun ne iş yaptığını echo kullanarak göstermeyi tercih ettim.</p>
<h4>__set() :</h4>
<p>__set metodu, erişilebilir olmayan bir özelliğin <strong>değerini değiştirmeye çalıştığımızda</strong> ya da bir özellik <strong>oluşturmak istediğimizde</strong> iş görür. 2 parametre alır, ilki değişken ikincisi ise değer.</p>
<p>Örneğin sınıf içerisinde olmayan bir $size özelliğini düşünelim. $deneme-&gt;size = 5; yazdığımızda, Deneme sınıfı içerisindeki önceden overload için tanımladığımız <strong>$_data arrayini</strong> kullanarak <strong>$_data[size] = 5;</strong> oluşturmuş oluruz.</p>
<p>Sınıf içerisinde tanımlı olan <strong>private $width</strong> için <strong>$deneme-&gt;width = 10;</strong> olarak değerini değiştirmeye çalıştığımızda ise, eğer __set metodu varsa, özelliğin değerini değiştirebiliriz. Eğer __set metodu yoksa, <strong>Cannot access private property&#8230;</strong> şeklinde bir <strong>fatal error</strong> alırız.</p>
<h4>__get() :</h4>
<p>Sınıf içerisinde erişilebilir olmayan bir özelliğe <strong>erişmeye çalıştığımıza</strong> __get metodu çalışır. Bu metod parametre olarak kullanmak istediğimiz elemanı alır.</p>
<p>Sınıf içerisinde tanımlı olmayan bir $size özelliğini düşünelim. echo $deneme-&gt;size; yazdığımızda bize null değer döner. __get metodunu yazmamış olsaydık <strong>Undefined property&#8230;</strong> şeklinde bir <strong>notice</strong> alırdık.</p>
<p>Sınıf içerisinde tanımlı olan <strong>public $length = 25;</strong> özelliğine bakalım. public olduğudan dolayı, yani sınıf dışarısından erişmemizde bir problem olmadığından dolayı <strong>__get metodu çalışmaz</strong>, echo $deneme-&gt;length; yazdığımızda doğrudan değere ulaşırız.</p>
<p>Önce __set metodunu kullanarak yeni bir özellik yaratıp ve buna değer atayıp, daha sona __get metodunu kullanarak bunu çağıralım;</p>
<pre name="code" class="php">$deneme-&gt;hacim = 5;
echo $deneme-&gt;hacim;</pre>
<p>Sayfada göreceğimiz çıktı şu olur;</p>
<pre name="code" >hacim ozelligine 4 degeri ataniyor

hacim ozelliginin degeri istendi 4</pre>
<h4>__isset() :</h4>
<p>isset(); metodu normalde true ya da false olarak boolean tipte değer döndürür. Biz sınıf içerisinde yarattığımız bir özellik için isset(); kullanırsak, __isset(); magic metodumuz çalışır.</p>
<pre name="code" class="php">$deneme-&gt;hacim = 5;  // __set kullanildi

echo $deneme-&gt;hacim; //__get kullanildi

var_dump(isset($deneme-&gt;hacim)); //__isset kullanildi</pre>
<h4>__unset() :</h4>
<p>__unset metodu da, yarattığımız bu değişkenleri yok etmeye yarar.</p>
<pre name="code" class="php">$deneme-&gt;hacim = 5;  // __set kullanildi

echo $deneme-&gt;hacim; //__get kullanildi

var_dump(isset($deneme-&gt;hacim)); //__isset kullanildi true döndü

unset($deneme-&gt;hacim); //__unset kullanildi

var_dump(isset($deneme-&gt;hacim)); // __isset kullanildi false döndü</pre>
<h3>Nesne saklama (Object Serialization)</h3>
<h4>__sleep() :</h4>
<p>Sınıf için yarattığımız nesneyi serialize(); metodu ile kullandığımızda __sleep metodu devreye girer. __sleep metodu, nesnenin serialize olması istenen özelliklerini <strong>array olarak</strong> geri döndürür.</p>
<p>Serialize etmek, kullanılabilir bir örneğini saklamak anlamındadır. Serialize edilen nesne text dosyasında ya da veritabanında vb. saklanabilir.</p>
<h4>__wakeup() :</h4>
<p>unserialize(); metodunu kullandığımızda çalışan metoddur. __sleep metodunun tam tersi işlevi yapar, saklanan veriyi ortaya çıkartır.</p>
<p>Basitçe kullanımlarını örnekleyelim;</p>
<pre name="code" class="php">
class Deneme{
	public $name;
	public $age;

	public function __construct($name, $age){
		$this-&gt;name = $name;
		$this-&gt;age = $age;
	}

	public function __sleep(){
		echo "Serialize ediliyor: ";
		return array('name', 'age');
	}

	public function __wakeup(){
		echo "Unserialize ediliyor: ";
	}
}

$deneme = new Deneme("Gokhan", 20);

$a = serialize($deneme); // serialize ettik
var_export($a); // serialize edilmiş halini gördük

/* deneme.txt adında bir dosyaya yazalım, daha sonra da aynı dosyadan okuyalım*/
$fptr = fopen("deneme.txt", "w");
fwrite($fptr, $a);
fclose($fptr);

$s = implode('', file("deneme.txt"));

$s = unserialize($s); //unserialize ettik
var_export($s); //unserialize edilmiş halini görelim</pre>
<p>Serialize edilmiş hal text dosyasında şu şekilde saklanır;</p>
<pre name="code" >
O:6:"Deneme":2:{s:4:"name";s:6:"Gokhan";s:3:"age";i:20;}</pre>
<h3>Nesnelerle string işlemleri</h3>
<h4>__toString() :</h4>
<p>Bu metod, sınıf için yarattığımız nesneyi yazdırmak istediğimizde, yani echo yapmak istediğimizde çalışan metoddur.</p>
<pre name="code" class="php">class Deneme{
	public $name;

	public function __construct($name){
		$this-&gt;name = $name;
	}

	public function __toString(){
		return $this-&gt;name;
	}

}

$deneme = new Deneme('Dubluve');
echo $deneme;</pre>
<p>Ekranda <strong>Dubluve</strong>&#8216;yi görürüz.</p>
<p>__toString metodunu kullanmadan nesneyi yazdırmaya çalışırsak <strong>Catchable fatal error: Object of class Deneme could not be converted to string&#8230; </strong> ile karşılaşırız.</p>
<h4>__set_state() :</h4>
<p>Bu metod, sınıfımıza oluşturduğumuz nesne için var_export(); metodu kullanıldığında çalışır. var_export metodunun ne işe yaradığını bilmiyorsanız <a title="php.net -  var_export" href="http://www.php.net/manual/tr/function.var-export.php">buradan</a> inceleyebilirsiniz.</p>
<p>__set_state metodu parametre olarak nesnenin kendisini array olarak alır. Örnekleyecek olursak</p>
<pre name="code" class="php">class Deneme{
	private $_var1;
	private $_var2;

	public function __construct(){
		$this-&gt;_var1 = 100;
		$this-&gt;_var2 = 200;
	}

	public static function __set_state(array $array){
		foreach ($array as $key =&gt; $value) {
			echo "$key ==&gt; $value";
		}
	}
}

$deneme = new Deneme();
eval(var_export($deneme, true).';');</pre>
<p>Bize sonuç olarak şunu verir;</p>
<pre name="code" >_var1 ==&gt; 100
_var2 ==&gt; 200</pre>
<p>Eğer <strong>__set_state metodunu tanımlamadan</strong> var_export($deneme, true); kullanırsak</p>
<pre name="code" >Deneme::__set_state(array( '_var1' =&gt; 100, '_var2' =&gt; 200, ))</pre>
<p>sonucu ile karşılaşırız.</p>
<h3>Nesneyi fonksiyon olarak kullanmak</h3>
<h4>__invoke() :</h4>
<p>Bir nesneyi bir metod olarak çağırdığımızda çalışan metoddur. Şöyle ki,</p>
<pre name="code" class="php">class Deneme{

	public function __invoke($var){
		var_dump($var);
	}

}

$deneme = new Deneme();
$deneme(5); // $deneme-&gt;__invoke(5);</pre>
<p>Eğer __invoke metodunu kullanmadan nesneyi metodmuş gibi kullanmaya çalışırsak,<strong> Fatal error: Function name must be a string&#8230; </strong> ile karşılaşırız.</p>
<h3>Nesne kopyalamak (clone)</h3>
<h4>__clone() :</h4>
<p>İsminden de belli olduğu gibi klonlamak, kopyalamak temeline dayanan magic metodumuz. Örnek üzerinden anlatmak en güzeli olacak.</p>
<p>İlk olarak __clone kullanmadan bir nesneyi diğer nesneye nasıl kopyalarız buna bi bakalım.</p>
<pre name="code" class="php">class Deneme{
	public $name;
	public $age;

}

$ogrenci_1 = new Deneme();
$ogrenci_1 -&gt; name = "Gokhan";
$ogrenci_1 -&gt; age = 20;

$ogrenci_2 = $ogrenci_1;
$ogrenci_2 -&gt; name = "Osman";
$ogrenci_2 -&gt; age = 23;

var_export($ogrenci_1);
var_export($ogrenci_2);</pre>
<p>Deneme sınıfımızda sadece 2 tane özellik tanımladım. <strong>$name</strong> ve <strong>$age</strong>. İlk nesnemiz <strong>$ogrenci_1</strong> içine bu özellikleri yerleştirdik, daha sonra <strong>$ogrenci_1 nesnemizi $ogrenci_2 nesnesine atadım</strong> (assign) ve ona da farklı özellikleri yerleştirdik. Fakat var_export kullanıp sonuçlara baktığımızda şöyle bir tabloyla karşılaşırız;</p>
<pre name="code" >Deneme::__set_state(array( 'name' =&gt; 'Osman', 'age' =&gt; 23, ))
Deneme::__set_state(array( 'name' =&gt; 'Osman', 'age' =&gt; 23, ))</pre>
<p>Bunun sebebi, $ogrenci_2 nesnesi üzerinde yaptıklarımızın $ogrenci_1 nesnesini de etkilemesidir. Çünkü <strong>2 nesne de aynı hafıza konumunu işaret ediyorlar.</strong></p>
<p>Şimdi gelelim __clone kullanımına. Aynı örneği __clone kullanarak yapalım.</p>
<pre name="code" class="php">class Deneme{
	public $name;
	public $age;

	public function __clone(){
		echo "Nesne kopyalandi\n";
	}
}

$ogrenci_1 = new Deneme();
$ogrenci_1 -&gt; name = "Gokhan";
$ogrenci_1 -&gt; age = 20;

$ogrenci_2 = clone $ogrenci_1;
$ogrenci_2 -&gt; name = "Osman";
$ogrenci_2 -&gt; age = 23;

var_export($ogrenci_1);
var_export($ogrenci_2);</pre>
<p>Burada <strong>clone </strong>keywordunu kullandık (<strong>$ogrenci_2 = clone $ogrenci_1;</strong>), clone keywordu __clone metodunun çalışmasını sağladı. __clone metodu içinde özellikleri de clone yapabiliriz.</p>
<p>Sonucu :</p>
<pre name="code" >Nesne kopyalandı
Deneme::__set_state(array( 'name' =&gt; 'Gokhan', 'age' =&gt; 20, ))
Deneme::__set_state(array( 'name' =&gt; 'Osman', 'age' =&gt; 23, ))</pre>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/04/23/php-magic-methods/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PHP curl ile istek örnegi (php curl example)</title>
		<link>http://dubluve.net/2012/04/09/php-curl-ile-istek-ornegi-php-curl-example/</link>
		<comments>http://dubluve.net/2012/04/09/php-curl-ile-istek-ornegi-php-curl-example/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 16:23:12 +0000</pubDate>
		<dc:creator>Emre Macit</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php curl example]]></category>
		<category><![CDATA[php curl örnek]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=1168</guid>
		<description><![CDATA[CURL basit manada bir bot yapmak için kullanılabilir. Veyw webservis altyapısı olmayan yapılar için bir alternatif sağlayabilir. file_get_contents ile yapacağınız url isteklerinde (bunda allow_url_fopen açık olması lazım) kodunuza herhangi bir timeout koyamadığımız için sıkıntılı bir durum oluşabilir. CPU kullanımımız tehlikeye girebilir. Burada da yine curl, güçlü alternatif olarak karşımıza çıkmaktadır. Aşağıda basit bir CURL isteği [...]]]></description>
			<content:encoded><![CDATA[<p>CURL basit manada bir bot yapmak için kullanılabilir. Veyw webservis altyapısı olmayan yapılar için bir alternatif sağlayabilir.<br />
file_get_contents ile yapacağınız url isteklerinde (bunda allow_url_fopen açık olması lazım) kodunuza herhangi bir timeout koyamadığımız için sıkıntılı bir durum oluşabilir. CPU kullanımımız tehlikeye girebilir. Burada da yine curl, güçlü alternatif olarak karşımıza çıkmaktadır.</p>
<p>Aşağıda basit bir CURL isteği yapabilmek için gerekli kodları göreceksiniz. Bunun ile örneğin www.google.com&#8217;u request ederseniz, ilgili sayfanın içeriğini alabileceksiniz.<br />
Yanlarında comment ile açıklamalarını yazdım</p>
<pre name='code' class='php'>
$temp = array("a"=>1, "b"=>2);
$postdata = http_build_query($temp);

$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true); //POST Metodu kullanarak verileri gönder
curl_setopt($ch, CURLOPT_HEADER, false); //Serverdan gelen Header bilgilerini önemseme.
curl_setopt($ch, CURLOPT_URL, "http://www.domain.com"); //Bağlanacağı URL
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); //POST verilerinin querystring hali. Gönderime hazır!
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //Transfer sonuçlarını return et. Onları kullanacağım!
curl_setopt($ch, CURLOPT_TIMEOUT, 20); //20 saniyede işini bitiremezsen timeout ol.
$data = curl_exec($ch);
curl_close($ch);

echo $data;
</pre>
<p><strong>NOT :</strong> php_curl php eklentinizin açık olması gerekiyor. php.ini&#8217;de yer alır kendisi. Wamptan sırayla Wamp simgesi -> PHP ->PHP extensions-> php_curl a tıklayarak açabilirsiniz. Ya da php.ini nize ekleyebilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/04/09/php-curl-ile-istek-ornegi-php-curl-example/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>php 5.4 Diziler (Array) – Php Yeni Özellikler</title>
		<link>http://dubluve.net/2012/03/30/php-5-4-diziler-array-php-yeni-ozellikler/</link>
		<comments>http://dubluve.net/2012/03/30/php-5-4-diziler-array-php-yeni-ozellikler/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 11:13:19 +0000</pubDate>
		<dc:creator>Emre Macit</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php 5.4]]></category>
		<category><![CDATA[php 5.4 array]]></category>
		<category><![CDATA[php 5.4 diziler]]></category>
		<category><![CDATA[php 5.4 yeni özellikler]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=1115</guid>
		<description><![CDATA[Php 5.4 ün içindeki yeniliklerden biri de dizilerdeki (array&#8217;lerdeki) kısaltılmış kullanım özelliğidir. Aşağıda bu kullanım ile ilgili bir örnek verdim. //Php 5.4'ten önce < ?php $array = array( "key1" => "value1", "key2" => "value2", ); // PHP 5.4 'ten itibaren $array = [ "key1" => "value1", "key2" => "value2", ]; Ayrıca geri döndürdüğü (return değeri) [...]]]></description>
			<content:encoded><![CDATA[<p>Php 5.4 ün içindeki yeniliklerden biri de dizilerdeki (array&#8217;lerdeki)  kısaltılmış kullanım özelliğidir. Aşağıda bu kullanım ile ilgili bir örnek verdim.</p>
<pre name='code' class='php'>
//Php 5.4'ten önce
< ?php
$array = array(
    "key1" => "value1",
    "key2" => "value2",
);

// PHP 5.4 'ten itibaren
$array = [
    "key1" => "value1",
    "key2" => "value2",
];
</pre>
<p>Ayrıca geri döndürdüğü (return değeri) array olan fonksiyonlarda da eskiden uğraştığımız ilk önce değişkene atama çilesi, php 5.4 ile bitmiş olacak.<br />
Artık fonksiyon çağırdıktan sonra doğrudan köşeli parantez ile istediğimiz indisi alabiliriz. </p>
<p><b>Not : </b> Bu durum optimize çalışmayan metodlar, fonksiyonlar yazmanıza sebep olabilir, bu konuda sistemin gereksiz enerji harcamamasına dikkat ediniz.</p>
<pre name='code' class='php'>
< ?php
function getArray() {
    return array(1, 2, 3);
}
// php 5.4'ten önce
$tmp = getArray();
$secondElement = $tmp[1];

//PHP 5.4'ten itibaren
$secondElement = getArray()[1];

// veya
list(, $secondElement) = getArray();
?>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/03/30/php-5-4-diziler-array-php-yeni-ozellikler/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>PHP gibi Javascript yazmak (PHP functions in JavaScript)</title>
		<link>http://dubluve.net/2012/03/25/php-gibi-javascript-yazmak-php-functions-in-javascript/</link>
		<comments>http://dubluve.net/2012/03/25/php-gibi-javascript-yazmak-php-functions-in-javascript/#comments</comments>
		<pubDate>Sat, 24 Mar 2012 23:31:15 +0000</pubDate>
		<dc:creator>Emre Macit</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[opensource javascript php]]></category>
		<category><![CDATA[php gibi javaescript yazmak]]></category>
		<category><![CDATA[php gibi js yazmak]]></category>
		<category><![CDATA[php in js]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=1086</guid>
		<description><![CDATA[Bir web geliştiricisiyseniz, yolunuz bir yerde bir browser script dili olan Javascript ile mutalak kesişir. Browser üzerinde bir fonksiyon, bir işlem, bir doğrulama, vb.. yapmak istersiniz. Fakat Javascript&#8217;e o kadar da aşina değilsiniz, ne yapacaksınız? Burada Bir alternatif devreye giriyor. phpjs.org adresinde göreceğiniz projede, insanlar php fonksiyonlarını javascript e port ediyorlar. (port etmek = uyarlamak) [...]]]></description>
			<content:encoded><![CDATA[<p>Bir web geliştiricisiyseniz, yolunuz bir yerde bir browser script dili olan Javascript ile mutalak kesişir. Browser üzerinde bir fonksiyon, bir işlem, bir doğrulama, vb.. yapmak istersiniz. Fakat Javascript&#8217;e o kadar da aşina değilsiniz, ne yapacaksınız?</p>
<p>Burada Bir alternatif devreye giriyor.<br />
<a href="http://http://phpjs.org" title="php gibi javasciprt yazmak" target="_blank">phpjs.org</a> adresinde göreceğiniz projede, insanlar php fonksiyonlarını javascript e port ediyorlar. (port etmek = uyarlamak)<br />
yani ben bu siteden ilgili dosyaları çağırdığımda, artık javascriptte şunu çalıştırabileceğim ; bildiğimiz echo.</p>
<pre>
echo('
<div>

abc

abc
</div>

');
</pre>
<p>Şu an sitede bir çok php fonksiyonu js&#8217;ye uyarlanmış şekilde var. Ayrıca bir çok fonksiyon da devam ediyor veya sırasını bekliyor. Eğer işinizi gördüyse, siz de bu <em>OPENSOURCE</em> projeye, port edilmemiş fonksiyonlardan birkaçını portlayarak katkıda bulunabilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/03/25/php-gibi-javascript-yazmak-php-functions-in-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>php 5.4 Traits &#8211; Php Yeni Özellikler</title>
		<link>http://dubluve.net/2012/03/18/php-5-4-traits-yeni-ozellikler/</link>
		<comments>http://dubluve.net/2012/03/18/php-5-4-traits-yeni-ozellikler/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 17:12:21 +0000</pubDate>
		<dc:creator>yusuf</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php 5.4]]></category>
		<category><![CDATA[php 5.4 yeni özellikler]]></category>
		<category><![CDATA[php5.4 trait]]></category>
		<category><![CDATA[trait]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=1040</guid>
		<description><![CDATA[Php 5.4 ile ilgili yeni özelliklerden bir tanesi trait kavramı. trait kavramının bir Türkçe karşılığını bulamadım. Bir sınıfın birden çok miras alması durumu php&#8217;de olmayan bir durum. Bildiğim kadarıyla sadece C++&#8217;ta var. Traitler bizi birden çok miras alma durumlarına benzer ihtiyaçları çözmek için getirilmiş bir yenilik gibi gözüküyor. Normalde 2 adet farklı sınıfımızın aynı fonksiyonu kullanması [...]]]></description>
			<content:encoded><![CDATA[<p>Php 5.4 ile ilgili yeni özelliklerden bir tanesi <strong>trait</strong> kavramı. <strong>trait</strong> kavramının bir Türkçe karşılığını bulamadım.</p>
<p>Bir sınıfın birden çok miras alması durumu php&#8217;de olmayan bir durum. Bildiğim kadarıyla sadece C++&#8217;ta var.</p>
<p>Traitler bizi birden çok miras alma durumlarına benzer ihtiyaçları çözmek için getirilmiş bir yenilik gibi gözüküyor.</p>
<p>Normalde 2 adet farklı sınıfımızın aynı fonksiyonu kullanması gerekiyorsa, o iki sınıfın ata sınıfı olarak tanımlar, o metodu onun içine koyar, 2 farklı sınıfımızı da ondan türeterek bu konuyu halledebilirdik.</p>
<p>Peki ya, zaten <strong>extend</strong> ettiğimiz bir sınıf var ise, ve de ekleyeceğimiz metod ile alakasız ise o zaman ne yapacağız?</p>
<p>Bu durumda <strong>duplicate</strong> (tekrarlayan) kod yazmamak için traitleri kullanmamız faydalı olabilir.</p>
<p>Php&#8217;nin sitesindeki örneği vereyim.</p>
<pre class="php">&lt; ?php
trait ezcReflectionReturnInfo {
    public function getReturnType() { /*1*/ }
    public function getReturnDescription() { /*2*/ }
}

class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ..bişeyler bişeyler... */
}

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* .. bişeyler bişeyler... */
}
?&gt;</pre>
<p>Yukarıda 1 trait , 2 sınıf mevcut. 2 sınıfın extend ettiği bir sınıf daha var. (bu kodda yok) Bu durumda 2 farklı sınıfta, ana sınıfta olmayan yeni metodlar istiyorsam, sınıfın içinde <strong>use ecReflectionReturnInfo</strong> diyerek bu traiti sınıf içinde kullanılabilir hale getirmiş oluyorum.</p>
<p><strong>Yani bu trait içinde yazılı metodlar sanki sınıfın çinde yazılmış public functionlar olarak davranacaklardır.</strong></p>
<p><strong></strong>O yüzden trait kelimesini Türkçe&#8217;ye &#8220;sınıfçık&#8221; olarak çeviriyorum <img src='http://dubluve.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Bu mantıkta traitler içinde değişken, static function, vb.. gibi şeyler tanımlayabiliyoruz. Ayrıca hangisini hangisinin yerine kullanacağının ayarlamalarını da detaylı yapabiliyoruz.</p>
<p>Henüz deneyemediğim ve yazılımda ihtiyaç olarak ne şekilde kullanabilceğimin tam oturmadığı diğer bu konular hakkında okumaya devam etmek için php&#8217;nin kendi sitesinden devame edebilirsiniz.</p>
<p><a title="php.net traits" href="http://tr2.php.net/traits" target="_blank">http://tr2.php.net/traits</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/03/18/php-5-4-traits-yeni-ozellikler/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>file_get_contents failed to open stream hatasi</title>
		<link>http://dubluve.net/2012/03/09/file_get_contents-failed-to-open-stream-hatasi/</link>
		<comments>http://dubluve.net/2012/03/09/file_get_contents-failed-to-open-stream-hatasi/#comments</comments>
		<pubDate>Fri, 09 Mar 2012 10:57:29 +0000</pubDate>
		<dc:creator>Emre Macit</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[allow_url_fopen]]></category>
		<category><![CDATA[file_get_contents hata]]></category>
		<category><![CDATA[fopen hata]]></category>
		<category><![CDATA[php.ini]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=1007</guid>
		<description><![CDATA[PHP&#8217;de Eğer dış bir URL&#8217;den file_get_contents veya fopen ile veri okumak istiyorsanız, ve bu tarz bir hata alıyorsanız (file_get_contents failed to open stream: no suitable wrapper could be found hatası), php.ini nizde aşağıdaki satırı yazmanız gerekmektedir. (veya önünde ; varsa, bunu kaldırmanız gerekmektedir.) allow_url_fopen = On Wamp kullanan windowslarda, sırasıyla wamp simgesi, php, php settings, [...]]]></description>
			<content:encoded><![CDATA[<p>PHP&#8217;de Eğer dış bir URL&#8217;den file_get_contents veya fopen ile veri okumak istiyorsanız, ve bu tarz bir hata alıyorsanız (file_get_contents failed to open stream: no suitable wrapper could be found hatası), php.ini nizde aşağıdaki satırı yazmanız gerekmektedir. (veya önünde ; varsa, bunu kaldırmanız gerekmektedir.)</p>
<pre name='code' class='php'>
allow_url_fopen = On
</pre>
<p>Wamp kullanan windowslarda, sırasıyla wamp simgesi, php, php settings, allow url fopen simgelerini tıkladığınızda bu dediğimi kendisi otomatik olarak yapıyor.</p>
<p>Hepimize bir hatırlatma olsun.<br />
Bu genelde php ortamınızı değiştirdiğinizde, php.ini ayarlarınızın sıfırlanmasıyla ilgili karşılaşabilecğeiniz bir durumdur. Yine de bu tarz küçük hataların arada çıkması bence iyi oluyor. Çünkü, neyin nereden geldiğinin ezberi bozulmuş oluyor, bu da anlamayı kuvvetlendiriyor diye düşünmekteyim.</p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/03/09/file_get_contents-failed-to-open-stream-hatasi/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>php 5.4 çıktı</title>
		<link>http://dubluve.net/2012/03/05/php-5-4-cikti/</link>
		<comments>http://dubluve.net/2012/03/05/php-5-4-cikti/#comments</comments>
		<pubDate>Mon, 05 Mar 2012 12:57:51 +0000</pubDate>
		<dc:creator>Emre Macit</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php 5.4]]></category>
		<category><![CDATA[php5.4 çıktı]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=980</guid>
		<description><![CDATA[Php 5.4 çıkmasıyla birilikte beraberinde getirdiği bir çok yenilik var. Bunlardan önüzmüdeki günlerde deneyerek bahsetmeye çalışacağım. Php ye yakışacak şekilde değişiklikler olduğunu düşünüyorum ilk etapta. Temel bazlı birkaç konuya da el atılmış. Bunlar arrayler, ve döngüler gibi durumları içeren konular. Bazı Deprecated özellikleri de kaldırmışlar. (Nihayet magic_quotes_gpc de kalktı) İlerleyen yazılarımızda paylaşmaya çalışacağım. Herkese hayırlı [...]]]></description>
			<content:encoded><![CDATA[<p>Php 5.4 çıkmasıyla birilikte beraberinde getirdiği bir çok yenilik var. Bunlardan önüzmüdeki günlerde deneyerek bahsetmeye çalışacağım. Php ye yakışacak şekilde değişiklikler olduğunu düşünüyorum ilk etapta. Temel bazlı birkaç konuya da el atılmış. Bunlar arrayler, ve döngüler gibi durumları içeren konular.</p>
<p>Bazı Deprecated özellikleri de kaldırmışlar. (Nihayet magic_quotes_gpc de kalktı)</p>
<p>İlerleyen yazılarımızda paylaşmaya çalışacağım. Herkese hayırlı olsun.</p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/03/05/php-5-4-cikti/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>PHP Saydam (Transparent) Resim Yaratmak</title>
		<link>http://dubluve.net/2012/03/04/php-transparent-image/</link>
		<comments>http://dubluve.net/2012/03/04/php-transparent-image/#comments</comments>
		<pubDate>Sun, 04 Mar 2012 20:49:00 +0000</pubDate>
		<dc:creator>Boğaç Aslanyürek</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[saydam]]></category>
		<category><![CDATA[transparent]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=972</guid>
		<description><![CDATA[PHP&#8217;de GD ile eklediğiniz resimlerin arkası varsayılan olarak siyah oluyor. Eğer saydam bir arka planı olmasını istiyorsanız, şu şekilde ilerlemek gerekiyor: Önce yeni ve boş bir resim yaratıyoruz:  $im = imagecreatetruecolor(100, 100); Daha sonra bu resimden saydam olacak rengi oluşturuyoruz. Aşağıdaki örnekte beyaz renk saydam olacak, sizin resminizde bu renk kullanmadığınız herhangi bir renk olabilir. [...]]]></description>
			<content:encoded><![CDATA[<p>PHP&#8217;de GD ile eklediğiniz resimlerin arkası varsayılan olarak siyah oluyor. Eğer saydam bir arka planı olmasını istiyorsanız, şu şekilde ilerlemek gerekiyor:</p>
<p>Önce yeni ve boş bir resim yaratıyoruz:</p>
<pre name="code" class="php"> $im = imagecreatetruecolor(100, 100);</pre>
<p>Daha sonra bu resimden saydam olacak rengi oluşturuyoruz. Aşağıdaki örnekte beyaz renk saydam olacak, sizin resminizde bu renk kullanmadığınız herhangi bir renk olabilir.</p>
<pre name="code" class="php">$transparent = imagecolorallocatealpha($im, 255, 255, 255, 127);</pre>
<p>Yarattığımız bu renk saydam olacağı için, boş resmi bu renk ile dolduruyoruz:</p>
<pre name="code" class="php">imagefill($im, 0, 0, $transparent);</pre>
<p>Artık bu resme istediğimiz herhangi bir nesneyi ekleyebiliriz. Örneğin yazı ekleyelim, önce yazı rengini belirleyelim. Bu renk arka plan renginden farklı olmalı ki saydam olmasın:</p>
<pre name="code" class="php">$black = imagecolorallocate($im, 0, 0, 0);</pre>
<pre name="code" class="php">imagestring (<code>$im</code> , 5 , 0 , 0 , "dubluve" , $black);</pre>
<p>Yazımızı da ekledikten sonra, saydamlığı destekleyen PNG formatında resmi kaydetmemiz gerekiyor:</p>
<pre name="code" class="php">imagepng($im,"dubluve.png");</pre>
<p>Saydam resminizle mutluluklar dileriz <img src='http://dubluve.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/03/04/php-transparent-image/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  dubluve.net/category/software/php/feed/ ) in 1.74888 seconds, on May 20th, 2012 at 2:42 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on May 20th, 2012 at 3:42 am UTC -->
