Şaka bir yana 21 yaşına girdim diyeli daha 5 sene olmuş şu yazımda son paragrafta yazmışım ???? Şimdi göz açayıp kapayıncaya kadar 26. yaşıma geldim, daha yeni yeni farkına varıyorum akıp giden zamanın, birikmiş anıların, öğretici tecrübelerin ve bitmek bilmeyen sevgilerin.
Bu sene doğum günümde 5 sene önce olduğu gibi yine İstanbul’dayım, hayat beni bir yerlerde döndürüp duruyor ama dur bakalım çıkar yakında kokusu ????
Videolarda sublime ile kolayca klasörü açtıklarında sinir oluyordum, ufak bir araştırma ile bunu phpStorm içinde yapmak mümkünmüş. Efenim öncelikle terminalde ilgili klasöre girdikten sonra şu kodu çalıştırırsanız;
open -a PhpStorm ./
./ yazdığım için mevcut dizini phpStorm ile açacaktır. Bu çok uğraştırıcı derseniz bi alias tanımlayıp kısa olarak kullanabilirsiniz. Terminalde bir alias oluşturun, adını feriha koyun.
alias feriha ='open -a PhpStorm'
Artık bir klasörü phpStorm’da açmak için ferihayı kullanabilirsiniz.
feriha ./
Her oturumda bu alias’ı kullanmak için;
nano ~/.zshrc
En alta yine aynı kodu ekleyip kayıt edin bu kadar 🙂
Bilmiyorum daha önce PHP-FIG.org’u duydunuz mu? Bu arkadaşlar, PHP yapısı kuran kişilere standart olmayı öncülüyorlar. Yani diyorlar ki, bir yapı kuracaksan en azından belirlediğimiz standartlara göre yap ki, bi boka benzesin ???? Bende sizlere en basiti olan PSR-4 autoloading olayını anlatacağım.
Sınıflara yeni başladıysanız namespace’ler size çok anlamlı gelmemiş olabilir. Neden kullanayım ki? Şimdi çok fazla sınıfın kullanıldığı projelerde, sınıf isimlerinin çakışmaması için sınıflara namespace tanımlanır yani nickname gibi düşünün. Benim adım Tayfun, ve aynı sınıfta 2 tayfun daha var. Birbirimizi karıştırmamak için Ben Prototürk Tayfun, Bir diğeri Yufka Yürek Tayfun, bir diğeri Yakışıklı Tayfun ????
Bu şekilde her Tayfun’un nickname’i olunca kimse birbirini karıştırmıyor. İşte namespace’lerde bu amaçla kullanılıyor. Şimdi bu ne alaka diyebilirsiniz, bende bilmiyorum ufaktan bi bilgi vereyim dedim ???? Bizim asıl konumuz, sınıflarımızı nasıl otomatik yükleteceğiz.
Normalde yaptığımız
Eskiden __autoload() fonksiyonunu kullanıyorduk, ancak bu PHP 7.2 ile önerilmemeye başlandı. Yerini spl_autoload_register() fonksiyonu aldı. Bunu nasıl kullanıyoruz;
Fakat bu yeterli gelmiyor. Ve çokta doğru bir mantık sayılmaz. Başka klasörlerde başka sınıflarımda olabilir. Dolayısı ile bunu sadece biz sorun etmemişiz belli ki, bu FIG bizim için PSR-4 adını verdikleri autoloading standardını belirtmişler. Onlara göre bu işlemi yaparken şunlar olmalı;
Yani sınıflar bir top-level namespace’e sahip olmalılar. Ayrıca vendor namespace olarakta biliniyormuş bu. Ve ek olarak 1 ya da daha fazla alt namespace’e sahip olması gerekiyormuş. E tabi birde sınıf ismi ????
Bu arkadaşların mantığına göre işlemimi şöyle yaparsak;
spl_autoload_register(function($class){
// top-level namespace
$prefix = 'Erbilen\\';
// namespace için ana dizin
$base_dir = __DIR__ . '/src/libraries/';
// çağırılan sınıf prefix'i içermiyorsa bir sonraki yükleme işlemine geç
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0){
return;
}
// prefix hariç sınıfın kalanı
$relative_class = substr($class, $len);
// hepsini birleştirip dizin yolunu oluştur
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
// sınıf dosyası var ise yükle
if (file_exists($file))
require $file;
});
// Aslında bu sınıf şurada yer alıyor
// src/libraries/validators/testvalidator.php
$test = new Erbilen\Validators\TestValidator();
// src/libraries/database/testdatabase.php
$db = new Erbilen\Database\TestDatabase();
Composer ile Kullanımı?
Eğer bu işlemi composer ile yapmak isterseniz, composer.json dosyasını açın yoksa bir tane oluşturun anadizinde ve içine şu kodları yazın;
Burada yine gördüğünüz gibi ilk değerimiz top-level namespace’imiz ve karşılığı olarak namespace’in bulunduğu ana dizini belirttik. Terminale gidip composer update komutunu çalıştırdığınızda ana dizinde vendoradında bir klasör ve onun içinde autoload.php olduğunu göreceksiniz. Ayrıca birde composer diye klaör var, işlemleri burada yapıyor ancak biz index dosyamızda bu autoload.php’yi çağırıyoruz. Ve sınıflarımızı kullanmayı deniyoruz.
<?php require __DIR__ . '/vendor/autoload.php';
$test = new Erbilen\Validators\TestValidator(); $db = new Erbilen\Database\TestDatabase();
Ben kalp atmayı çok seviyorum, birine değer verdiğini gösteriyor. Ama ne yalan söyleyeyim tek tek atmasıda çok zahmetli. Tabi birde bu özelliğin yeni geldiğini kabul edersek bundan 5-6 sene önceki insanların yorumlarını kalplemeyi isterdim. Ama bunu elle yapmak mantıklı değil, öyle console’dan bir deneyim çalışır mı dedim çalıştı, normalde bu denli büyük siteler buna engel olurlardı ama youtube canım sağolsun kafasına takmamış. Henüz studio’ya geçmediği için olsa gerek, bu yüzden videolarınıza gelen yorumlara kalp atmak isterseniz dashboard’da yorumlar sayfasına gidin. Chrome’da developer tools’u açın ve şu kodları yapıştırıp çalıştırın ve bekleyin. Taki bitene kadar ????
function autoHeart(){ var buttons = document.querySelectorAll('.yt-uix-creator-heart-button'); [].forEach.call(buttons, function(button) { button.click(); }); } autoHeart(); setInterval(function(){ document.getElementById('yt-comments-paginator').click(); autoHeart(); }, 1500);
Bilmiyorum ne işinize yarar ama benim takipçilerimle etkileşime girmemi sağladı tekrardan. Çünkü takip edenlere bildirim gittiği için, mutlu olduk hep birlikte ????
Merhaba arkadaşlar, sizlere gulp’ın kullanımını anlatmıştım. Ancak zamanla kullandıktan sonra yaşadığım bir sorununda çözümünü paylaşmak istiyorum. Büyük front-end projelerinde, javascript tarafındaki kodlar çoğaldıkça fark ettim ki, kullandığım uglify paketi çok yavaş şekide build etmeye başladı dosyaları. Yani öyleki bir js değişikliğinden sonra 8-10 sn arası bekliyordum build etsin diye. Bunun böyle olmayacağını düşünüp araştırmaya başladım ve gulp-fs-cache paketini buldum.
Bildiğiniz gibi mobil için ayrı ayrı css kodları yazmak durumundayız, çünkü mobil tarayıcılar henüz her özelliği desteklemediği gibi, sadece mobil tarayıcılar için özelliklerde mevcut. Hal böyle olunca, yazarken dikkat edilmesi gereken bazı durumlar oluyor. Bu makalede en temel problem olan kaydırma problemini ele alacağız.
Nedir bu problem dersenizde, aşağıdaki gif’e gözatalım;
Hal böyle olunca kayma hassaslığı yok, ios cihazlarda boncuk boncuk kayar normalde. İşte kaymaya bu ivmeyi kazandırmak için css’de ufak bir kod eklemek gerekiyor. Yani kısaca;
Uzman cevap’ın ssl’ini iptal edip normala döndürmek istedim ancak araştırmalarım ve bilgilerim doğrultusunda PHP ile bunu sağlıklı şekilde yapmak mümkün olmadı. Eğer ihtiyacınız olduğunda araştırdığınızda görmüşsünüzdür, eğer $_SERVER[‘HTTPS’] değeri on ise yönlendirme işlemi yaptırıyorlar. Ancak ne yazık ki ben bu değerin on olduğunu hiç görmedim ???? Bunun sebebide sanıyorum ssl’i cloudflare’dan kullandığımız için. Ama sonunda .htaccess ile yönlendirme yapmanın bir yolunu buldum. İşte size o güzel kodlar;
Merhaba arkadaşlar, 2 bölümlük bir video serisi hazırladım. Sırasıyla önce mysql’in sonrada klasör’ün yedeğini PHP kullanarak nasıl alıyoruz bunu gösterdim. Bu yazıda da ufaktan mantığını açıklamaya çalışacağım.
MySQL Yedeğini Almak
Şimdi ilk olarak Mysql’in yedeğini almak için türlü türlü yol var, ancak çoğu konfigürasyon gerektiriyor. Yani özel ayar yapmak gerekiyor, fakat paylaşımlı hostinglerde bunlara müdahale edilmediği için bu backup işlemini mümkün olduğunca php tarafında çözmeye karar verdim.
Bundan dolayı, php tarafında sırasıyla şu değerleri almam gerekiyordu;
Tabloların Listesi
Tablonun Oluşturulma Değerleri
Tablonun Kolon Değerleri
Tablonun Satırları (Verileri)
Trigger’lar
Function’lar
Precodure’ler
Tabl0ların Listesini Almak
Veritabanımızda mevcut tabloları listelemek için şu komutu kullanıyoruz;
SHOW TABLES;
Bu komut bize tüm tablolarımızın isimlerini veriyor.
Tablonun Oluşturulma Değerleri
Mevcut tablonun oluşturulma değerlerini almak için şu komutu kullanıyoruz;
SHOW CREATE TABLE tablo_adi
Bu komutu çalıştırdıktan sonra bize CREATE TABLE tablo_adi …. şeklinde oluşturma kodlarını verecek. Böylece bizim yazmamıza ve düşünmemize gerek yok.
Tablonun Kolon Değerlerini Almak
Tablodaki oluşturduğumuz kolonların değerlerini almak için şu komutu kullanıyoruz.
SHOW COLUMNS FROM tablo_adi
Bu komutu çalıştırınca bize tabloya ait kolonların değerleri dönüyor.
Tablonun Satırlarını (Verilerini) Almak
Bu klasik select işlemi ama yinede gösterelim;
SELECT * FROM tablo_adi
Trigger’ları Almak
Zaman zaman crud işlemleri harici bu tarz yapılara ihtiyaç duyuyoruz. Ve eğer çalıştığımız veritabanı üzerinde oluşturduğumuz trigger, function, procedure gibi yapılar var ise bunlarıda alacağımız yedek dosyasına dahil etmemiz gerek. Ama korkmayın, mysql bizi düşünmüş ve kolay yollarını vermiş. Şimdi mevcut triggerları listelemek için şu komutu kullanıyoruz;
SHOW TRIGGERS
Ve bir trigger’ın oluşturma değerini almak için ise şu komutu kullanıyoruz;
SHOW CREATE TRIGGER trigger_adi
Zaten bu iki sorgu ile gerekli değerleri alıyoruz. Ancak videoda vurguladığım bir olay vardı. DELIMITER muhabbeti, onu videoya gözatarak anlayabilirsiniz.
Function’ları Almak
Aynı şekilde mysql function’ları almak içinde kolaylık sağlıyor. Function’ları listelemek için şu komutu kullanıyoruz;
SHOW FUNCTION STATUS WHERE Db = 'db_adi'
Burada diğerinden farklı olarak db adını belirttik. Çünkü diğer türlü diğer veritabanlarında olan functionlarda listelenebiliyor. Ve function oluşturma değerini almak için ise şu komutu kullanıyoruz;
SHOW CREATE FUNCTION function_adi
Procedure’leri Almak
Bu konuyu henüz sizlere anlatmasamda, eminim mysql tarafında procedure oluşturup kullananlarınız vardır. Bunlarında listesini almak için şu komutu kullanıyoruz;
SHOW PROCEDURE STATUS WHERE Db = 'db_adi'
Mevcut procedure’ün oluşturma değerini almak için ise şu komutu kullanıyoruz;
SHOW CREATE PROCEDURE procedure_adi
Evet bu komutları kullanarak bir mysql backup’ı almak çok kolay. Videoyu izleyip detaylarına ulaşabilirsiniz.
Klasör Yedeğini Almak
PHP tarafında belirttiğimiz dizinin alt dizinleri ve dosyalarıyla birlikte yedeğini alıp ZipArchive sınıfını kullanarak sıkıştırıp bir zip dosyasına getirme işleminde ilk olarak bir dizin listeleme fonksiyonu oluşturmalıyız. Buda recursive fonksiyon olmalı ki alt dizinleri ve onların dosyalarınıda alabilelim. Örnek bir recursive dizin listeleme fonksiyonu şöyle olabilir;
Tabi biz bunu derste bir sınıf halinde yazdığımız için metod olarak tanımladık. Ve ek olarak listelemek istemediğimiz dosya ya da dizin varsa bunu exclude değerinde belirttik. Dosyaları listeleyip zip’e ekleme kısmı ise şöyleydi;
$files = $this->getDirectory($this->config['folder']['dir']);
$zip = new ZipArchive();
$zip->open($this->config['folder']['file'], ZipArchive::CREATE);
foreach ($files as $file) {
$zip->addFile($file);
}
$zip->close();
Şimdi hepsini toparlayıp anlamak için videolara bakmanızı şiddetle tavsiye ediyorum. Ayrıca videoda hazırladığım sınıfı github’da paylaştım ki alıp geliştirebilin ????
Github Sayfası
Adını Backuphp olarak belirledim. P’leri birleştirdim ???? Daha yaratıcı isimlere açığım. Olası hataları github üzerinden belirtirseniz geliştirmeye açığım. Sizde fork edip kendiniz geliştirebilirsiniz.
Github’ı kullanmıyorsanız hemen bir hesap açıp kullanmaya başlayın. Geliştirici olarak burayı ve buradaki gelişmeleri takip etmeniz sizin gelişiminiz açısından çok önemli arkadaşlar.
Bu yazımda sizlere unofficial yani gayri resmi bir instagram API’si olan mgp25 Instagram API’sinden bahsedeceğim. Sanırım şu an piyasadaki unofficial api’lerin en iyisi diyebiliriz.
PHP’de bağımlılıkları yüklemek için kullandığımız Bağımlılık ya da Paket Yöneticisi olarak adlandırdığımız Composer nasıl kurulur, nasıl kullanılır bunları öğreneceğiz.
macOS için Kurulumu
Terminalinizi açıp aşağıdaki kodları sırasıyla çalıştırın;
Burada eğer versiyon değeri dönüyorsa, bu iş tamamdır. Yalnız biz bunu global olarak kurup composer şeklinde kullanmak istiyoruz. Bunun için şu komutu çalıştıralım;
mv composer.phar /usr/local/bin/composer
Evet, artık şu şekilde kullanmaya hazırız;
composer --version
macOS için kurulum bu kadardı.
Windows için Kurulum
Windows’ta kurulumu exe dosyası indirerek yapıyoruz. Şu adrese girdikten sonra Composer-Setup.exe dosyasını indirin. Klasik next->next->next kurulumu. Sadece 2. aşamada php.exe yolunuzu belirtmeniz gerek. Hangi local programı kullanıyorsanız ona göre php’yi bulup php.exe’yi seçmeyi unutmayın.
Kurulum bitince cmd’yi çalıştırdığınızda ve şu komutu yazdığınızda versiyon değerini göreceksiniz;
composer --version
sonuç;
Composer Kullanımı
Bağımlılıkları yüklemek için şu komutu kullanıyoruz;
composer require paket_adi
Örnğein;
composer require phpmailer/phpmailer
Bu bize phpmailer paketini kuracaktır. Paket kurduğunuzda vendor adında bir klasör ve composer.json adında bir dosya göreceksiniz. vendor klasöründe kurduğunuz paketler yer alıyor. İçerisindeki autoload.phpdosyasını projenize dahil etmeniz paketleri kullanmanız için yeterli olacaktır.
composer.json dosyası ile hangi bağımlılıkları kuracağımızı belirtebiliriz. Örneğin;