spl_autoload_register fonksiyonu ile Composer Beraber Kullanma

Merhabalar,

Genel olarak kendi sınıflarını yazan kişilerin çoğu tek tek require etmemek için spl_autoload_register işlevini kullanır ama eğer composer ile bir şeyler dahil edecekseniz new ile sınıfı dahil ettiğiniz anda spl_autoload_register çalıştırdığı fonksiyon da bu isime ait dosyanın require edilmediğini görüp hata verecektir.

Aslında önüne geçmesi çok basit  composer’dan önce büyük ihtimalle şu şekil’de kullanıyordunuz;

<?php
function SinifYukle($SinifAdi)
{
  require . 'siniflarim/' . strtolower($SinifAdi) . '.php';
}
spl_autoload_register('SinifYukle');

Söylediğim gibi composer ile dahil ettiklerinizi kullanacak iseniz bu kod yapınız da küçük bir değişiklik yapmanız yeterli olacaktır.

<?php
function SinifYukle($SinifAdi)
{
    if (file_exists('siniflarim/' . strtolower($SinifAdi) . '.php')) {

        require . 'siniflarim/' . strtolower($SinifAdi) . '.php';
    }
}

spl_autoload_register('SinifYukle');

Farklı olarak ne yaptık siniflarim adlı dizinde bu fonksiyonun adına ait bir dosya var mı? baktık var ise dahil ettik yok ise null boş bıraktık

Böylece bu basit hatanın önüne geçebilirsiniz.

MacOS – Composer Kurulumu [Hata Çözümleriyle]

Merhabalar,

Composer windows cihazlara rahat şekilde kuruluyor uğraşmıyorsun ama mac cihazlarda maalesef o kadar basit olmuyor.

Öncelikle ben 03-11-2020 Tarihine göre anlatıyorum kurulum şekli değişmiyor tabi ki sadece içeren kodlar da küçük değişiklikler olabilir o yüzden sitesine uğramayı unutmayın. Güncellemeler ve değişiklikleri takip etmeniz için.

Composer Website

Kuruluma başlayalım Spotlight aramasını açın ve terminal.app yazın.

Terminali açtıktan sonra ilk yazmanız gereken kod

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

terminal üzerine yapıştırın ve return edin.

2. Aşama:

php -r "if (hash_file('sha384', 'composer-setup.php') === 'c31c1e292ad7be5f49291169c0ac8f683499edddcfd4e42232982d0fd193004208a58ff6f353fde0012d35fdd72bc394') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

terminal üzerine yapıştırın ve return edin.

3. Aşama:

php composer-setup.php

terminal üzerine yapıştırın ve return edin.

4. Aşama:

php -r "unlink('composer-setup.php');"

terminal üzerine yapıştırın ve return edin.

5. Aşama:

Şu anda hiç bir hata almadı iseniz kurulumu gerçekleştirdiniz zaten mac üzerine kuran herkes bu aşamaya kadar geliyor.

php composer.phar --version

Terminal üzerine bu kodu yazıp return edin çıktı olarak Composer Version x.x.x şeklinde verdi ise kurulum başarılıdır.

6. Aşama:

Asıl mevzu bundan sonrası şimdiye kadar yerel bir kurulum yaptık bizim bu composerı global olarak kurmamız gerekiyor ki her seferinde composer diyerek erişebilelim.

Bunun için yapmamız gereken tek şey şu kodu yazmak

mv composer.phar /usr/local/bin/composer

7. Aşama:

command not found: mv.composer.phar diye hata aldı iseniz okumaya devam edin eğer bu hatayı almadı iseniz sizin işleminiz bitmiştir. global olarak kurdunuz artık composer diyerek erişebilirsiniz. Fakat söylediğim hatayı aldı iseniz okumaya devam edin.

Bu hatanın sebebi usr/local dizinin’de bin adlı bir klasörün var olmaması bu yüzden bu klasörü siz manuel olarak oluşturacaksınız.

Terminal ekranına dönün ve şu kodu yazın.

mkdir /usr/local/bin

8. Aşama:

Eğer bunu yazdıktan sonra mkdir: /usr/local/bin: Permission denied hatası aldı iseniz.

Sizin işiniz hala bitmedi okumaya devam edin.

bu hatayı almayan kişiler ise 6. Aşamaya dönsün ve o kodu tekrar yazsın. composeri global olarak kurmuş olacaktır.

Terminalı açın ve aynı kodu bu kez sudo izni ile yazacağız.

sudo mkdir /usr/local/bin

9. Aşama:

Sizden şifre isteyecektir bu şifre oturum şifrenizdir şifrenizi girip return edin şifrenizi yazarken terminal ekranında şifreniz görünmeyecektir. Yani siz yazıp return edin sadece.

Şimdi bin klasörünü oluşturduk sıradaki yapacağımız işlem composer dosyasını taşımak bunun için tekrar terminal ekranına dönün ve şunu yazın.

mv composer.phar /usr/local/bin/composer

10. Aşama:

Eğer hiç bir hata almadı iseniz composer global olarak kurdunuz fakat mv: rename composer.phar to /usr/local/bin/composer: Permission denied diye bir hata aladı iseniz terminal ekranına dönün gene sudo izni ile şu şekilde yazın.

sudo mv composer.phar /usr/local/bin/composer

Son:

Bu kadar composer global yaptınız. Eğer bu aşama da gene password ister ise gene oturum şifrenizi girersiniz istemez ise direkt kurdunuz demektir. Şimdi test edelim bakalım global olarak taşıdık mı?

composer --version

çıktı olarak Composer Version x.x.x şeklinde verdi ise kurulum başarılıdır.

Foruma kayıtlı değilseniz kayıt olup yorum yapmayı kayıtlı isenizde beğenip yorum yapmayı unutmayın.

file_get_contents ağırlığını çözmek için alternatif fonksiyon

Üzerinde çalıştığım proje de yaşadığım bir sorun vardı local üzerinde çalışırken bunu fark etmemiştim fakat sunucuya aktardığımda sayfa yüklenme süresi 2-3 saniyelere çıkmıştı sebebini anlayamadım.

Buna sebep olan olayı bulmak için yaklaşık 2 saat uğraştım saçma şekilde sebep olan şey file_get_contents fonksiyonudu.

Önemli olmayan genel ayarlarımı json olarak tutuyorum ve bu dosyaları file_get_contents fonksiyonu ile çağırıyordum. 5-10 Tane dosya da bu hız farkını çok hissetmiyorsunuz fakat benim gibi bir çok sayfayı yüklüyorsanız bunu hissediyorsunuz.

Bende alternatif çözümler aradım ve şu an kullandığım yöntem ile 3 saniye geçikme süresini 0,0080 saniyeye düşürdüm yani katlarcasına hız farkı çıktı ortaya.


Fonksiyon:

function print_xml_data_file($path = "")
{
    require($path);
}

function get_xml_data($path = "")
{
    ob_start();
    print_xml_data_file($path);
    $xml_file = ob_get_contents();
    ob_end_clean();
    return $xml_file;
}

Fonksiyon kullanımıda şu şekilde:

$file = json_decode(get_xml_data('/json/jsondosyasi.json'),true);

Ben dediğim gibi bunu json dosyalarım için kullanıyorum normal şartlarda kullanma şekli json_decode(file_get_contents("siteadresi.com/json/jsondosyasi.json"),true) bu şekildeydi fakat aşırı derecede hosting’e attıktan sonra bunu fark ediyorsunuz bu arada.

Ağırlaştığı için alternatif bu yöntemi türettim deneyin hız farkına şaşıracaksınız.

Yabancı Kaynaktan Sebeplenen Güvenli Değil Sorunu Çözümü

Merhaba arkadaşlar SSL serfitikası olduğu halde güvenli değil sorunu olanlar bilir eğer kullanıcılara url girdiriyor ise platform kullanıcılar SSL serfitikası olmayan sitelerin linklerini girdiği zaman o link’de https güvenli görünmeyecektir.

Bunu genellikle forumlar tanıtım siteleri kullanıyor neden bahsediyorum şu şekil’de örnek ile açıklıyorum. Resmin kaynağı imagevisit olsun.

Resim Kaynağı : https://www.imagevisit.com/images/2017/08/28/bucurcin.jpg

benim paylaşacağım proxy’de bu şekil’de olacaktır.

Benim Proxy : https://www.arcface.net/image.php?url=https://www.imagevisit.com/images/2017/08/28/bucurcin.jpg

Kendi kişisel web sitemde kullanıyorum bu özelliği kendim için hazırladığım bu dökümanı yararlı olabileceğini düşündüğüm için paylaşıyorum.

Sistem belli zaten get ile gelen url adresini htmlspecialchars ile temizliyor trime sokarak boşlukları siliyor  daha sonra kontrol yani get_headers ile gelen linke bakıyor kontrol[0] ile get_headers’da dizi halinde değer proxy bilgileri arasında ilk olan http 1.1 200 ok dönüyor ise böyle bir dosya var yok ise else dönüyor else’de de zaten hatalı resim img dönüyor mantığı basit yani bu size şunu sunuyor normalde resim linkini böyle girersiniz. 

<img src="https://www.imagevisit.com/images/2017/08/28/bucurcin.jpg">

ama resimi çektiğiniz yer eğer ssl serfitikalı değil ise size https sorun çıkartacaktır. bu yüzden böyle bir proxy yapar iseniz

<img src="https://www.arcface.net/image.php?url=https%3A%2F%2Fwww.imagevisit.com%2Fimages%2F2017%2F08%2F28%2Fbucurcin.jpg">

Yazdığınız zaman resimi sizin siteniz’den çeker gibi çekecektir. Buda zaten siteniz https olduğu için https sorun vermeyecektir.

<?php

    $url = ""; $link = htmlspecialchars(trim($_GET['url'])); $kontrol = get_headers($link);

    if($kontrol[0] == 'HTTP/1.1 200 OK'){

        $url = $link;

    }else{

        $url = htmlspecialchars(trim('https://www.arcface.net/upload/dosya/default-thumb_159b13c4ed780a.jpg'));

    }

    $imginfo = getimagesize( $url );

    header("Content-type: ".$imginfo['mime']);

    readfile( $url );

?>

PHP Tarihi Ay, Gün Şeklinde Türkçe Yazdırma

Bu bizzat benim bile çok fazla ihtiyacım olan bir şey ezberlenmeyecek kadar uzun bir şey olmasa da bu tür fonksiyonlar ve terimler akılda tutulması zor oluyor sürekli yazmadığımız için akıldan çıkıyor görünce böyleymiş desek bile sonuçta önce görme isteği duyuyoruz.

PHP’de tarih fonksiyonları siz çevirmediğiniz sürece ingilizce kalmaktadır.
Bu vereceğim kod varsayılan dili türkçe olarak belirtip tarihi size türkçe olarak çıktı yapmaktadır.

Öncelikle local dilimizi türkçe olarak belirtelim bunu sayfanızın başına yazın

setlocale(LC_TIME,"tr_TR.UTF8");

daha sonra ise tarihi gün ay şeklinde yazılı nasıl yazdırırız onu göstereyim.

strftime("%e %B %Y %A", strtotime(date ("d-m-Y H:i:s", strtotime("22-09-2021 04:34:00"))));

Eğer setlocale ile dilin türkçe olduğunu belirtmeseydik üstteki kodun çıktısı böyle olacaktı. 22 September 2021 Wednesday

Ama belirttiğimiz için bize türkçe olarak çıktı verecektir.
22 Eylül 2021 Çarşamba

gösterim sırasını değiştirmek isterseniz "%e %B %Y %A" Kısmını düzenlemek yeterlidir.