Golang’te Değişken türleri ve tanımlamaları

Her programın bazı verileri ve bilgileri bellekte saklaması gerekir. Veriler, belirli bir bellek konumunda saklanırlar.

Değişken dediğimiz şeyler, verilerin saklandığı bir hafıza konumuna verilen uygun bir isimdir. Bir adın dışında her değişkenin de ilişkili bir türü vardır.

Değişken türleri(int,string) ilgili veri kümelerini kategorilere ayırır, ram bellek üzerinde saklanma biçimlerini, tutabilecekleri değer aralığını ve üzerlerinde yapılabilecek işlemleri tanımlamaktadırlar.

Kısa bir girişten sonra go da nasıl değişken tanımlarız incelemeye başlayalım.

Var anahtar sözcüğü ile değişken tanımlama

İlk inceleyeceğimiz tür var anahtar sözcüğü ile oluşturulan olucaktır.Burda dikkatini çeken şey tiplerin değişken isimlerinden sonra gelmesi olabilir.Çoğu programlama dilinden farklı olarak golang’te öncelikle değişken adı sonra türü gelmektedir.Aşağıdaki örneği inceleyelim.

var a int
var b bool
a = 15
b = false

Short-hand notation (:=) ile değişken tanımlama

a := 15
b := false

Bu şekilde bir tanımlama yaptığınız zaman sadece bir deklarasyon yapmakla kalmayıp aynı zamanda bir değer ataması yapmış oluyorsunuz; ancak bazı göz ardı etmememiz gereken hususlar var. Örneğin, yukarıdaki yöntemle aynı değişkeni iki kez tanımlayın aynı değeri atadığınız zaman Go Compiler size hata veriyor. Yine aynı şekilde short-hand notation ile değişkenleri fonksiyonların dışında tanımlayamıyorsunuz.

Go, Statik olarak yazılan bir dil olmasına rağmen, beyan ettiğiniz her değişkenin türünü açıkça belirtmenizi gerektirmez.

Başlangıç değeri olan bir değişkeni bildirdiğinizde, Golang otomatik olarak değişkenin türünü sağ taraftaki değerden alır. Bu nedenle, bildirim sırasında değişkeni başlatırken türü belirtmeniz gerekmez.

Çoklu değişken tanımlamaları

var (
  x int
  b bool
)

var (
  firtname , lastname string
  age int8
)

Ayrıca çoklu değişkeni tek satırdada tanımlayabilirsiniz.

a, b := 20, 16

Zero values

Golang’te tanımladığınız değiikene herhangir bir değer atamazsanız değişken türüne göre boş değer atanacaktır.Aşağıdaki tabloda tipine göre başlayacağı sıfır değerlerini görebilirsiniz.

TypeZero values
boolfalse
string“”
int, int8, int16 vs.0
float32, float640.0

Değişken Türleri

Go’da değişken tanımlamayı inceledikten sonrada şimdi değişken tiplerimi inceleyelim.

Boolean

Boolean tipi aslında hepimizin aşina olduğu içerisine mantıksal olarka true ve false tutan değişken tipidir.

Sayısal Tipler

Go, int,float gibi diğer programlama dillerinden iyi tanıdğımız değişken tipine sahiptir. Bu tür makineniz için uygun uzunluğa sahiptir, yani 32 bitlik bir makinede 32 bit ve 64 bitlik bir makinede 64 bittir.

Uzunluk hakkında açık olmak istiyorsanız, int32 veya uint32 ile de buna sahip olabilirsiniz. (İmzalı ve imzasız) tamsayıların tam listesi int8, int16, int32, int64 , uint8, uint16, uint32, uint64‘tür.

Ayrıca küsuratlı sayılar için kullanabileceğimiz float32 ve float64 türleride golang’te mevcuttur.

Örneğin kullanıcınızın yaşını tutacaksanız int8 ile daha kısa bi aralık belirleyip belleğinizi daha verimli kullanabilirsiniz.

Not: u ile başlayan veri tipleri bir çok dilden bildiğimiz üzere unsigned(sinyalsiz)’dir yani 0’dan küçük-eksi değer alamaz.

Strings
Bir diğer önemli değişken türü ise gene hepimizin aşina olduğu stringlerdir.

s := "Hello World!"

Go’daki string, çift tırnak içine alınmış bir dizi UTF-8 karakteridir (”). Tek tırnak (’) kullanırsanız, bir karakter (UTF-8 ile kodlanmış) anlamına gelir; Bu, Go’da bir string değildir.Yeni başlayanların genellikle en çok hata yaptığı noktadır.O yüzden dikkat etmenizde fayda var.

Bir değişkene string atandıktan sonra içerisinden karakter değiştirilemez

C’den gelen insanlar için; Go’da aşağıdaki işlem hata verecektir.

var s string = "test"
s[0] = 'c' ← Birinci karaktei ’c’ ile değiştir. Fakat bu bir hatadır

Eğer böyle birşey yapma ihtiyacınız varsa aşağıdaki kod’u incelemenizi öneririm.

s := "test"
c := []rune(s)
c[0] = 'c'
s2 := string(c)
fmt.Printf("%s\n", s2)

Şimdi adım adım kod’ta ne yaptığımıza bir bakalım.

  • İlk Önce rune(Unicode kod noktalarını temsil ederler.) ile string’imizi rune array’ine dönüştürdük.
  • Daha sonra bu array’in ilk elemanını değiştirdik.(Tek tırnak kullanıldığına dikkat edin.)
  • Daha sonra rune tipinde değer tutan array’imizi tekrar string’e çevirip ekrana yazdırdık.

Runes

Rune, aslında int32 için bir alias’dır UTF-8 kod noktasıdır.

Rune değişmez değerleri yalnızca 32 bit tam sayı değerleridir (ancak türsüz sabitlerdir, bu nedenle türleri değişebilir). Unicode kod noktalarını temsil ederler. Örneğin, rune değişmez değeri ‘a’ aslında 97 sayısıdır.

fmt.Println([]rune("cafe")) // [99 97 102 233]

Rune tipi ile ilgili ileride daha detaylı yazı hazırlamayı düşünüyorum.Rune türü ile ilgili daha detaylı bilgi için aşağıdaki kaynaklara göz atabilirsiniz

Türkiyedeki AVM’lerin Listesi

Herkese selam

Daha önce yaptığım bir proje için hazırladığım avm listesi vardı.İhtiyaç duyan birisi olur diye githubta open source hale getirdim.

https://github.com/MetinAgaoglu/Turkiye-AVM-Listesi

Yukarıdaki URL’den ulaşabilirsiniz.

Repoda Türkiyedeki AVM’ler il kodlarıyla ve aşağıdaki detaylarıyla csv,sql,json formatında yer almaktadır.

  • Adı
  • Bulunduğu ilin plaka kodu
  • Adresi
  • Harita Linki (Regex ile içerisinden LAT,LNG Alınabilir)
  • Shop sütununda ise virgüller ayrılarak içerisindeki mağazalar listelenmiştir.

Github Reposundada belirttiğim gibi ihtiyacınıza göre kullanabilirsiniz.Aşağıda bazı örnek kullanımları yer almaktadır.

Plakasına Göre Belirli Şehire Ait AVM’ler

SELECT * FROM app_mall WHERE city_id = 16

Belirli şehirdeki Belirli mağazalar

SELECT * FROM app_mall WHERE city_id = 16 AND shop LIKE '%atasun%'

NodeJS ile SMTP Mail Gönderme

Merhaba arkadaşlar bugün NodeJS platformu kullanarak yaptığımız projelerde nasıl mail göndericeğimizi görücez.

Bu işlem için nodemailer paketinden yararlanıcaz.Öncelikle bu paketi projemize dahil edelim.Bunun için proje dizinimizde

npm install nodemailer --save

Komutu ile paketimizi projemize dahil ettik. –save tag’ı ilede package.json dosyamıza dahil ettik.

 var transporter = nodemailer.createTransport({
                    host: 'mail.server.com',
                    port: 587,
                    secure: false, // true for 465, false for other ports
                    tls:{
                        rejectUnauthorized: false
                    },
                    auth: {
                        user: "mail user", // generated ethereal user
                        pass: "password"// generated ethereal password
                    }
                });

Öncelikle Mail Sunucumuzun config bilgilerini ayarlıyoruz.

             var mailOptions = { 
                    from: 'Örnek Şifre Sıfırlama', // 
                    sender address to: '[email protected]', // list of receivers 
                    subject: 'Şifre Sıfırlama', // Subject line 
                    html: 'Merhaba , gönderdiğimiz linke tıklayarak şifrenizi değiştirebilirsiniz. Şifrenizi değiştimek için tıklayınız. ' };

                }

Bu kısımda mailin kime gönderileceği ve içeriği ayarlanmıştır.

                // send mail with defined transport object
                transporter.sendMail(mailOptions, function(error, info) {
                    if (error) {
                        console.log('Error occurred');
                        console.log(error.message);
                        return;
                    }
                    console.log('Message sent successfully!');
                    console.log('Server responded with "%s"', info.response);
                });

                res.json({ status:true,message:"Mail gönderildi." });

Son kısımda ise ayarladğımız ayarlardaki maili gönderiyoruz.Siz burda kendi senaryonuza göre hata loglarını başka yere kaydetip ona göre işlem vs. yapabilirsiniz.Ayrıca ben bu kısmı Restfull Api olarak yaptığım için JSON bi çıktı verdim siz kendi senaryonuza göre ayarlamanızı yapmalısınız.

NodeJS te temel olarak mail gönderme işlemi bu şekilde , tabiki her seferinde bu şekilde mail server vs girmektense bunları fonkiyona bağlama configten getirme kısmını falan sizin ayarlamanız gerekli.

Yararlandığım kaynaklar:

Nodemailer Github
Nodemailer Official Website
Nodemailer npm

Ubuntuya Wine Kurulumu

Wine Nedir

Pardus Sitesindeki Tanım:

Wine, POSIX uyumlu işletim dizgelerinde Windows yazılımlarını çalıştırmasını sağlayan bir uygulama katmanıdır. Wine’nin açılımı, Wine Is Not an Emulator (Wine Öykünücü Değildir) idir. Wine’nın açılımı birçok kullanıcı tarafından Windows Emulator olarak karıştırılmaktadır. Wine’ın tüm Windows uygulamalarını çalıştırması beklenmemelidir. Çünkü daha Windows’un tüm kitaplıkları ve Windows’un diğer tüm yetenekleri tümüyle Linux’a uyarlanamamıştır. Wine’ın çalıştırdığı uygulamaların başarım düzeyleri değişken olmakla birlikte Wine ile çalıştırılan bazı uygulamalar, Windows ortamından daha hızlı çalışabilmektedir.Wine’ın bir yazılımı çalıştırıyor olması, o yazılımı sorunsuz bir şekilde çalıştıracağı anlamına gelmez. Wine’ın Uygulama Veritabanı ile Wine ile denenen yazılımların çalışma durumları hakkında ayrıntılı bilgi alınabilir.

Pardus.Org taki makale

WMAracindaki Wine tanımı

Wine’ın çalışma prensibi son derece basittir. Windows için üretilmiş olan yazılımların Linux’da çalışması teorik olarak mümkün değildir. Fakat Wine, bu yazılımların çalışmasını sağlayabilmek için gerekli kütüphanelerin de yer aldığı bir katman oluşturmaktadır. Sonuç olarak Wine’ın bu katmanı içerisinde başta .EXE dosyaları olmak üzere Windows ve benzeri işletim sistemleri içerisinde kullandığınız yazılımların birçoğunu Linux işletim sistemleri üzerinde de kullanma şansına sahip oluyorsunuz.

WMAracindeki Makale

Yani arkadaşlar kısaca windows uygulamalarımız çalıştırmaya yarıyor.Ben kurdum şuanda CS , Mass Compressor, Teamviever Notepad++ gibi uygulamaları çalıştırdım.Ayrınca Wine ın içine .net Frameworküde kurulabiliyor..Şimdi kurulumuna bakalım

Wine Kurulumu

Evet arkadaşlar ubuntu üzerinde wine kurulumunu yapıcaz.Öncelikle terminalimizi açalım.Ne yazık ki, Ubuntu Wine PPA, Wine 1.8.0 sürümünden bu yana kendi PPA deposunu güncellemedi ve aşağıdaki PPA sadece Wine 1.8 sürümünü veriyor.

$ sudo add-apt-repository ppa:ubuntu-wine/ppa
$ sudo apt-get update
$ sudo apt-get install wine1.8
$ sudo apt-get install winetricks

Evet arkadaşlar yukarki komutlar ile Wine’ın 1.8 sürümünü kurduk ancak Winenın 2.0.1 istikrarlı serisinin en yeni sürümüne sahip olmak istiyorsak, yalnızca Ubuntu 17.04 ve Ubuntu 16.10 / 16.04 için Wine’ın hem geliştirme sürümlerini hem de istikrarlı sürümlerini sunan yeni bir Wine Deposu PPA kullanmanız gerekir. Açıkçası 1.8 işinizi görüceğini sanmıyorum (yani en azından benim görmedi) Bunun yerine ubuntu sürümleriniz uygun ise aşağıda anlatıcağım 2 sürümünü kurmanızı tavsiye ederim.

Terminalinizi açın ve aşağıdaki komutları çalıştırın..

$ sudo dpkg --add-architecture i386  [if you’re running a 64-bit version]
$ sudo apt-add-repository 'https://dl.winehq.org/wine-builds/ubuntu/'
$ wget https://dl.winehq.org/wine-builds/Release.key && sudo apt-key add Release.key
$ sudo apt update && sudo apt install winehq-stable

Komutlarıyla wine’nın stabil sürümü olan 2 yi kurmuş olucaksınız.

Wine 2’e Başlarken

Arkadaşlar konu başındanda söylediğimiz gibi wine programı .exe uzantılı dosyaları çalıştırır.Bunun için .exe uzantılı dosyanın tam yolunu wine vermeniz gerekir.Hemen bir örnek ile açıklayalım.

Terminalinizi exe dosyasının bulunduğu dizinde açın ve aşağıdaki komutu girin

wine dosya.exe

bu komut ile dosyanı windowstaymış gibi çalışacaktır.(Ne yazıkki tüm programlar değil).

Şimdilik bu kadar arkadaşlar iyi çalışmalar..

PHP & MySQL Transaction

Transaction İşlemi

Transaction konusunda en yaygın örnek bankaların havale işlemidir.Parayı gönderen kişinin hesabından tutarı düşen 1. sorgu ve daha sonra paranın yatacağı hesaba tutarı ekleyen 2. sorgu çalışır en basit haliyle düşünürsek.Bu işlemlerin hareketlere kaydedilmesi vs. saymazsak bile.

Her iki sorgunun da güvenle gerçekleştiğinden emin olabilmek için “Transaction” yapısını kullanırız.Transaction, prensip olarak ya bütün işlemleri gerçekleştirir ya da hiçbirini gerçekleştirmez..Şimdi bi senaryo üzerinden bunu görelim..

Örnek

Örneğimizde 1 Tablomuz var ve tablo yapımız hesap — tutar şeklinde

Hesap numaraları ve bunların içerisindeki tutarı tutan sütnumuzu var yapıcağımız işlemde Bir hesaptan diğerine para göndericez..

PHP tarafında mysql bağlantılarınızı vs. yaptığınızı varsayıyorum..

Normal Şartlarda sorgularımız aşağıdaki gibidir..


$tutar = 500;
$a = $db->query("UPDATE  test SET tutar = (tutar-$tutar) WHERE hesap = 123 ")or die($db->error);
$b = $db->query("UPDATE  test SET tutar = (tutar+$tutar) WHERE hesap = 321 ")or die($db->error);

Yukarıdaki sorgularımızda herhangi bir hata yok.. İlk sorguda hesaptan tutarı düşerken 2. sorgudada havale yapılan hesaba ekleyen sorgu çalışıcak.. Ancak Sorgulardan 1. çalışıp 2. sinin çalışmadığı durumlarda birinci kişinin hesabından para silindikten sonra ikinci kişinin hesabına para yatmamışsa, pek de hoş durumlarla karşılaşmazsınız.

İşte burda imdadımıza Transaction yapıları yetişmekte. Şimdi aşağıda Transaction kullanarak aynı işlemi gerçekleştirelim..

// Transaction a başlıyoruz
$db->query("SET AUTOCOMMIT=0");
$db->query("START TRANSACTION");

// sorgularımızı hazırlıyoruz
$a = $db->query("UPDATE  test SET tutar = (tutar-$tutar) WHERE hesap = 123 ")or die($db->error);
$b = $db->query("UPDATE  test SET tutar = (tutar+$tutar) WHERE hesp = 321 ")or die($db->error);

if ($a AND $b) {
	    $db->query("COMMIT");
	    echo "BAŞARILI";

	} else {        
	    $db->query("ROLLBACK");
	    echo "Bir Sorun Oluştu";
	}


PHP içerisinde kullanımı da bu şekilde gerçekleşiyor. Kullandğımız yapıların açıklamalarıda aşağıda yer almakta..

  • START TRANSACTION: İşlemi başlatan cümledir.
  • ROLLBACK: Sorgulardan biri gerçekleşmezse işlemi sağlıklı biçimde geri alır, her tablo işlemden önceki haline geri döner.
  • COMMIT: İşlemi gerçekleştirir.

İyi çalışmalar

Laravel’da Sunucuya Dosya Yükleme

Uzun bi aradan sonra herkese merhabalar arkadaşlar.Bugün Laravel’de sunucuya dosya yüklemeyi görücez.Uzatmadan başlayalım.

İlk başta bir blog kodladığımızı ve blog konusu için resme ihtiyacımız olduğunu düşünelim.bunun için bir Rota bilgisi oluşturuyorum.

App\Http\routes.php dosyasını açalım

Route::get('/konu_ekle','HomeController@konu');
Route::post('/konu_ekle','HomeController@konu_kaydet');

Rotamızı oluşturduktan sonra App\Http\Controller Dizinine gidiyorum ve HomeController’i açıyorum.Ekleme formunun görüntüleneceği HomeController’in konu fonksiyonunu düzenliyoruz.

 function konu(){
 return view('blog.konu_ekle');
}

Resourcez\Views\blog\ klasörüne gidiyoruz ve konu_ekle.blade.php dosyamızı oluşturuyoruz.Formumuz basit bi şekilde tasarlıcam aşağıdaki gibi olsun.

@extends('layouts.app')
@section('content')
 form enctype="multipart/form-data" method="POST" action=""> 
  input type="file"  name="resim" class="form-control">
 

Dikkat etmemiz gereken nokta form enctype=”multipart/form-data” ekliyoruz.Yoksa Dosyayı yükleyemezsiniz.

Daha sonra HomeController@konu_ekle fonksiyonuna gidiyoruz.Normalde POST işlemlerimizi Request ile yapıyorduk.Burdada o şekilde yapıcaz sadece birkaç değişikliğimiz olucak

  if (isset($_FILES["resim"]["name"])) {
                        $dosya  = $request->resim;
                        $kaynak = $_FILES["resim"]["tmp_name"];
                        $dosya  = str_replace(" ", "_", $_FILES["resim"]["name"]);
                        $uzanti = explode(".", $_FILES["resim"]["name"]);
                        $hedef  = "./" . $dosya;
                        if (@$uzanti[1]) {
                            if (!file_exists($hedef)) {
                                $hedef   =  "image/".$dosya;
                                $dosya   = $dosya;
                            }
                            move_uploaded_file($kaynak, $hedef);
                        } else {
                            echo " geçersiz dosya tipi ";
                        }
                    }

PHP de olduğu gibi dosyaları $_FILES ile çekiyoruz.Dikkat etmeniz gereken nokta $_FILES[“buraya formdaki name gelicek”] ben kendi kodlarımda public\image\ klasörüne resmi kaydetmesini istedim kodları çalıştırdığımda resim başarılı bir şekilde yüklenmiş olucak.

PHP 7 ile Gelen Yeni Özellikler

PHP5 versiyonu bildiğiniz üzere ZEND Engine II ( C  ile yazılmış PHP’yi tercüme eden bir motor) altyapısı üzerinde çalışıyordu. PHP7’de PHP#NG (Next Generation) motoru kullanılıyor. PHPNG hem sıfırdan temiz bir şekilde yazılmış, hem de aynı anda işleme ve belleği temiz tutma özelliğine sahip bir hafıza yönetimine sahip. Bu da demek oluyor ki PHP7 çok daha hızlı olacak . Hızlı olmasının yanında daha az server gücü ile daha fazla isteğe cevap veriyor. Zend’in yayınladığı tabloda frameworkler’de de belirgin bir performans yükselişi mevcut.

PHP5 Windows sistemlerde  64bit desteği sunmadığı için biraz performans kaybı oluyordu. Hatta deneysel sayılıyordu. PHP7 tutarlı bir 64bit desteği sağlıyor. Bu sayede Windows Server kullanımı da tercih edilebilecek gibi görünüyor.

İsim: PHP 7 (PHP 6 Değil)

Şu anki PHP sürümü 5.6. Bazı tartışmalardan sonra geliştirme ekibi PHP 6 ismini es geçmeye karar verdi. PHP 6, deneysel bir projeydi, fakat bir türlü üretim aşamasına geçemedi.

Kullanıcıların kafasını karıştırmamak için yeni temel sürüm PHP 7 olarak isimlendirildi.

 Yeni -Muhteşem- Zend Engine

Zend motoru, 1999 yılında yeni PHP 4 sürümünden beri PHP’ye güç veriyor. (Zend’i Zend Framework ile karıştırmayın.) Zend, C’de yazılmış, PHP dilini yorumlayan açık kaynaklı bir uygulama motoru. Mevcut PHP 5.X serileri, ilk motorun daha gelişmiş özelliklerini içinde barındıran, dile genişletilebilir bir nesne modeli ve fark edilebilir ölçüde performans geliştirmeleri sağlayan Zend Engine II’yi kullanıyor.

PHP 7 ile birlikte, uygulama motoru PHP#NG (Next Generation) ismini alıyor.

Hata Yakalama

Bir diğer özellik ise hata yakalama kolaylığı. Yeni Engine Exceptions sayesinde ölümcül ve yakalanabilir ölümcül hataları istisnalar (exceptions) ile değiştirebiliyoruz. İstisna yakalanmazsa ölümcül hata dönmeye devam ediyor. Yeni \EngineException nesneleri \Exception temel sınıfından türetilmediği için geçmiş sistemlere uyumluluk da sağlanmış oluyor. \BaseException adı altında yeni bir paylaşımlı üst sınıf sunuluyor. Hata ayıklama ile ilgili ayrı bir yazı yazmak gerekir ama kısaca bir örnek (php.net’ten);

function add(int $left, int $right) {
 return $left + $right;
}
 
try {
 echo add('left', 'right');
} catch (Exception $e) {
 // Handle or log exception.
}

Spaceship (Uzay Gemisi) Operatörü

İki değeri karşılaştırarak; her iki değer eşitse “0″,  soldaki değer büyükse “1″, sağdaki değer büyükse “-1″ döndürür. Örneğin;

// Tam Sayı echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 // Float echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 // String echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1

Null Coalesce Operatörü​

Eğer bir değişkenin içeriği varsa belirtilen değeri almak, yoksa varsayılan bir değer atamak için en kısa şekilde Ternary operatörünü kullanıyorduk.

1
isset($_GET['adsoyad']) ? $_GET['adsoyad'] : ""

PHP 7 ile birlikte gelen Null Coalesce operatörüyle bu dizilimi aşağıdaki şekilde daha kısa ve anlaşılır şekilde yazabiliyoruz. Eğer GET ile gelen değişken NULL değilse içeriği $adsoyad değişkenine ata yoksa $adsoyad değişkenine ‘Hiç Kimse’ değerini ata.

$adsoyad= $_GET['adsoyad'] ?? 'Hiç Kimse';

Anonim Sınıflar

var_dump(new class($i) {
 public function __construct($i) {
 $this->i = $i;
 }
});

Dönüş Tipleri

Fonksiyonlarda parametre ve dönüş tipleri belirtilebilinir. Kullanımız zorunlu olmamakla beraber PHP’nin kod okunabilirliği yönündeki büyük bir eksikliği gidermesi açısından önemli. Örnek olarak;

2
3
function topla(int $sayi1, int $sayi2) : int {
 return $sayi1 + $sayi2;
 }

64-bit Windows Desteği

PHP, doğal olarak Linux ortamını kullanıyor, fakat Windows sistemlerde de çalışabiliyor. 5.X serileri henüz 64 bit integer ya da büyük dosya desteği sunmadığı için x64 mimarileri deneysel kabul edilirdi.

PHP 7, 64 bit integer’lar ve büyük dosyalara destek vererek 64 bit Windows sistemlerde de kararlı olarak çalışacak.

Hız İkiye Katlanıyor

PHPNG’nin öne çıkan özelliği, performansı önemli ölçüde artırması. PHPNG’nin geliştirme ekibi, Zend Engine’i yeniden yapılandırdı, bellek kullanımını optimize etti ve uygulama önceliği yerine çalışma zamanında derlemeye izin veren tam zamanında derlemeyi (just-in-time compilation) ekledi.

PHP ile Tek Satırda Update

Herkese merhabalar.Frameworkler ile çalışırken veritabanına veri eklemenin ve güncellemenin çok kolay olduğunu farkettim.Formların name alanlarını veritabanının sütun isimleriyle aynı yaptığınız zaman tek satrıda insert ve update işlemi yapabiliyoruz.Uzun uzun UPDATE sorguları yazmak hem hataya çok açık hemde uğraşması zor oluyor.Bende framework olmadan bunu yapmamızı sağlayan bi fonksiyon yazdım sizlerlede paylaşmak istedim.

function update($dbh,$table,$updateArray,$where)  {

    $totalKeys = "";
    foreach ($updateArray as $key => $value) {
        $totalKeys .= $key . "=" . ':'.$key .",";
    }
    $totalKeys = substr($totalKeys,0, -1);

    $updateSQL = sprintf("UPDATE  %s  SET %s WHERE %s",$table,$totalKeys,$where);

    try {
        return $dbh->prepare($updateSQL)->execute($updateArray);
    } catch(PDOException $exception) {
        return $exception;
        exit;
    }

}

Örnek Kullanımı

Veritabanınızdaki sütun isimleri ile formlardaki name değerlerini aynı yaptığınz zaman size post arrayı geri dönmekte.Bizde bu post arrayını fonksiyona gönderip update etmesini sağlıyruz.

$stmt = update($dbh,"users",$_POST,"id = :id");

Ben test için postları kontrol etmedim ancak siz mutlaka kontrol edin… İyi çalışmalar

PHP Tek Satırda Veritabanına Kayıt Ekleme

Herkese merhabalar.Frameworkler ile çalışırken veritabaına veri eklemek çok kolay olduğunu farkettim.Formların name ilerini veritabanının sütun isimleriyle aynı yaptığınız zaman tek satrıda insert işlemi yapabiliyoruz.Uzun uzun INSERT INTOlarla VALUES larla vs. uğraşmadan bende framework olmadanda bunu yapmamızı sağlayan bi fonksiyon yazdım sizlerlede paylaşmak istedim.

	public function insert($table, $dataArray) 
		{
			$toplamAlan = "";
			$toplamVeri = "";
			foreach ($dataArray as $anahtar => $deger) { //anahtar değerler
				$toplamAlan .= $anahtar . ",";
			}
			foreach ($dataArray as $anahtar => $deger) { // anahtara ait veriler	
				$toplamVeri .= '"'.$deger .'",';
			}
			$toplamAlan = substr($toplamAlan,0,strlen($toplamAlan)-1);
			$toplamVeri = substr($toplamVeri,0,strlen($toplamVeri)-1);

		    $insertSQL = sprintf("INSERT INTO %s (%s) VALUES (%s)",$table,$toplamAlan,$toplamVeri);;
		   	return $this->db->query($insertSQL);
		   
		}

Kullanımı için dediğim gibi veritabanındaki sütunlarla <input ların name= değerleri aynı olması gerekmekte.Örnek kullanım.

 $insert = $db->insert("uyeler",$_POST);

Deneme olduğu için postları ben filtreden geçirmedim.Ancak siz geçirdikten sonra bu şekilde verilerinizi veritabanınıza ekleyebilirsiniz.

Hosting’e Laravel Kurulumu

Merhabalar Arkadaşlar

Öncelikle kendimin karşılaştığı bi problemi sizlerle paylaşıyorum.Laravel ile projeyi geliştridiniz ancak bunu sunucuya attığınız zaman bir takım problemlerle karşılaşıyorsunuz.Bu içerikte bu sorun için .htaccess dosyası paylaşıcam.

Bildiğiniz gibi Laravel default olarak /pulic dizininde çalışmakta.Bu her nekadar güvenlik için güzel bir çözüm olsada kendi sunucusu olmayan paylaşımlı hostinglerde laravel kullanımını zorlaştırmaktadır.Bu konu .htaccess ile aşılabilmektedir.

İlk önce elinizdeki projeyi değişiklik yapmadan sunucunuza atın.Aktarma bittiği zaman siteniz aşağıdaki şekilde olucak

www.site.com

da laravel dosyaları gözükücek.vendors,app, .env gibi yerlere klasör ile erişim var

www.site.com/public

te ise projeniz çalışmakta.Aşağıdaki kodlar ile bir htaccess dosyası oluşturup ana dizine attığınız takdirde bu sorun düzelicektir.

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^public
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Oluşturduğunuz htaccess dosyasını ana dizine atın.

Şuanda site.com adresine girdiğiniz zaman direk olarak projenizi görüceksiniz.