As3 ve Php: AmfPhp ye Giriş
Tarih: Mayıs 4th, 2009 | Yazar: Ertuğrul Erkan | Kategori: Action Script, Php | Etiketler: amfphp, amfphp dersleri, amfphp kullanma, amfphp yapmak, as3, as3 php, as3 ve php, flash, flash remoting, php, remoting, veri transferi | 12 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;
- Amfphp ve Güvenlik
- [ As3 ] Start - Stop Drag İşlemi
- AS3 - Adobe Air İle Basit Bir Paint Yapalım
- [ As ] Flash İle Mail Atma
- Muttalip Tulgar ile Action Script Üzerine Röportaj...

Ö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
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
kodların içi " dolu sanırım hatalı, dosyaları yükleyebilirmisiniz.
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….
@Muzy42;
Buradan indirebilirsin…
@ismail;
Aslında onun bir ayarlaması var. Tekrar bulur burada anlatırım…
umarım bir an evvel bulursun
@İ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…
tam ben yazacaktım siz önce davranmışsınız. teşekkür ederim.
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.
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
@Ö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.
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