Utility Yardımcıları

1.8k görüntülenme Markdown

Kod tabanının dayandığı küçük statik fonksiyonlar. Birçoğu, yerine geçtiği PHP yerleşiği burada yanlış cevap verdiği için vardır.

Genel Bakış

Çoğu, burada yanlış davranan bir PHP yerleşiğini sarmalar. Ham fonksiyon yapılandırılmış kodlamayı yok sayar, Türkçede bozulur ya da sistemin geri okuyamayacağı JSON üretir.

Aşağıdaki her şey statiktir ve başarısızlık yanlış değerli bir dönüştür. Gerekçesini yalnız istek yardımcısı söyler: Utility::$error içinde.

Referans

Uzak Servis Çağırma

Utility, dışa HTTP
public static function HttpRequest($url = '', $params = [], $retry = 0);
tek metot, iki biçim
// Tercih edilen: seçenek dizisi İLK argüman olarak.
$body = Utility::HttpRequest([
    'url'    => 'https://api.example.com/v1/ping',
    'type'   => 'POST',
    'data'   => ['a' => 1],
    'header' => ['Accept: application/json'],
]);

// Eski biçim: önce adres, sonra daha küçük bir seçenek dizisi.
$body = Utility::HttpRequest('https://api.example.com/v1/ping', ['post' => ['a' => 1]]);

Yanıt gövdesini dize olarak döndürür; aktarım başarısız olduğunda false. Üçüncü argüman iç yönlendirme sayacıdır, çağıran taraf onu geçmez. Seçenekler:

AnahtarTipVarsayılanNe yapar
urlstringzorunluHedef adres. Sorgu dizesi buraya yazılır, data içine değil.
typestringGETHTTP metodu, büyük harfe çevrilir. GET dışı her şey özel istek olarak gider.
datadizi ya da dizeyokİstek gövdesi. Dizi form olarak kodlanır, dize olduğu gibi gider; JSON böyle gönderilir. Metot GET iken yok sayılır.
headerdiziboşTam başlık satırları; örneğin 'Authorization: Bearer ...'.
timeoutint30Aktarımın tamamına tanınan saniye.
connect_timeoutint10Yalnız bağlantı aşamasına tanınan saniye.
ssl_verifybooltrueKarşı tarafı ve host adını doğrular. Kendi denetiminizdeki bir servis dışında kapatmayın.
allow_ipv6boolfalseFalse iken ad çözümü v4'e zorlanır; v6 yönlendirmesi olmayan bir host sistem zaman aşımına kadar bloke olur.
HttpRequest() Eski biçim yalnız beş anahtar okur: post, timeout (varsayılan 5), connect_timeout, ssl_verify (varsayılan false) ve allow_ipv6. Başlık göndermez ve post verilir verilmez POST seçer.
Utility::$error Public ve statik. Bir false dönüşünden sonra taşıma mesajını tutar, örneğin ad çözümü hatası. Oraya yazan tek yer bu metottur, yani bayat bir değer diğer her başarısızlıktan sağ çıkar. Sonraki çağrı üzerine yazmadan önce okuyun.
filter:http.request İki biçim de normalleştirildikten sonra çalışır. Dinleyici giden çağrının adresini, metodunu, gövdesini, başlıklarını, zaman aşımlarını ve doğrulamasını yeniden yazabilir. Seçenekler referansla değişir; dönüş kullanılmaz.

JSON

Utility, JSON
public static function jencode($string = '', $flags = 0): string|false;
public static function jdecode($string = '', $mode = false);
jencode() Verdiğiniz $flags, her zaman açık olan üçüne eklenir: geçersiz bayt dizileri düşer, unicode kaçırılmaz, eğik çizgiler kaçırılmaz. Kodlanamayan bir değere false yanıtlar.
jdecode() İkinci argüman true ise ilişkisel dizi, false ise nesne ağacı verir. True iken verilen bir dizi dokunulmadan geri döner; üst katmanda çözülmüş bir değer çağrıdan sağ çıkar. Boş dize null yanıtlar.

Metin

Utility, metin
public static function strtoupper($str, $encode = 'utf8');
public static function strtolower($str, $encode = 'UTF-8');
public static function ucfirst($string, $encoding = 'utf8');
public static function strlen($str, $charset = 'utf-8');
public static function substr($str = '', $start = 0, $end = -1, $charset = 'utf-8');
public static function short_text($text = '', $start = false, $end = false, $points = false, $charset = 'UTF-8');
strtoupper() Çok baytlı büyük harf. Noktalı büyük harf yalnız seçili dil Türkçeyken çıkar.
strtolower() Aynanın öbür yüzü; iki büyük harfi de aynı koşulla geri eşler.
ucfirst() İlk karakter büyür, gerisine dokunulmaz.
strlen() Bayt değil karakter sayar. Null, uyarı yerine sıfır verir.
substr() Üçüncü argüman bitiş konumu değil uzunluktur; eksi bir olan varsayılanı son karakteri düşürür. Sona kadar okumak için null geçin.
short_text() Başlangıç artı uzunluk; dördüncü argüman, özgün metin daha uzunsa sonuna üç nokta ekler. Uzunluk verilmezse dizenin tamamını döndürür.

Adresler

Utility, adresler
public static function AppAdress($prefix = false);
public static function RequestURI();
public static function redirect($url = '', $time = 0): void;
public static function getReferer($internal_only = false);
public static function seo_url(string $url, array $allowed = ['page']): string;
public static function image_link_determiner($arg = '', $prefix = '', $rseparator = true);
AppAdress() Kurulumun taban adresi; istek başına bir kez çözülür. Yönlendirme ve dil önekini eklemek için true geçin; sayfa içi bağlantı bunu ister.
RequestURI() Kurulum alt dizini çıkarılmış ve başına eğik çizgi garantilenmiş mevcut yol.
redirect() Konum başlığını gönderir; ikinci argüman sıfırdan büyükse yenileme başlığını. Çalışmayı durdurmaz.
getReferer() İşaretlemesi temizlenmiş yönlendiren adres ya da null. Bu kurulum dışından geleni reddetmek için true geçin.
seo_url() Slug üreticisi değildir. Bir adresi, yalnız izin verdiğiniz sorgu anahtarlarını koruyarak yeniden kurar. Canonical ya da og etiketi ziyaretçinin eklediğini devralamaz. Host taşımayan bir değer olduğu gibi döner.
image_link_determiner() Saklanan dosya yolunun önüne klasörü ve taban adresi ekler. Şema taşıyan bir değere dokunmaz.

Ziyaretçinin Adresi

Utility, istemci adresi
public static function resolve_client_ip(array $headers = []): string;
public static function trusted_proxies(): array;
public static function forwarded_header_ignored(): bool;
public static function ip_in_ranges(string $ip, array $ranges): bool;
public static function cidr_match(string $ip, string $cidr): bool;
resolve_client_ip() Kaydedilecek, engellenecek veya sınırlanacak adres. İletilen başlığa yalnız istek listelenmiş bir proxy aralığından geldiyse inanılır; aksi halde TCP karşı ucu kazanır. Kullanılabilir karşı uç yoksa boş dize döner, kendi yedeğinizi bırakın.
trusted_proxies() İletilen başlığına inanılabilecek aralıklar. Proxy arkasında olmayan bir kurulum hiçbiriyle eşleşmez, başlık okumaz.
forwarded_header_ignored() Bir başlık farklı bir adres iddia ettiyse ve reddedildiyse true döner. İki sebep: listelenmemiş bir proxy ya da başlığı boş yere gönderen bir taraf. Genel bir adresten gelen istekte başlık özel, operatör NAT'ı ya da bozuk bir adres taşıyorsa false döner: onu ziyaretçinin kendi ağı (mobil operatör, ofis vekili, VPN) eklemiştir.
ip_in_ranges() Bir aralık listesine karşı birebir eşleşme veya CIDR üyeliği.
cidr_match() IPv4 ve IPv6 için ikili düzeyde CIDR sınaması. Sürüm uyuşmazlığında false döner, hata vermez.

Veri ve Dosyalar

Utility, veri
public static function array_export($array = [], $options = []);
public static function xdecode($xml_string = '', $returnArray = false);
public static function array_to_xml(array $data, string $root = 'data'): string;
public static function generate_hash($length = 9, $add_dashes = false, $available_sets = 'luds');
public static function sizeFormat(int $bytes, string $emptyPlaceholder = "\u2014"): string;
array_export() Bir diziyi PHP kaynağı olarak yazar. Tek seçenek anahtarı var, pwith: true çıktıyı diziyi döndüren tam bir dosyaya sarar; yapılandırma böyle kaydedilir. Sonuç önce çalıştırılıp sınanır, dizi olarak geri gelmezse daha katı bir dışa aktarım devreye girer.
xdecode() XML'i nesne ağacına, ikinci argüman true ise diziye çevirir. Geçersiz girdi false yanıtlar. Kök eleman tek dış anahtar olur.
array_to_xml() Ters yön; girintili ve kaçışlanmış. Sayısal anahtarlar item elemanı olur, kullanılamayan anahtar geçerli bir eleman adına çevrilir.
generate_hash() Üçüncü argüman karakter kümelerini harfle seçer: l küçük harf, u büyük harf, d rakam, s simge; birbirine benzeyen karakterler dışarıda kalır. İkinci argüman sonucu tirelerle gruplar ve uzatır.
sizeFormat() Bayt sayısını insanın okuduğu biçime çevirir; bayt biriminin üstünde tek ondalıkla. Sıfır ve altı, kendiniz vermediyseniz bir tire olan yer tutucuyu yanıtlar.

Örnek

Çağrı ve geri okuma bir arada.

istek, ardından geri okuma
public function create_account(string $domain, string $plan): array
{
    $body = Utility::jencode(['domain' => $domain, 'plan' => $plan]);

    $response = Utility::HttpRequest([
        'url'     => 'https://api.example.com/v1/accounts',
        'type'    => 'POST',
        'data'    => $body,                       // dize olduğu gibi gönderilir
        'header'  => [
            'Authorization: Bearer ' . $this->config['token'],
            'Content-Type: application/json',
        ],
        'timeout' => 20,
    ]);

    // Taşıma hatası: hiçbir şey ayrıştırılmadı, sebep sınıfın üzerinde duruyor.
    if ($response === false)
        throw new Exception('Sağlayıcıya ulaşılamadı: ' . Utility::$error);

    $result = Utility::jdecode((string) $response, true);

    // Protokol hatası: bir yanıt aldık, ama ihtiyacımız olan yanıt değil.
    if (!is_array($result) || !isset($result['id']))
        throw new Exception('Sağlayıcıdan beklenmeyen yanıt.');

    return [
        'id'    => $result['id'],
        'quota' => Utility::sizeFormat((int) ($result['quota_bytes'] ?? 0)),
    ];
}

Tuzaklar

İki istek biçimi varsayılanları paylaşmaz

Eski biçim sertifika doğrulamasını kapatır ve aktarım zaman aşımını otuz saniyeden beşe indirir. Alışkanlıkla adresi ilk argüman olarak yazmak, doğrulamayı sessizce kapatır. Seçenek dizisini kullanın.

Yönlendirme tekrarı yalnız adresi taşır

Gövdede bir konum satırı göründüğünde çağrı kendini o adres ve eski biçim varsayılanlarıyla yeniden gönderir. Metot, gövde ve başlıklar taşınmaz; kimlikli bir POST anonim bir GET olarak geri gelir. Böyle bir yanıtı kendiniz izleyin.

Harf dönüşümü değeri değil oturumu izler

Türkçe harf eşlemesi yalnız seçili dil Türkçeyken uygulanır, yani aynı girdi iki oturumda farklı büyür. Saklanan bir anahtarı, karşılaştırma anahtarını ya da dosya adını asla böyle kurmayın. Bunu insanın okuyacağı yerde kullanın.

XML okuyucusu öznitelikleri kaybeder ve biçim değiştirir

İçinde metin olan bir eleman özniteliklerini tümüyle düşürür, tekrar eden kardeşler tek anahtarda toplanır. Tek öğeli yanıt bir dize, iki öğelisi bir listedir. Cevabı bunlardan birine dayanan bir sağlayıcıyı kendiniz ayrıştırın.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.