Sunucuda Komut Çalıştırmak

Eklentinizi eklediğiniz sunucu üzerinde nasıl komut çalıştırır ve çıktılarını nasıl alırsınız detaylıca bahsedeceğiz.

Standart Komut Çalıştırmak ve Çıktı Almak

Sistem üzerinde komut çalıştırabilmek için Liman Toolkit içerisinden Command classını kullanmaktayız. Limanda en çok kullanılan şey olduğu için ayrı bir başlıkta anlatma gereği duyduk. Gelin şimdi nasıl çalıştırırız bakalım.

Toolkiti çağırmak

use Liman\Toolkit\Shell\Command;

Controller dosyamızı açtığımızda namespace satırının hemen altına bu komutu ekliyoruz. Bu sayede dosyamızda Liman Toolkitin Command classını kullanabilir hale geleceğiz.

Komut çağırmak

$command = Command::run("hostname");

Yukarıdaki kodu çalıştırdığımızda bize sistem üzerinde hostnamekomutunu çalıştıracaktır. $command değişkenini respond yardımcı fonksiyonumuz ile kullanarak döndürdüğümüzde hostname bilgisini problemsiz şekilde elde edebiliriz. Eklenti şablonları kısmındaki OOP Training eklenti şablonunda bu kullanımların örneği mevcuttur.

Sudo olarak komut çağırmak

Aslında yukarıdaki kullanımın benzerini gerçekleştireceğiz. Sadece run komutu yerine runSudo şeklinde değiştirdiğimizde yetkili kullanıcı kullanılarak çalıştırılacaktır.

$command = Command::runSudo("cat /etc/network/interfaces");

Dış requestler ve escaping kullanımı

Command classı üzerinde güvenlik için dış inputlara escaping kullanımı mevcuttur. Aynı zamanda validation yardımcı fonksiyonu da bulunduğundan dış komutlarda ister regexp, ister tür, isterseniz de uzunluk kontrolü yapabilirsiniz. Birlikte dış requestlerin kullanıldığı bir senaryoyu inceleyelim.

Command::runSudo("touch /home/liman/@{:filename}", [
    "filename" => request("filename")
]);

Escaping kullanımı

Yukarıdaki runSudo fonksiyonunun ilk argümanında göreceğimiz üzere @{:filename} tarzı bir kullanım mevcuttur. Bu kullanım escaping işlemi gerçekleştirmektedir. Escaping işleminin önem sebebi güvenliktir. Dışarıdan düşük yetkili bir kullanıcı sistemi yönetirken bu boşluğa ; rm -rf * şeklinde bir girdi gönderirse tüm klasör içeriği silinecektir. Burada escaping işlemi ile gönderim sağlarsak ; işareti işlevini kaybedecektir ve sistemimiz daha güvenli bir şekilde kullanıcı girdilerine açık hale gelecektir.

run ve runSudo fonksiyonları normalde tek argümana ihtiyaç duymaktadır ancak escaping yapıldığında ikinci argüman olarak bir array gönderimi de yapmalıyız.

Escaping yapabilmek için @{:degiskenAdi} şeklinde bir kullanım yapmalıyız. Burada degiskenAdi kısmı göndereceğiniz parametrelerin ismine göre değişmeli, ikinci argüman olan arrayinizde bu isimleri key olarak kullanmalısınız.

Dış requestler

Dış requestlerden girdi alabilmemiz için ilk önce escaping yapmamız gerekiyordu. Bu adımı gerçekleştirdikten sonra ikinci argüman olarak kullanılan arrayimizde gönderdiğimiz verinin ismini request() PHP yardımcı fonksiyonu ile alabiliriz. Aldıktan sonra yukarıdaki kod bloğunda görülebileceği üzere key olarak escape edilen değişken adını, değerine ise request fonksiyonumuzdan aldığımız değeri göndermekteyiz.

Bu değerleri gönderebilmek için ise JS Yardımcı Fonksiyonları sayfamızda bulunan request fonksiyonunun detaylarını inceleyip, siz de kendi sayfanızdan request gönderimi yapabilirsiniz.

Fonksiyon Kullanım Parametreleri

Parametre

Açıklama

Veri Tipi

$command

Karşı sunucuda çalıştırılması gereken komut.

String

$variables

Eğer $command parametresi escape edilen kısımlar barındırıyorsa gönderilmesi gereken liste. (Opsiyonel)

Array

Last updated