PHP Ufak Tefek Fonksiyonlar – 1

Hangi yazılım diliyle yazılım geliştirirseniz geliştirin mutlaka kıyıda köşede birikmiş ufak tefek fonksiyonlarınız vardır. Bunları da alıp hemen hemen her projenizin kıyısına köşesine yerleştirip projenizi yönlendirmeye devam edersiniz. Bu işlem hızlıdır, güvenilirdir ve en önemlisi sadıktır. Çünkü yazılan koddan eminsinizdir. Kim bilir kaç yerde kullandınız da arkanıza dönüp bakmadınız. 🙂

Bende bu şekilde kullanmış olduğum fonksiyonlardan örnekler paylaşacağım. PHP ile geliştirmekte olduğumuz sistemlerimizden dolayı örnekler PHP üzerinden olacaktır. Diğer dillerden de örnekler vermeye çalışacağım zamanla.

String bir değişken içerisinde arama;

function in_string( $string, $val )
{
if ( !( strrpos( $string, $val ) === false ) )
return true;
return false;
}

Yukarıdaki fonksiyon strrpos aklıma gelmediği için yazılmıştır. Başka bir amacı yok diyebilirim 🙂 Okumaya devam et “PHP Ufak Tefek Fonksiyonlar – 1”

PHP SSH2 Kütüphanesi

PHP ile linux server tarafında başka bir linux server a bağlanıp işlem yapmanız gerekiyor ise SSH2 eklentisi tam olarak size göre. Birçok servisimizde ve projemizde kullanmış olduğumuz SSH2 eklentisine ufak bir kütüphane yazdım.

SSH2 kütüphanesini kullanabilmek için kullanmış olduğunuz Linux dağıtımına göre kütüphaneyi kurmanız gerekiyor. Centos 7 için kullanmış olduğum kaynak : https://www.adveyer.com/blog/centos-7-ssh2-php-extension-kurulumu/ Okumaya devam et “PHP SSH2 Kütüphanesi”

Kaç Satır Kod Yazdığınızı Merak Ediyorsanız ?

Projelerinizde kaç satır kod yazdığınızı merak ediyorsanız ki ben etmiştim onun aşağıdaki ufak projeyi yazdım ( Kopyala + Yapıştır > Sonuç : ). Google üzerindeki araştırmalar sonucu bir klasör içerisindeki dosyaların Boyutlarını, Satır sayılarını, Karakter ve Kelime sayılarını basit bir şekilde ekrana döktüm.

 

Siz isterseniz birden fazla klasör seçimi de yapabilirsiniz. Proje örnek kodları ve projenin kaynak kodları aşağıda yer almaktadır. Proje C#.NET tabanlıdır. Neden diye sormayın en hızlı bununla çıkartabildim 🙂 Daha farklı yöntemler olabilir. Linç etmeyin 🙂

Form üzerinden seçilen klasörün içerisindeki dosyaları tek tek okuyup dosya yolu ile  birlikte datagrid nesnesine ekliyor.

            if (!Directory.Exists(@"" + textBox1.Text))
                return;
            dataGridView1.Rows.Clear();

            DirectoryInfo di = new DirectoryInfo(@""+textBox1.Text);
            FileInfo[] directories = null;
            try
            {
                // tüm klasörler içerisindeki hangi dosyaların hesaplanacağı -- hepsi seçildi.
                directories = di.GetFiles("*", SearchOption.AllDirectories); 
            }
            catch
            {

            }
            Int64 total = 0;
            foreach (var item in directories)
            {
                string FilePath = @"" + item.DirectoryName + "\\" + item.Name;
                var lineCount = File.ReadLines(FilePath).Count(); // satır sayısı
                Int64 WordsCount = 0; // kelime sayısı
                Int64 CharCount = 0; // karakter sayısı
                
                // dosyayı parçalara ayırıp kaç satır ve karakter olduğunu hesaplayacağız.
                string FileText = new System.IO.StreamReader(FilePath).ReadToEnd().Replace("\r\n", "\r");
                CharCount = FileText.Length;
                WordsCount = FileText.Split(' ').Length;
                // datagrid üzerine topladığımız bilgileri aktarıyoruz. BoyutHesapla fonksiyonu ile dosya boyutu hesaplanıyor ( b, kb, mb, gb vs )
                dataGridView1.Rows.Add(item.Name, item.DirectoryName.ToString().Replace(textBox1.Text, ""), BoyutHesapla( item.Length ), item.Length, lineCount, CharCount, WordsCount);
                total += item.Length;
            }
            label2.Text = ( dataGridView1.Rows.Count - 1 ).ToString();
            label4.Text = BoyutHesapla( total)+" ( "+total+" ) "; // toplam boyutu hesaplaıyoruz..

Yukarıdaki kodda yer alan BoyutHesapla fonksiyonu ise gelen boyutları byte, kilobyte, megabyte vb. cinsinden çevrilmesini sağllıyor.

        public static string BoyutHesapla(long gelenboyut)
        {
            if (gelenboyut >= 1073741824)
                return (gelenboyut / 1073741824) + " GB ";
            if (gelenboyut >= 1048576)
                return (gelenboyut / 1048576) + " MB ";
            if (gelenboyut >= 1024)
                return (gelenboyut / 1024) + " KB ";
            return gelenboyut + " B ";
        }

Proje Dosyalarını Buradan İndirebilirsiniz..

Centos Linux MYSQL ve Web Dosyaları Yedekleme

VPS ( Virtual Private Server | Özel Sanal Sunucu ) kullanıyorsanız üzerinde de Cpanel, WHM, Vesta, Plesk vb. bir yönetim paneli bulunmuyor ise yedekleme işlemleri biraz zor olabilir. Yedekleme yapabilmek için genellikle manuel işlemler mevcut. MYSQL kullandığımızı düşünürsek PHPMyAdmin üzerinden tüm veritabanını indirmek, PHP kullandığımızı da düşünürsek FTP vb. bir bağlantı ile bağlanıp dosyaları maneul olarak yedeklemek uzun bir senaryo.

Peki biz her gece uyurken yedekler otomatik olarak alınsa ? Daha rahat ve güzel olmaz mı ? 🙂 Okumaya devam et “Centos Linux MYSQL ve Web Dosyaları Yedekleme”

MYSQL Ufak İpuçları – vol.3

Üçüncü seri olarak birkaç ip ucu ile devam edelim.
Birinci seri için BURADAN ulaşabilirsiniz.
İkinci seri içi BURADAN ulaşabilirsiniz.

Nasipse 4. seriyi de yayınlarım yakın bir zamanda 🙂

İlk olarak şöyle bir yapalım. Bir tablomuz var ve diğer bir tabloya aktaracağız. Arayüz kullanırken bu işlemler bir kaç tık yaparak sonuca hızlıca ulaşabiliriz fakat ya arayüzümüz yoksa. ! Çözüm tabi ki var. Komut satırından devam. Arayüz ne yapıyor sanıyorsunuz 🙂

Örnek olarak eski kullanıcı tablosundaki belirli bir sorgunun cevabını yeni bir tabloya aktarmamız gerekiyor;
# INSERT INTO YENI_KULLANICI_TABLOSU ( ADI,SOYADI,MESLEK, ESKI_ID,EMAIL, ADRES ) SELECT ADI,SOYADI,MESLEK, ESKI_ID,EMAIL, ADRES FROM ESKI_KULLANICI_TABLOSU WHERE YAS > 23 AND KAYIT_TARIHI > ‘2018-01-01’  ORDER BY ID DESC LIMIT 1000

Where şartımıza göre yukarıdaki sorgumuz ESKI_KULLANICI_TABLOSU‘dan  YENI_KULLANICI_TABLOSU‘na aktarım yapacaktır. Bu işlemi bir yazılım dili ile de yapabiliriz. Fakat şöyle düşünün; Önce yazılımın çalışacağı PLATFORM’a tüm bilgiyi çekeceğiz ve sonra tekrar geriye INSERT edeceğiz. Bu şekilde daha hızlı olmasını sağlayabilirsiniz. Tabi ki bir veritabanından farklı bir veritabanına aktarım yapmak isterseniz bu sorgu biraz yetersiz gelebilir. 🙂 O zaman kolları sıvayıp bir aktarım / transfer mekanizması yazmanız gerekebilir.

Veritabanınızdaki toplam satır sayısını merak ediyorsanız aşağıdaki sorguyu kullanabilirsiniz.
# SELECT SUM( TABLE_ROWS )
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = ‘VERI_TABANI_ADI‘;

Yine bir merak sorusu ile devam edelim. Merak ettiğimiz ise veritabanımızdaki tabloların MB ( megabayt ) cinsinden boyutlarını sorgulayalım.
# SELECT
table_schema as `Database`,
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
ORDER BY (data_length + index_length) DESC;

Bu sorgular sürekli kullanılan sorgular değildir. Genellikle kriz anlarında yani veritabanı çökmeye yakın anlarında hangi tablo çatlamış, hangi tablo diskte fazla yer kaplıyor, hangi tablo neden bu kadar şişmiş durumlarını kontrol edebilmek içindir. Sorguları genişletip daha farklı sonuçlar alabilirsiniz ve geleceğinizi yakından görüp kriz anlarını öncesinde çözebilirsiniz.

Bir sonraki seride görüşmek üzere. 🙂

 

PHP ile E-Fatura Mükellefi Sorgulama

Son yıllarda E – Fatura / E – Arşiv muhabbetlerinin döndüğünü biliyorsunuzdur. E-Fatura tarafında yaptığımız bir çalışma üzerinde E-Fatura mükelleflerinin anlık sorgulanması gerektiğini gördük. Bunun için herhangi bir web servis bulamadık. Bundan dolayı kendi web servisimizi yazalım dedik.

Aşağıdaki kod excel çıktısının içerisinde tek seferlik bir text search yaparak cevabını vermekte.  in_string fonksiyonu daha önceden hazırdı. 🙂 ;

function in_string( $string, $val )
{ 
if ( !( strrpos( $string, $val ) === false ) )
return true;
return false;
}

function check_tax( $vkn )
{ 
if( !$vkn || !is_numeric( $vkn ) || !in_array( strlen( $vkn ), array( 10, 11 ) ) )
return false;
set_time_limit( 60 );
$get = file_get_contents("http://sorgu.efatura.gov.tr/kullanicilar/yliste.php?&xls" );
if( !$get )
return false;
$return = false;
if( in_string( $get, $vkn ) )
$return = true;
unset( $get ); // ufak bi temizlik
return $return; 
}
check_tax( 'VERGI_NO' );

Tabiki siz bu işlemi sürekli olarak sorgu.efatura.gov.tr üzerinden çekmek yerine veritabanınıza veya başka bir dosyanıza kaydedip sorgulamalarınızı yapabilirsiniz..

edit : Barış Demir
Bir yazılımcı arkadaşın yardımıyla aşağıdaki kadar olayı basitleştirmiş oldu. Teşekkürler..

function check_cari_tax( $vkn )
{
if( !$vkn )
return 0;
$url = 'http://sorgu.efatura.gov.tr/kullanicilar/yliste.php?ara='.$vkn;
$result = file_get_contents( $url );
if( preg_match( "/".$vkn."/i", $result ) )
return 1;
return 0;
}

 

 

Sublime Text 3 Üzerinde PHP İle PHP Build Etme

Bir önceki yazımda ( Sublime Text 3 Üzerinde Node İle Javascript Build Etme ) Javascript için ufak bir geliştirme yapmıştık. Şimdi ise PHP için yapalım.

Yine Javascript’te olduğu  gibi PHP’de de  CTRL+B komutu ile işlemler yürüyor. Tek fark olarak dosya bazlı Build işlemi gerçekleştiği için tüm script çalışmayabilir.  Framework kullanıyorsanız bahsettiğim gibi sadece o sayfa derlenir Syntax hatası olup olmadığını görebilir.

Fakat PHP öğrenmeye yeni başlayanlar veya ufak tefek kod parçalarını test etmek için gerçekten güzel bir uygulama. Denemenizi tavsiye ederim..

Okumaya devam et “Sublime Text 3 Üzerinde PHP İle PHP Build Etme”

Sublime Text 3 Üzerinde Node İle Javascript Build Etme

Javascript & Node.js ile yazılım hayatımıza heyecan katmaya devam ederken bunları yazmakta kullandığım malum editor Sublime Text 3

ST3 ( Sublime Text 3 ) ile uzaktan geliştirme yaptığım için ( FTP / WINSCP ) genelliklede canlı sistemler üzerinde çalıştığım için javascript tarafında dosyayı upload edene kadar Syntax ( kodlama ) hatalarını gözden kaçırıyoruz. Bunun için nette araştırmalarım sonucu aşağıdaki işlemleri yaptığımızda ST3 üzerinde CTRL + B ile build ederek hızlıca syntax hatalarınızı görüyorsunuz. Hatta development durumundayken yaptığınız console.log işlemlerinizi de hızlıca görmenizi sağlıyor. Tabi ki yeterli değil fakat bir çok olayın / hatanın önüne geçmenizi sağlıyor.. Okumaya devam et “Sublime Text 3 Üzerinde Node İle Javascript Build Etme”