uzun süre calisan mysql processleri oldurmek

Sunucunuzda bazı durumlarda, mysql veritabanınızda işlemler yığılmaya başlıyor olabilir.

Bu durum için bir arkadaşımın yazmış olduğu basit bir php scripti mevcut. Dilerseniz işinizi kolaylaştırabilir.

Script, verdiğiniz süreden daha büyük süre değerine sahip mysql processleri yakalayıp, bunları KILL ediyor (öldürüyor).
* kullanıcı adı kısmına root, root şifresi yazan kısma da root şifrenizi yazarak çalıştırabilirsiniz.

 

<?
var_dump(mysql_connect("localhost", "{kullanici_adi}", "{root_sifresi}"));
$result = mysql_query("SHOW FULL PROCESSLIST");
$i=0;
while ($row=mysql_fetch_array($result)) {
  $process_id=$row["Id"];
  if ($row["Time"] > 5000 ) {
    $sql="KILL $process_id";
    $i++;
    mysql_query($sql);
  }
}
echo $i." adet islem sonlandirilmistir";
?>

Fatal error: Attempt to unset static property hatasi

Php class’larında tanımlanan static özellikler, o classtan kaç kere kullanılacaksa kullanılsın, 1 tane bulunurlar. Yani 10 tane deneme sınıfı üretsek bile, public static $test ten sadece 1 tane olacak. Bu noktada, bu class load olurken, bu property ram’deki yerini ayırdığı için, unset etmek konusunda ise, problem yaşanmaktadır.

Mantığa göre bu sınıfa ait bir static özellik herhangi bir yerde unset edilseydi eğer, farklı bir yerden kullanıldığında not set hatası verecekti. Yani olmasını teyid ettiği bir şeyi bulamayacaktı. Bu nedendendir ki aşağıdaki kod,

unset(self::$test);

Fatal error: Attempt to unset static property hatasını vermektedir. (ölümcül hata : static özelliği unset etmeye yönelik girişim). Bu hata aslında sizin bu işlemi yanlış yaptığınız yönündedir.

Tavsiye : İlla böyle bir şeye ihtiyacınız var ise, değişkenin tipine göre boş string, Null veya false atayınız.

isimsiz fonksiyonlar (anonymous functions – closures) (php 5.3 ve sonrasi)

İsimsiz fonksiyonlar php’nin 5.3 ve sonraki sürümlerinde yer alan güzel bir özelliktir.

Nedir isimsiz fonksiyon? 

Bir mantığa veya algoritmaya ihtiyacınız var ancak bunun dünyanızda o kadar da önemli bir yeri yok. Belki sadece kodunuzu düzgün yazmak istiyorsunuz, veya yapacağınız şeyi daha temiz yapmak istiyorsunuz.

Bu noktada, isimsiz fonksiyonların kullanımı tercih edilebilir.

$selam = function($isim){
    printf("Merhaba %s\r\n", $isim);
};//şeklinde tanımlayıp
echo $selam('Emre');//şeklinde kullanabiliriz.

Yani anlayacağımız şekilde söylersek, bir değişkene bir fonksiyon atamış gibi bir şey oluruz.

php 5.4 ten itibaren de bu isimsiz fonksiyonların içinde “$this” kelimesi de kullanılabiliyor oldu. Bir Class içerisindeki bir metodun içinde kullanıldığında, $this->fonksiyon_ismi() diyerek ilgili classtaki fonksiyonu da çalıştırabiliyor artık.

http://www.php.net/manual/en/functions.anonymous.php#106046 linkinde ise ilginç (güzel) bir kullanımı var. Bir göz atmanızı tavsiye ederim. (kullanmanızı tavsiye etmem ama :), php içinde html’e karşıyım. )

aptana studio php kod formatı ayarları

Yazılım geliştirirken kodların düzgün görünmesi de önemlidir tabii ki. IDE’lerin otomatik tamamlama özelliklerinin yanında en çok kullanılan pratikliklerinden biri de kod formatlamak olsa gerek.

Çeşitli tuş kombinasyonlarıyla kod formatlamak mümkün oluyor. Kimisinde ctrl+shift+f, kimisinde alt+shift+f falan filan… Kodu formatlıyor da, bizim istediğimiz gibi mi formatlıyor, bu da önemli bir nokta.

Aptana Studio için default olarak gelen php format ayarları benim hiç hoşuma gitmedi. Özellikle çok boyutlu arrayleri tek satıra çekmesi ve metodların biçimlendirilmesi, felaket 😀

Aptana Studio’yu açtığımızda üstteki menüden Windows > Preferences sekmesine geliyoruz. Buradaki arama kutucuğuna format yazdığınız zaman karşınıza hemen geliyor, Aptana Studio kategorisi altında Formatter ayarı.

Burada yeşil artı tuşuna (+) basıyoruz ve kendimize bir profil oluşturuyoruz. Oluşturduğumuz profile, default olan ayarlar aynen kopyalanıyor. Default olan ayarları değiştirmemize izin vermiyor Aptana, bir profil oluşturmamızın sebebi bu. Ardından Preview kısmından istediğimiz dili seçip, onunla ilgili ayarları yapabiliyoruz.

PHP ayarlarında, New Lines sekmesi altındaki ayarlarda, Insert new line between array creation elements ayarının seçili olmasını şiddetle öneriyorum. Ayrıca Indentation sekmesinde de işinize yarayacak ayarlar mevcut.

Oluşturduğunuz profili export edip, farklı bir bilgisayardaki Aptana Studio’ya import edebilirsiniz.

PHP Web Service – SOAP

Merhaba,

Size PHP ile web service (SOAP) hizmetinden bahsedeceğim. Web service bir haberleşme standardıdır. Standart bir yapı olması nedeniyle projelerinizde kullanmış olduğunuz yazılım dillerinden bağımsız olarak düşünmeniz gerekecektir. Projeler aynı dille yazılmış olmaksızın veri alışverişi sağlayabilirsiniz. Kapsamlı projelerde ihtiyaç olarak doğan veri alışverişini sağlayabileceğiniz güzel bir altyapıyı PHP ile örnekleyerek anlatmaya çalışacağım. Sözü fazla uzatmadan örneklemelerime başlamak istiyorum.

Aşağıdaki iki sayfayı çalışma ortamınızda oluşturmanızı isteyeceğim.

  1. server.php
  2. client.php

Server.php web service bağlantısı açarken, client.php bu hizmetten yararlanarak veri transferini gerçekleştirecektir. Ben local çalışma ortamıma www.project.mil hayali domain ile bağlandığım için örnekte de bu adresi verdim. Siz kendi çalışma ortamınıza göre düzenlemeler yapabilirsiniz.

<?php
class MyWebService{

const STATIC_EXAMPLE_MESSAGE = "hello web service";

public function getMessage(){
return self::STATIC_EXAMPLE_MESSAGE;
}
}

$server = new SoapServer(null,array("uri" => "http://www.project.mil/server.php"));
$server->setClass("MyWebService");
$server->handle();
?>

Yukarıda ki örnekte MyWebService isimli class‘ı web service de kullanılacak olan class olarak atadım. Yani client olarak bağlanan kullanıcılar “public” özelliğe sahip tüm methodları çağırabilirler. Bu arada web service altyapısı için illaki class kullanmak zorunda değilsiniz. Ancak ben class kullanmayı tercih ettim.

Hizmete erişilecek olan adresi uri parametresi ile belirliyoruz ve class ismini atıyoruz.

Bkz : http://php.net/soapserver

Yukarıda ki aşamaları tamamladıysak artık dışarıdan gelen misafirleri karşılayabilir ve veri alışverişi sağlayabiliriz.

<?php
$options = array(
"uri" => "http://www.project.mil",
"location" => "http://www.project.mil/server.php"
);
$client = new SoapClient(null, $options);
$result = $client->getMessage();
echo $result;
?>

Yukarıda ki örnekte az evvel oluşturduğumuz web service hizmetine bağlandık ve getMessage methoduna bağlanarak oradan dönen sonucu ekrana yazdırdık. Kodu çalıştırdığınızda ekrana “hello web service” yazdığını göreceksiniz.

Görüldüğü üzere basit bir web service bağlantısı oluşturmuş olduk. Çeşitli hata ayıklama işlemleri, güvenlik işlemleri v.s. gibi çalışmalarla güçlendirerek projelerimizde ki veri alışverişi ihtiyacını gidermiş olabiliriz. Umarım faydalı olmuştur.