Mysqlexport – Veritabanını Php İle Dışarı Aktarmak

İster programcı olun ister web sitesi olan herhangi birisi, herkesin başına gelmiştir; veritabanlarınızı yedeklemek istersiniz ama paylaşımlı hosting kullanırsınız ve hosting firmasından kaynaklı problemler ile veritabanınızı ya da veritabanlarınızı dışarıya aktarıp yedeklemek imkansız hale gelir. Böyle bir sorunuz olmasa bile benim gibi kendi sunucunuzu yönetebilirsiniz ve birçok veritabanınızı elle yedeklemek size zor gelir. Tüm veritabanlarınızı otomatik olarak yedekleyecek bir sisteminiz olsun istersiniz.

Zaten programcı dediğiniz tembel olur, tembel kalabilmek için her şeyi otomatikleştiren veya kolaylaştıran insanlardır. Programı çalıştırdığı esnada kahve makinesinin kahve oluşturmaya başlaması ve tam onun yanına geldiği esnada kahve oluşturmayı bitirmesi için kod yazan sistem yöneticileri gördü bu dünya. İşte ben böyle insanları takdir ederim.

Ben de sunucumdaki veritabanlarını otomatik olarak yedeklemesi için bir php sınıfı oluşturdum. Cronjob oluşturarak bu dertten kurtulacağım. Siz de isterseniz benim gibi otomatik yedekleme için kullanın, isterseniz web üzerinden gireceğiniz bir şifre ile yedekleyen özel sayfa oluşturun.

Oluşturduğum mysqlexport projesine https://github.com/erhankilic/mysqlexport adresinden oluşabilirsiniz.

Aşağıdaki örnek kullanım ile istediğiniz gibi veritabanlarınızı yedekleyebilirsiniz. Yalnız tüm veritabanlarına erişim yetkisi olan bir kullanıcı ile yapmalısınız. Aksi takdirde hangi veritabanına yetkisi varsa sadece onu yedekleyecektir.

Kullanım Basamakları;

  1. Öncelikle include ile sınıfımızı programımıza dahil ediyoruz.
  2. Bir değişkene oluşturduğumuz yeni sınıfı atıyoruz. İlk parametrede yedeklenecek yerin yolunu yazıyoruz. Daha sonra sırasıyla veritabanı bağlantı adresini (genelde localhost olur), kullanıcı adını ve kullanıcı şifresini parametreler olarak yazıyoruz.
  3. Bundan sonra iki seçeneğimiz var. İster setDatabases(array $databases) ile bir array içerisinde yedeklemek istediğimiz veritabanlarını programa tanımlıyoruz ya da getDatabases() fonksiyonu ile veritabanlarının isimlerini çekmesini sağlıyoruz.
  4. En sonunda da export() fonksiyonu ile yedekleme işlemini bitiriyoruz.
<?php
include 'Export.php';
$export = new MysqlExport\Export('backup', 'localhost', 'root', 'dev1');
$export->getDatabases();
$export->export();

importSqlWithPhp – Php ile Sql Dosyası Yükleme (Import Etme)

Bazen Phpmyadmin ya da herhangi bir veritabanı programı kullanamadığınız zamanlar olur ve Sql dosyasını veritabanına yüklemek için başka seçenekler kullanmak zorunda kalırsınız. Burada ise Php‘de hem eski mysql_query hem de yeni mysqli_query kullanarak nasıl yükleyebileceğinize dair bilgilendirme yapacağım. Dosyalara aynı zamanda Github projemden de ulaşabilirsiniz.

Her iki yöntemde de yapmanız gereken şunlardır. Sql dosyası ile oluşturacağınız php dosyasını aynı yere yükleyip site adresi üzerinden php dosyasını çalıştırmak. Sunucu üzerinden konsol komutları ile de çalıştırabilirsiniz.

$filename değişkeni dosya ismi ile güncelleyin. $mysql_host ismini ise veritabanı sunucusu ile güncelleyin. Veritabanı sunucusu farklı değilse olduğu gibi bırakabilirsiniz. $mysql_username ve $mysql_password veritabanı için oluşturduğunuz kullanıcı adı ve şifredir. $mysql_database ise veritabanı ismidir. Gerekli şekilde güncellersiniz.

Mysql_query Fonksiyonu İle

<?php

// Name of the file
$filename = 'sql.sql';
// MySQL host
$mysql_host = 'localhost';
// MySQL username
$mysql_username = 'username';
// MySQL password
$mysql_password = 'password';
// Database name
$mysql_database = 'database';

// Connect to MySQL server
mysql_connect($mysql_host, $mysql_username, $mysql_password) or die('Error connecting to MySQL server: ' . mysql_error());
// Select database
mysql_select_db($mysql_database) or die('Error selecting MySQL database: ' . mysql_error());

// Temporary variable, used to store current query
$templine = '';
// Read in entire file
$lines = file($filename);
// Loop through each line
foreach ($lines as $line) {
// Skip it if it's a comment
 if (substr($line, 0, 2) == '--' || $line == '')
 continue;

// Add this line to the current segment
 $templine .= $line;
// If it has a semicolon at the end, it's the end of the query
 if (substr(trim($line), -1, 1) == ';') {
 // Perform the query
 mysql_query($templine) or print('Error performing query \'<strong>' . $templine . '\': ' . mysql_error() . '<br /><br />');
 // Reset temp variable to empty
 $templine = '';
 }
}
echo "Tables imported successfully";
?>

Mysqli_query Class’ı İle

<?php

// Name of the file
$filename = 'sql.sql';
// MySQL host
$mysql_host = 'localhost';
// MySQL username
$mysql_username = 'username';
// MySQL password
$mysql_password = 'password';
// Database name
$mysql_database = 'database';

// Connect to MySQL server
$con = @new mysqli($mysql_host,$mysql_username,$mysql_password,$mysql_database);

// Check connection
if ($con->connect_errno)
 {
 echo "Failed to connect to MySQL: " . $con->connect_errno;
 echo "<br/>Error: " . $con->connect_error;
 }

// Temporary variable, used to store current query
$templine = '';
// Read in entire file
$lines = file($filename);
// Loop through each line
foreach ($lines as $line) {
// Skip it if it's a comment
 if (substr($line, 0, 2) == '--' || $line == '')
 continue;

// Add this line to the current segment
 $templine .= $line;
// If it has a semicolon at the end, it's the end of the query
 if (substr(trim($line), -1, 1) == ';') {
 // Perform the query
 $con->query($templine) or print('Error performing query \'<strong>' . $templine . '\': ' . $con->error() . '<br /><br />');
 // Reset temp variable to empty
 $templine = '';
 }
}
echo "Tables imported successfully";
$con->close($con);

 

Sitede Sağ Tıklamayı Önleme

Bazı arkadaşların sitelerinde sağ tıklamayı önlemek içni soru sorduklarını farkettim. Bunun için basit bir kod paylaşacağım ama bilgilendirme yapmak istiyorum. İçeriğin çalınması korkusu ile bunu yapıyorsanız eğer, bu konularda az bilgili birisi her türlü içeriğinize ulaşur. Sayfa kaynak dosları eninde sonunda ulaşılır durumdadır. Kodumuza geçelim. Aşağıdaki script kodunu sitenize ekleyin.

document.addEventListener("contextmenu", function(e){
 e.preventDefault();
}, false);

Siteyi Arapçaya Uygun Hale Getirmek

Bu yazımda siteyi arapça veya benzer diller için sağdan sola çevirme işlemi anlatacağım. Öncelikle javascript fonksiyonlarını ekledikten sonra tek bir kod ile sağdan sola çevirme işlemini yapacağız.

Bu javascript kodumuz bootstrapın css kurallarını sağdan sola çevirmektedir. Kendi özel css kurallarımız için ayrı css kuralları yazmak gereklidir. Mesela styleAr.css gibi bir dosya oluşturup web sitesi dili arapça gibi sağdan sola dillerde olunca eklenecek şekilde ayarlayabilirsiniz.

Javascript

Aşağıdaki javascript kodlarını ayrı bir dosyada veya header etiketi içerisinde ekliyoruz.

var layout = {};
layout.setDirection = function (direction) {
    layout.rtl = (direction === 'rtl');
    document.getElementsByTagName("html")[0].style.direction = direction;
    var styleSheets = document.styleSheets;
    var modifyRule = function (rule) {
        if (rule.style.getPropertyValue(layout.rtl ? 'left' : 'right') && rule.selectorText.match(/\.col-(xs|sm|md|lg)-push-\d\d*/)) {
            rule.style.setProperty((layout.rtl ? 'right' : 'left'), rule.style.getPropertyValue((layout.rtl ? 'left' : 'right')));
            rule.style.removeProperty((layout.rtl ? 'left' : 'right'));
        }
        if (rule.style.getPropertyValue(layout.rtl ? 'right' : 'left') && rule.selectorText.match(/\.col-(xs|sm|md|lg)-pull-\d\d*/)) {
            rule.style.setProperty((layout.rtl ? 'left' : 'right'), rule.style.getPropertyValue((layout.rtl ? 'right' : 'left')));
            rule.style.removeProperty((layout.rtl ? 'right' : 'left'));
        }
        if (rule.style.getPropertyValue(layout.rtl ? 'margin-left' : 'margin-right') && rule.selectorText.match(/\.col-(xs|sm|md|lg)-offset-\d\d*/)) {
            rule.style.setProperty((layout.rtl ? 'margin-right' : 'margin-left'), rule.style.getPropertyValue((layout.rtl ? 'margin-left' : 'margin-right')));
            rule.style.removeProperty((layout.rtl ? 'margin-left' : 'margin-right'));
        }
        if (rule.style.getPropertyValue('float') && rule.selectorText.match(/\.col-(xs|sm|md|lg)-\d\d*/)) {
            rule.style.setProperty('float', (layout.rtl ? 'right' : 'left'));
        }
    };
    try {
        for (var i = 0; i < styleSheets.length; i++) {
            var rules = styleSheets[i].cssRules || styleSheets[i].rules;
            if (rules) {
                for (var j = 0; j < rules.length; j++) {
                    if (rules[j].type === 4) {
                        var mediaRules = rules[j].cssRules || rules[j].rules
                        for (var y = 0; y < mediaRules.length; y++) {
                            modifyRule(mediaRules[y]);
                        }
                    }
                    if (rules[j].type === 1) {
                        modifyRule(rules[j]);
                    }

                }
            }
        }
    } catch (e) {
        // Firefox might throw a SecurityError exception but it will work
        if (e.name !== 'SecurityError') {
            throw e;
        }
    }
};

Siteyi sağdan sola çevirmek için ise aşağıdaki kodu yazmamız yeterlidir.

layout.setDirection('rtl');

Responsive Tablo Yapımı

Herkes sitelerinde tablo kullanır fakat tablolar mobil cihazlarda çok kötü gözükmektedir. Tablonun genişliğini 100% olarak ayarlasanız bile belli bir yere kadar küçülecek ve yazılar çok ufak olacaktır. Hiç kullanışlı değildir. Bu yazımda size responsive tablo yapımını göstereceğim.

Html Kodları

Basit bir örnek tablo kodları.

<table>
   <thead>
     <tr>
       <th>First Name</th>
       <th>Last Name</th>
       <th>Job Title</th>
     </tr>
   </thead>
   <tbody>
     <tr>
       <td>James</td>
       <td>Matman</td>
       <td>Chief Sandwich Eater</td>
     </tr>
     <tr>
       <td>The</td>
       <td>Tick</td>
       <td>Crimefighter Sorta</td>
     </tr>
   </tbody>
</table>

Css Kodları

Tablolar için genel amaçlı oluşturduğumuz css kodları. Stili kendiniz özelleştirebilirsiniz.

/* 
Genel Stiller
*/
table { 
  width: 100%; 
  border-collapse: collapse; 
}
/* Zebra Çizgileri Stili */
tr:nth-of-type(odd) { 
  background: #eee; 
}
th { 
  background: #333; 
  color: white; 
  font-weight: bold; 
}
td, th { 
  padding: 6px; 
  border: 1px solid #ccc; 
  text-align: left; 
}

Responsive Css Kodları

Bu css kodları ve @media sorgusu ile tablomuz responsive hale gelecektir. Burada dikkat etmeniz gereken şey, en sonda “Tablo Başlıkları” yorumuna sahip css kodlarıdır. Bu css kodları sütun başlıklarını her <td> elementinin yazısının öncesine ekleme yapar. Bunu her tablo için özelleştirmeniz gerekmektedir.

/* 
Bu media query ile 760px genişlik altında tablomuzu responsive yaparız.
Aynı zamanda 768px ve 1024px çözünürlüğü arasında da çalışmasını sağlayarak,
Ipad gibi cihazlarda da görünümünü iyileştirmiş oluruz.
*/
@media 
only screen and (max-width: 760px),
(min-device-width: 768px) and (max-device-width: 1024px)  {

    /* Force table to not be like tables anymore */
    table, thead, tbody, th, td, tr { 
        display: block; 
    }
    
    /* Sütun başlıklarını gizle (display: none; ile değil ama) */
    thead tr { 
        position: absolute;
        top: -9999px;
        left: -9999px;
    }
    
    tr { border: 1px solid #ccc; }
    
    td { 
        /* Satır gibi davranmasını sağla */
        border: none;
        border-bottom: 1px solid #eee; 
        position: relative;
        padding-left: 50%; 
    }
    
    td:before { 
        /* Sütun başlığı varmış gibi düzenle */
        position: absolute;
        /* Sol tarafında başlık için yer aç */
        top: 6px;
        left: 6px;
        width: 45%; 
        padding-right: 10px; 
        white-space: nowrap;
    }
    
    /*
    Tablo Başlıkları
    Her bir <td> elementi için sütun başlıklarını ekle
    Her tablo için özelleştirmelisiniz.
    */
    td:nth-of-type(1):before { content: "First Name"; }
    td:nth-of-type(2):before { content: "Last Name"; }
    td:nth-of-type(3):before { content: "Job Title"; }
    td:nth-of-type(4):before { content: "Favorite Color"; }
    td:nth-of-type(5):before { content: "Wars of Trek?"; }
    td:nth-of-type(6):before { content: "Porn Name"; }
    td:nth-of-type(7):before { content: "Date of Birth"; }
    td:nth-of-type(8):before { content: "Dream Vacation City"; }
    td:nth-of-type(9):before { content: "GPA"; }
    td:nth-of-type(10):before { content: "Arbitrary Data"; }
}

Sonuç

760px genişlik altında tablomuz bu şekilde gözükecektir.

mobile-table

Php İle Haftanın Günlerini Bulmak

Merhaba arkadaşlar. Bugün, bulunduğumuz hafta dahil olmak üzere 5 haftanın günlerini tek tek bulmam gerekti. Yazdığım kodları dilediğiniz gibi kullanarak istediğiniz günleri elde edebilirsiniz. Mantığını basittir. DateTime classını bilmeniz yeterlidir.

Sadece hafta içlerini bir dizide toplamaktayım. Bunu $lastDay değişkeni cuma olarak ayarladıktan sonra döngünün başında 3 gün sonraya güncelliyorum. Böylece pazartesiyi bulmuş oluyorum ve her günü ayrı ayrı diziye giriyorum.

// Bugünü oluşturuyoruz
 $today = new DateTime();
// Bulunduğumuz haftanın başını buluyoruz.
 $monday = clone $today;
 $monday = $monday->modify(('Sunday' == $monday->format('l')) ? 'Monday last week' : 'Monday this week');
// Oluşturacağım döngüdeki $lastDay değişkenini bör önceki haftanın cuması olarak ayarlıyorum. Böylece pazartesiye güncelleyebileceğim.
 $lastDay = clone $monday;
 $lastDay = $lastDay ->modify('-3 day');
// 5 haftayı belirten dizimizi oluşturuyoruz.
 $dates = array(
  "week1" => array(),
  "week2" => array(),
  "week3" => array(),
  "week4" => array(),
  "week5" => array()
 );
// Döngümüzü başlatıyoruz. Burada $dates dizimizi foreach içerisine sokuyoruz.
foreach ($dates as $key => $date) {
// $lastDay değişkenini kullanarak haftanın ilk gününü buluyoruz.
 $firstDay = clone $lastDay;
 $firstDay = $firstDay->modify('+3 day');
// Bundan sonra her günü bir artırarak geri kalan 4 günü buluyoruz.
 $secondDay = clone $firstDay;
 $secondDay = $secondDay->modify('+1 day');
 $thirdDay = clone $secondDay;
 $thirdDay = $thirdDay->modify('+1 day');
 $forthDay = clone $thirdDay;
 $forthDay = $forthDay->modify('+1 day');
 $fifthDay = clone $forthDay;
 $fifthDay = $fifthDay->modify('+1 day');
// $lastDay değişkenini 5. gün yani cuma olarak ayarlıyoruz. Bu şekilde döngünün başında pazartesiyi bulabileceğiz.
 $lastDay = clone $fifthDay;
// $date dizisinde ilgili haftaya günleri ekliyorum. Burada ben farklı indexler kullandım. İstediğiniz gibi düzenleyebilirsiniz.
 $dates[$key] = array(
  $firstDay->format('M d D') => $firstDay->format('Y-m-d'),
  $secondDay->format('M d D') => $secondDay->format('Y-m-d'),
  $thirdDay->format('M d D') => $thirdDay->format('Y-m-d'),
  $forthDay->format('M d D') => $forthDay->format('Y-m-d'),
  $fifthDay->format('M d D') => $fifthDay->format('Y-m-d'),
 );
}