PHP CURL

Önemli verilerinizi PHP ile güvenli bir bağlantı üzerinden göndermek ve almak istediğinizde CURL ile talepte bulunurken HTTP yerine HTTPS ile istek yaparız. Ancak HTTPS sayfaya istek yaptığımızda SSL sertifikasının o domain adresine(CN) ait olması için doğrulamasını CURL‘a bildirmemiz gerekir, bunun için CURLOPT_* constantlarını belirtirken;
CURLOPT_SSL_VERIFYHOST = 2
…olacak şekilde curl’u oluşturursak, verileri çekmek istediğimiz HTTPS li adresin SSL Sertifikasını doğrulamak isteyecektir. Eğer o domain adresine ait geçerli bir SSL sertifikasına sahip değil ise, bağlanma işlemi başarısız olacaktır.
Eğer bu şekilde SSL doğrulamasını istemeden bağlantı kurarsanız, HTTPS yerine HTTP den yanıt alacaksınız. Paketler SSL güvenliğinden çıkacak ve şifresiz olarak iletişim kuracaktır.
Mustafa ÖZGÜR
www.panilux.com

PHP SOCKET

php de socket işleriyle uğraşıyor ve daemon/servis hazırlıyorsanız dikkat etmeniz gereken bir çok şeyden ilki, socket_select özelliğini kullanırken süresiz işlem yaptırmamanızdır. 500ms bile olsa süre vermelisiniz. çok aşırı hızlı çalışır ve cpu load 100% e yakın olur.

while (($events = @socket_select($read_set, $write_set, $exception_set, 0, 500000)) !== false)

 

Mustafa ÖZGÜR

www.panilux.com

PHP pcntl_signal()

php de bazen CLI modda çalışırsınız ve php yazılımınız CTRL + C veya kill gibi sonlandırma komutlarına maruz kalır, bu tarz proccess SIGNAL lerini yakalamak için şöyle bir function a ve pcntl_signal() tanımlamalarını kullanabilirsiniz

….
function signal_handler($signal)
{
echo $signal . PHP_EOL;
write_log(‘panilux agent terminated!’);
unlink(‘/var/run/panilux_agent.pid’);
exit($signal);
}

pcntl_signal(SIGTERM, ‘signal_handler’);
pcntl_signal(SIGINT, ‘signal_handler’);
pcntl_signal(SIGUSR1, ‘signal_handler’);
pcntl_signal(SIGUSR2, ‘signal_handler’);
pcntl_signal(SIGSTKFLT, ‘signal_handler’);
pcntl_signal(SIGILL, ‘signal_handler’);
pcntl_signal(SIGHUP, ‘signal_handler’);
pcntl_signal(SIGQUIT, ‘signal_handler’);
pcntl_signal(SIGPWR, ‘signal_handler’);
pcntl_signal(SIGABRT, ‘signal_handler’);
….

 

Mustafa ÖZGÜR

www.panilux.com

 

PHP ile servis yazıyorsanız…

PHP ile servis yazıyorsanız, linux üzerinde servisinize “service SERVIS_ISMI reload” ya da “kill -1 PID” ile SIGHUP gönderip servisinizde bunu yakalamak için;

pcntl_signal(SIGHUP, ‘service_handler_reload’);

… şeklinde yazdığınız sinyal yakalma komutunun çalışması için;

declare(tick = 1);

… kodunu pcntl_signal() fonksiyonlarınızdan önce kullanmalısınız, aksi halde PHP bu durumu görmezden gelecek ve servisiniz kendini sonlandıracaktır.

 

Mustafa ÖZGÜR

www.panilux.com

PHP ile Data Transferi

PHP ile Farklı Sunucular Arasında Data Transferi,

Bazen bir sunucu üzerindeki databaseden , farklı bir sunucu üzerindeki
database’e data taşımanız gekebilir. Mesela xxx.xxx.xxx.xxx ip’li
sunucu üstündeki customer tablosundaki kayıtları, yyy.yyy.yyy.yyy
sunucusu üstündeki customer tablosuna insert etmemiz gerekiyor.
Üstelik bu işi hergün yapmamız gerekiyor. Düşünün, tam bir vakit kaybı.
Hergün backup al. Bu backup’ı sunucular arasında elle transfer et.
(.zip’le ,.rar’la vs vs) Sonra bu backup’ı yeni sunucu üzerine restore et.
Bi dünya iş. İşte php ile bu işi hem Çok kısa bir süre iÇinde hem de
otomatik olarak hergün kendiliğinden yapılmasını sağlayabilirsiniz.

şimdi bir örnek uygulama yapalım:

// x Serverımıza connection yapıyoruz.
$xServer=mysql_connect(‘xxx.xxx.xxx.xxx’,’user’,’password’);
mysql_select_db(sales);
// y Serverımıza connection yapıyoruz.
$yServer=mysql_connect(‘yyy.yyy.yyy.yyy’,’user’,’password’);
mysql_select_db(sales);

// x serverımızdan dataları Çekiyoruz.

$sql=”select id,adi,soyadi,tutar from customer”;

// mysql_query() fonksiyonu ile sql’li Çalıştırıp sonucu $result değişkenine atıyoruz.

$result=mysql_query($sql,$xServer);
// Sql sonucunda gelecek her satır iÇin dönecek while döngüsü kuruyoruz.
// Ve gelen her satır iÇin dataları teker teker değişkenlere atıyoruz.

while($row=mysql_fetch_assoc($result)){

$customer_id=$row[‘id’];
$customer_adi=$row[‘adi’];
$customer_soyadi=$row[‘soyadi’];
$customer_tutar=$row[‘tutar’];

// Ve son olarakta yServer üstündeki customer tablosuna xServer üstünden
//Çektiğimiz datayı insert ediyoruz.

$sql_insert=”insert into customer(id,msisdn,operator_id)
values (“.$customer_id.”,”.$customer_adi.”,”.$customer_soyadi.”,”.$customer_tutar.”)”;

mysql_query($sql_insert,$yServer);

}
?>

Daha sonra dosyayı dataTasi.php olarak kaydedin ve konsoldan
php -f dataTasi.php komutunu verirseniz php scriptiniz Çalışmış
olacak. Bu işi biz hergün belli bir saatte otomatik olarak yapsın
istiyorsanız, bunu serverınız windows ise; zamanlanmış göreve
atmalısınız. Eğer serverınız linux ise; cron’a atmanız gerecek.

Bir sonraki makalelerde görüşmek dileğiyle,

Tayfur BÖLER
Database Administrator

PHP ile Dinamik Sorgular

PHP ile Dinamik Sorgular,

Bazen sql ile herşeyi yapamayabiliriz. Daha seri ve
spesifik bir şekilde sorguları gönderip sonuclarına göre
belli tablolalara insert ,delete veya update yaptırabiliriz.
Bunu bir örnekle anlatmaya Çalışayım.

Ürnek: Bu php scriptinde amacımız yüz binlerce satırlık satislar tablomuzdan
bütün satışları Çekip, satis_detay tablosundan her satısın tutar bilgisini alıp,
satis_toplam tablosunda toplam_tutar kolonuna update etmek.

// Burada database mize connect yapıyoruz.

$satisConnect=mysql_connect(“localhost”, “root”,”123456â?²);
mysql_select_db(“satis”,$satisConnect);

// Burada satislar tablomuzdan satıslarımızı Çekiyoruz.

$sql=“select musteri_kodu,tarih,urun_kodu from satis.satislar
where tarih>=“2009-02-01â?²”;

// mysql_query() fonksiyonuzla query mizi Çalıştırıp sonucu $result değişkenine
atıyoruz.

$result=mysql_query($sql,$satisConnect);

// Burada select sonucunda gelecek her satır iÇin dönecek while döngüsü
kuruyoruz. Ve gelen her satır iÇin gelen datayı değişkenlere atıyoruz.

while($row=mysql_fetch_assoc($result)){
$tarih=$row[‘tarih’];
$musteri_kodu=$row[‘musteri_kodu’];
$urun_kodu=$row[‘urun_kodu’];

// Burada ise 2.query mizi gönderiyoruz fakat where condition kısmında
1.queryden gelen sonucları kısıt olarak veriyoruz.

$sql2=“select
musteri_kodu,
satıs_tarih,
urun_kodu,
urun_detay,
toplam_tutar
from satis.satis_detay
where
museri_kodu=“.$musteri_kodu.” and
urun_kodu=“.$urun_kodu.” and
tarih=““.$tarih.””“;

// Burada 2.query”, mysql_query() fonksiyonu ile Çalıştırıp, sonucu
$result2 değişkenine atıyoruz.

$result2=mysql_query($sql2,$satisConnect);

// Burada 2.query nin sonucu, her satır iÇin alacak 2.while döngümüzü kuruyoruz ve
dönen değerleri yeni değişkenlerimize atıyoruz.

while($row2=mysql_fetch_assoc($result2)){
$musteri_kodu2=$row2[‘musteri_kodu’];
$tarih2=$row2[‘tarih’];
$urun_kodu2=$row2[‘urun_kodu’];
$urun_detay=$row2[‘urun_detay’];
$toplam_tutar=$row2[‘toplam_tutar’];

// Burada satis_toplam tablomuza update yapacak 2.query mizi gönderiyoruz. Where
condition kısmında 2.Qery mizden gelen değerleri kısıt olarak veriyoruz.

$sql3=“update satis.satis_toplam
set toplam_tutar=$toplam_tutar
where urun_kodu=“.$urun_kodu2 .” and
musteri_kodu=“.$musteri_kodu2 .” and
tarih=““.$tarih2.””“;

// Burada ise update işlemi yapılıyor.

mysql_query($sql3,$satisConnect) or die(“e: “.mysql_error());

}
}
?>

Bu scripti satisHesapla.php ismiyle kaydettikten sonra konsoldan
php -f satisHesapla.php komut satırını girerek Çalıştırabilirsiniz.

Böylece Çok pratik bir şekilde ,sql ile saatlerimizi alacak bir işlemi
Çok kısa bir süre iÇinde halletmiş oluyoruz.

Bir sonraki makalelerde görüşmek dileğiyle,

Tayfur BÖLER
Database Administrator

PHP MYSQL

Merhabalar,

Üok yakında Php ile dinamik sql sorguları hakkında makalelere bu kategori
altından erişebileceksiniz.

Tayfur BÖLER
Database Administrator