As3 ve Php: AmfPhp ye Giriş

Tarih: Mayıs 4th, 2009 | Yazar: | Kategori: Action Script, Php | Etiketler: , , , , , , , , , , , | 16 Yorum »

Herkese merhaba arkadaşlar. Bugün sizlere oldukça önemli bir konu hakkında yazmak istiyorum. Biliyorsunuz ki As3 tek başına veritabanına bağlantı sağlayamıyor. Zaten en büyük problemlerinden biri de bu. Sırf bu yüzden php kullanıyoruz. Fakat birçok kod, tekrar eden fonksiyonlar boşuna veri transferini yavaşlatıyordu. Sonra Flex teknolojileri çıktı, ardından da Php yi kullanarak daha da pratikleştiren sistemler. İşte AmfPhp de bunlardan biri…

Arkadaşlar AmfPhp sistemleri Flash dan yollanan verileri dizi şeklinde alır ve Php deki sınıf halindeki fonksiyonlarda çalıştırır. Yani tek tek veri yazmaya gerek yoktur. Diyelim ki A3 ile bir blog yaptınız. OOP nerede kullanılmalı yazımdaki gibi hemen islem isimli bir sınıfta yarattınız. İşte AmfPhp veriyi direkt islem isimli sınıftan işliyor. Bu sayede araya başka kodlar girmiyor. Hatta AmfPhp normal veri transferinden kat kat daha hızlı. Ayrıca Php nin sınıf halinde olması da cabası!

Eğer gözleriniz büyüdüyse ve ağzınızda bir kuruluk hissediyorsanız hemen alttan devam edelim;

Öncelikle nasıl kurulur ona bakıcaz. Hemen şu adresten AmfPhp 1.9 Beta yı indiriyoruz.

Sonra içerisindeki amfphp isimli klasörü localhosta ( veya kendi hostunuza ) atıyoruz. Sonra deneme amaçlı olarak http://localhost/amfphp/gateway.php adresini kontrol ediyoruz. Eğer ki;

amfphp and this gateway are installed correctly. You may now connect to this gateway from Flash.

Diye bir girişi varsa herşey yolunda demektir! Değilse eğer klasörü tam attığınıza dikkat edin. Neyse devam edelim. Sonra; Load the service browser isimli linke tıklatıyoruz. Karşımıza bizden birşey isteyen ufak bir panel geliyor. Ona save diyoruz ve veri transferi için yolumuzu açıyoruz. Gördüğünüz gibi sistem paneli oldukça ferah. İşlemlerimizin çıktılarını da oradan alabileceğiz. Neyse bu sayfa açık olarak kalıyor ve şu Php dosyasını AmfPhp klasörü altındaki services isimli klasöre islem ismiyle kaydediyoruz;

<?
class islem {
function islem() {
$db = mysql_connect("localhost","root","");
mysql_select_db("sozluk",$db);
}
public function yap($veri) {
$values = array(
'sozcuk' =>$veri['sozcuk'],
'karsilik' =>$veri['karsilik']
);
$this->ekle('kelimeler',$values);

}
private function ekle($tablo,$veri) {
$sql = "INSERT INTO ".$tablo." (";
foreach($veri as $sutun=>$ekle) {
if($s_sql!="") $s_sql.=",";
$s_sql.=$sutun;
if($e_sql != "") $e_sql.=",";
$e_sql.="'".$ekle."'";
}
$sql.=$s_sql.") values (".$e_sql.")";
mysql_query($sql) or die ("Sorguda Problem Var!");
return true;
}
function al() {
return mysql_query("SELECT sozcuk,karsilik FROM kelimeler");
}
}
?>

Bu dosya bizim veri transferimizde hayati önem taşıyor. Bütün veriler buradan yapılacak. Öncelikle sınıfımızı tanımlıyor ve sınıf ile aynı isime sahip olan veritabanına bağlantı fonksiyonunu yazıyoruz. Sonra ( sözlük scriptimiz ) Flash dan verileri alıp, veritabanına yazdıran asıl fonksiyonu yazıyoruz. Buradan dizi halinde gelen verileri çekiyoruz ve ekle isimli fonksiyonu çalıştırıyoruz. Ekle fonksiyonunda veri tabanına veriler ekleniyor…

Ve ardından al isimli fonksiyon geliyor. Burada ise sozluk ve karsilik isimli sutunlar seçiliyor ve return ediliyor. Return ediyoruz çünkü geri dönen kodları Flash içerisinde anlamlı hale getireceğiz…

Öncelikle Flash ı açıyoruz. Sonra sozcuk ve karsilik isimli iki tane text alanı yaratıyoruz. Yolla isimli butonuda koyduktan sonra frameye şu kodları ekliyoruz;

yolla.addEventListener(MouseEvent.CLICK,veriyolla);
function veriyolla(event:MouseEvent){
var veriler:Object={sozcuk:sozcuk.text,karsilik:karsilik.text}
var baglanti:NetConnection= new NetConnection();
var geri:Responder = new Responder(basarili,sorunlu);
baglanti.connect("http://localhost/amfphp/gateway.php");
baglanti.call("islem.yap",geri,veriler);
}
function basarili(tamam:Object){
trace("İşlem Tamam!");
}
function sorunlu(sorun:Object){
trace("Bağlantı yapılamadı!");
}

Burada yolla isimli butona tıklandığı anda veriyolla isimli fonksiyonu çalıştırıyoruz. Öncelikle yollanacak veriler için bir obje tanımlıyoruz ve sutun->veri şeklinde verileri ekliyoruz. Ardından net bağlantısı tanımlıyoruz ve asıl kodlara geçiyoruz. Geri isimli anahtar ile sistemden geri gelen mesajlar alınıyor. Ardından baglanti isimli bağlantı ile gateway isimli asıl dosyaya bağlantı yapıyoruz ve ilk önce sınıf adımız olan islem ve onun altındaki yap isimli fonksiyona verilerimizi yollayacağımızı söylüyoruz. Geri kalanı ise başarılı ve sorunlu olarak kontrol etmek…

Bu kodlar sayesinde veri tabanına verilerimizi kaydedebiliriz. Peki veri okumak istersek?

var baglanti:NetConnection = new NetConnection();
baglanti.connect("http://localhost/amfphp/gateway.php");
var geri:Responder = new Responder(sonuc, sorun);
function sonuc(sonuclar:Object):void
{
var veriler:Array = sonuclar.serverInfo.initialData;
for(var i:uint=0; i<veriler.length; i++)
{
trace(veriler[i]);
}
}
function sorun(sonuclar:Object):void
{
for(var i in sonuclar)
{
trace(sonuclar[i]);
}
}
baglanti.call("islem.al", geri);

Kodlarını kullanıyoruz. Anlattığım kısımları geçerek asıl yere geliyorum. Geri gelen dizi şeklindeki verileri As3 ün anlayacağı bir diziye atıyoruz ardından yazdırıyoruz. Eğer sorunlu ise diziyi anlamlı hale getirip yazdırıyoruz. Bu arada islem altındaki al isimli fonksiyon çalışıyor…

Şimdi kapatmadığımız veri paneline geri dönüyoruz. Sayfayı yeniliyoruz ve islem.php yi görüyoruz. Altında ise al ve yap var. Ekle ise yok. Çünkü ekle private yani özel olarak tanımlandı… Neyse istersek oradan manuel çalıştırmada yapabiliriz. Mesela al isimli fonksiyonu seçip call dersek altta ufak bir tab menü açılacaktır. Info da veri transfer hızları, results da geri gelen sonuçlar, tree view da bu sonuçların ağaç halini almış düzenli şeklini, record set view da ise datagrid şeklindeki en anlamlı halini görüyoruz. Trace ise Php den gelen mesajlar yer alıyor…

Evet arkadaşlar şimdilik bu kadar. Ben kesinlikle sizlere AmfPhp yi öneriyorum. Ayrıca bir müjdem var. AmfPhp nin görsel dersi de yakında!

Şimdilik herkese iyi günler, iyi çalışmalar…




Benzer Yazılar;

coded by nessus

“As3 ve Php: AmfPhp ye Giriş” yazısında 16 Ahkam var.

  1. 1 ismail şimşek 02:58 on Mayıs 5th, 2009 anında kesmiş:

    Öncelikle bu kadar detaylı bir anlatım için teşekkür ederim. Çok güzel olmuş. Sormak istediğim soru ise islem.php dosyasını kendimiz istediğimiz gibi değiştirebilir ve geliştirebiliriz sanırım? Tabi bu değişime göre gönderilecek ve alınacak verilerin flash içerisinde yazılış şeklinde farklılık olacak mıdır?

    Ve eğer php dosyasını biz yazıyorsak amfPhp tam olarak ne yapıyor? Yada amfPhp için hazırlanmış tam teşekküllü bir php dosyası var mıdır? (Not: Evet biraz üşengecim :)

  2. 2 EeTr 17:38 on Mayıs 5th, 2009 anında kesmiş:

    Merhaba hocam;
    islem.php yi istediğiniz gibi değiştirebilirsiniz. Ben sadece temel olarak ekleme ve okuma işlemleri için bir class oluşturmuştum. AmfPhp nin amacı çok daha hızlı bir şekilde veri transferi yapmak. Swf ve Php arasında sadece nesnel sistemler olunca hız kazanılıyor tabi. Ayrıca işlemleride kolaylaştırıyoruz. Daha düzgün bir yapı elde ediliyor.

    Tam teşekküllü bir dosyanın olduğunu zannetmiyorum malesef :) Sonuçta her sistemin ihticayına göre istekler değişir. Mesela yayımladığım örnek mysql sınıfını kullanabilirsiniz. Bütün yapılacak işlemler sağlanıyor. Ama onun üzerinde de ufak düzenlemeler gerekiyor :)

  3. 3 Muzy42 19:13 on Haziran 2nd, 2009 anında kesmiş:

    kodların içi &quot dolu sanırım hatalı, dosyaları yükleyebilirmisiniz.

  4. 4 ismail şimşek 02:25 on Haziran 11th, 2009 anında kesmiş:

    bir hatırlatma eğer islem.php dosyasını utf-8 olarak yazarsanız amfphp çalıştımıyor :) yada bende öyle oluyor illaki ansi olarak çalışmanız lazım….

  5. 5 EeTr 15:58 on Haziran 11th, 2009 anında kesmiş:

    @Muzy42;

    Buradan indirebilirsin…

    @ismail;
    Aslında onun bir ayarlaması var. Tekrar bulur burada anlatırım…

  6. 6 ismail şimşek 16:58 on Haziran 12th, 2009 anında kesmiş:

    umarım bir an evvel bulursun :)

  7. 7 EeTr 17:01 on Haziran 12th, 2009 anında kesmiş:

    @İsmail;
    Şu anda bulmuş bulunmaktayım. AmfPhp nin ana dizininde ki gateway.php yi aç ve;

    $gateway->setCharsetHandler("utf8_decode", "ISO-8859-1", "ISO-8859-1");

    Bu satırı böyle değiştir;

    $gateway->setCharsetHandler("utf8_decode", "utf-8", "utf-8");

    İyi günler…

  8. 8 ismail şimşek 17:16 on Haziran 12th, 2009 anında kesmiş:

    tam ben yazacaktım siz önce davranmışsınız. teşekkür ederim.

  9. 9 aytek 23:46 on Temmuz 12th, 2009 anında kesmiş:

    merhabalar,

    ders çok iyi, tebrik ederim. ancak bir hatayı düzeltmek isterim.

    “Biliyorsunuz ki As3 tek başına veritabanına bağlantı sağlayamıyor. Zaten en büyük problemlerinden biri de bu. Sırf bu yüzden php kullanıyoruz.”

    demişsiniz. Oysa AS3 tek başına veritabanına bağlanabilir. Bununla ilgili birkaç proje de nette mevcut. Bunun yanında AS3′ün veritabanına bağlanması mümkünken, bunu yapmak güvenli değil. Bu bir problem değil, vertabanının güvenliği için gerekli bir işlemdir.

  10. 10 ömer 22:49 on Aralık 24th, 2009 anında kesmiş:

    load browser dedikten sonra şöyle bir hata geldi..

    (mx.rpc::Fault)#0
    errorID = 0
    faultCode = “Client.Error.DeliveryInDoubt”
    faultDetail = “Channel disconnected before an acknolwedgement was received”
    faultString = “Channel disconnected”
    message = “faultCode:Client.Error.DeliveryInDoubt faultString:’Channel disconnected’ faultDetail:’Channel disconnected before an acknolwedgement was received’”
    name = “Error”
    rootCause = (null

  11. 11 Ertuğrul Erkan 12:27 on Aralık 25th, 2009 anında kesmiş:

    @Ömer;

    Php tarafında bir sorun var sanıyorum. Başka bir dosya ile sınıfını çalıştırıp, hata verip vermediğine bakabilirsin. Ayrıca dosyayı yanlış yere atmış da olabilirsin. Bunları tekrar kontrol edip sonucu paylaşırsan duruma göre birşeyler söyleyebilirim.

    İyi günler.

  12. 12 namık 21:07 on Şubat 10th, 2010 anında kesmiş:

    Selamlar,

    mysql_connect(): Access denied for user ‘root’@'localhost’ (using password: NO)
    Undetermined line in constructor
    AMFPHP_BUILD_ERROR
    C:\AppServ\www\amfphp\services/islem.php
    User Error

    şu hatayı alıyorum. Ben php pek bilmiyorum bunlar ilk denemelerim. Belki çok basit bi hatadır

  13. 13 Kayat 22:28 on Ocak 2nd, 2011 anında kesmiş:

    Merhabalar,
    AmfPhp ile yaptığım proje localhost'ta sorunsuz çalışıyor. Ancak projeyi web server'a yüklediğimde ;

    Error opening URL 'http://www.domainadi.com/amfphp/gateway.php&#039;
    Error #2044: İşlenmemiş NetStatusEvent:. level=error, code=NetConnection.Call.Failed
    at anasayfa_fla::MainTimeline/frame1()

    hatası alıyorum. Bu konudaki çözüm önerilerinizi alabilirmiyim. Şimdiden teşekkür ederim.

  14. 14 gencebay 22:35 on Haziran 19th, 2011 anında kesmiş:

    Kayat' ın berlittiği hata yı bende alıyorum ve durum aynı acaba ne yapmalıyız.

  15. 15 Anonim 22:25 on Ağustos 24th, 2011 anında kesmiş:

    [...] [...]

  16. 16 ismail 20:33 on Eylül 14th, 2011 anında kesmiş:

    connection için gerekli olan url yi hatalı veriyorsunuz bütük ihtimalle. kontrol edebilir misiniz?
    eğer doğru olduğundan eminseniz şunu deneyebilirsiniz http://blog.ismailsimsek.com/amfphp/amfphp-flash-…


Ahkam Kesme Aparatı

  • *