- notice 스킨변경~
[php]검색결과, 6건
인증 방식은 비슷하긴 하지만, access_token요청하는 부분 같은 게 없어서 callbackurl로 사용자api키를 받게 되는군요. 보안상 안좋을 것 같은...-_-
그리고, 언제까지 스프링노트에 표시를 할 것인지가 의문입니다.
트위터가 OpenAPI를 참 잘해놔서 그런지 굉장히 많은 서비스들이 튀어나오고 있습니다. 이점은 미투데이에서도 얼른 OpenAPI에 힘을 쓰시는 게...^^
api페이지입니다.
http://codian.springnote.com/pages/86001
요청절차는 이러합니다. 물론 여기가면 더 자세히 나와있습니다ㅠㅠ(웹인증기반 기준!)
http://codian.springnote.com/pages/1645274
1) api키를 발급받습니다.
2) 해당 api키로 인증 토큰을 얻습니다.
3) 그 토큰으로 인증url로 이동시킵니다.
4)사용자가 로그인 하면 지정한 callback페이지로 사용자키를 던져줍니다.
5) 사용자키로 글을 쓰면 됩니다.
1. 일단 API키 발급
http://me2day.net/me2/app/key/list
여기서 새 애플리케이션 키 발급한다음에 등록합니다. 그리고 등록된 키에서 설정을 누르면 웹기반인지 데스크탑기반인지 선택하는데, 웹기반이면 callback주소를 입력받습니다. 이 callback주소는 인증 후에 사용자키를 받는 url이 됩니다.
2. 해당api키로 인증토큰 얻기
config.php파일
<?php
define('A_KEY', '발급받은 api키');
?>index.php
<?php
require_once("config.php");
$result = json_decode(file_get_contents("http://me2day.net/api/get_auth_url.json?akey=" . A_KEY));
print_r($result);
?>
<!doctype html>
<html>
<head>
<meta charset="EUC-KR">
<title>미투데이 인증 후 글쓰기</title>
</head>
<body>
<br />
<a href="<?php echo $result->url ?>">미투데이 인증하기</a>
</body>
</html>php에서 http://me2day.net/api/get_auth_url.json를 요청해서 token을 받습니다. 그러면 인증url이 같이 떨어집니다. 그 url로 이동하게 되면 아래와같이 로그인하는 화면이 나옵니다.
3. callback url에서 데이터받고 글쓰기 폼생성
callback.php
<?php
require_once("config.php");
$token = $_GET["token"];
$user_id = $_GET["user_id"];
$user_key = $_GET["user_key"];
$result = $_GET["result"];
// 세션저장
session_start();
$_SESSION["user_id"] = $user_id;
$_SESSION["user_key"] = $user_key;
// 인증이 확실한지 확인
$authKey = "12345678" . md5("12345678" . $user_key);
$result = file_get_contents("http://me2day.net/api/noop?uid={$user_id}&ukey={$authKey}&akey=" . A_KEY);
?>
<!doctype html>
<html>
<head>
<meta charset="EUC-KR">
<title>미투데이 인증 콜백</title>
<script type="text/javascript" src="/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#btnPost").click(function(){
var body = $("#inputPost").val();
if (body.length < 1){
alert("글입력해요!");
return;
}
$.getJSON("post.php?callback=?", {body:body}, function(data){
alert("글쓰기 성공 = " + data.result);
});
});
});
</script>
</head>
<body>
<?php echo $result ?><br/>
<input type="text" id="inputPost" name="inputPost" /><br />
<input type="button" id="btnPost" name="btnPost" value="글쓰기"/>
</body>
</html>보면 user_id랑 user_key를 세션에 저장합니다. 만약 자신의 사이트에서 미투데이인증과 통합을 원한다면 api키를 데이터베이스같은 영속적인 것에 저장하고 쓰는 것이 좋습니다. 그럼 따로 인증같은 것을 하지 않아도, 자신의 사이트만 인증을 해도 글을 쓸 수 있으니까요^^
나중에 api_key값이 바뀐다고 해도, noopapi를 호출해서 인증이 정확한지 확인 후 정확하지 않으면 다시 인증받으면 되니까요^^
user_id랑 user_key만 있으면 이제 글을 쓸 수 있으므로, http://me2day.net/api/noop를 호출해서 유효한지 확인을 합니다. 이제부터 인증받은 api들은 uid와 ukey와 akey를 같이 파라메터에 붙여서 호출해야합니다.
uid는 사용자 아이디, ukey는 임의8자리숫자 + md5(임의8자리숫자 + 사용자키), akey는 api키를 넣으면 됨!
4. 글쓰기
post.php
<?php
require_once("config.php");
$body = $_GET["body"];
$callback = $_GET["callback"];
session_start();
$user_id = $_SESSION["user_id"];
$user_key = $_SESSION["user_key"];
// 인증이 확실한지 확인
$authKey = "12345678" . md5("12345678" . $user_key);
$result = file_get_contents("http://me2day.net/api/create_post/{$user_id}.json?uid={$user_id}&ukey={$authKey}&akey=" . A_KEY . "&post[body]={$body}");
header("Content-type: application/json");
echo "{$callback}({'result':'{$result}'})";
?>그냥 api문서대로 호출하면 됨!
테스트 url~
mudchobo.tomeii.com/test/me2daytest/
나중에 php용 라이브러리를 만들어봐야겠다...
-
신최고
글 잘 보았습니다. 헌데 궁금한 점이 있습니다.
미투데이 사용자 인증을 통해 글쓰기?를 처리하는 이유가 있나요?
이와 연동하여 사용햇을 경우, 무슨 장점이 있는지 전혀 이해가 가질 않네요;; 휴;;-
머드초보
안녕하세요~
연동을 하게 되면 자신의 사이트에 미투데이글쓰기를 녹일 수 있지요.
매쉬업이라고 하는데, 자기가 맛집 사이트를 만들었는데, 거기 댓글을 미투데이로 전송하고 싶으면 오픈api를 이용해서 연동해서 쓸 수 있죠^^
-
트위터 공식api홈페이지 - http://dev.twitter.com/
OAuth라는 게 2년전에 삽질했던 것이 기억나네요.
트위터도 이 방식으로 인증을 하게 되는데요. 간단하게 동작원리를 설명하면......
1. 연동할 어플리케이션을 등록합니다.
2. 등록하게 되면 Consumer key와 Consumer secret을 발급받습니다.
3. 명시된 Request Token url로 이 키를 이용해 요청하게 되면 인증 url로 가서 이 어플에서 계정접근을 허용할 것인지 묻습니다.
4. 그리고, 허용하게 된다면 Access Token url로 이동해 Access Token을 발급 받습니다.
5. 이 받게 된 AccessToken을 이용해서 해당 어플리케이션은 글쓰고, 정보를 불러올 수 있게 됩니다.
이런 일련의 과정이 있지만, LIbrary가 있으면, 이딴거 몰라도 됩니다-_- 라이브러리가 다 알아서 하니까-_-
일단 앱을 등록합니다.
http://dev.twitter.com/apps/new
application type은 browser로 하고, callback url은 access_token까지 다 받은 다음에 우리 웹사이트로 돌아오기 위한 콜백url을 지정하는 것입니다.
등록을 한 다음에, 해당 애플리케이션의 detail을 보게 되면 consumer key랑 consumer secret이 있습니다.
그리고 라이브러리를 받습니다.
http://github.com/abraham/twitteroauth/downloads
그리고 파일들을 통째로 서버에 올립니다.
그리고, config.php파일을 수정합니다.
consmuer_key랑 consumer_secret을 위에서 등록한 앱의 키값을 등록!
callback은 인증을 하고 accesstoken을 얻은 뒤, 우리 앱으로 돌아올 때 callback url을 지정합니다. 그대로 올렸다면 폴더에 callback.php가 있기 때문에 http://localhost/callback.php가 됨!
그리고, 이제 localhost/index.php를 열고, Sign in with Twitter 클릭하면...
소스를 보게 되면 callback.php에서 AccessToken을 요청해서 받아오게 되는데, AccessToken과 AccessTokenSecret값만 있으면 글을 쓰거나 정보를 가져올 수 있게 됩니다.
이것을 자신의 사이트에 적용을 하게 된다면 db에다가 저장해놓고 쓰게 된다면, 우리사이트의 인증만으로도 트위터에 글을 쓸 수 있게 됩니다.
인증을 취소할 경우를 대비해서 account/verify_credentials api를 요청해 인증이 살아있는지 확인을 해야합니다.
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);이렇게 connection객체만 가지고 있으면
$connection->post('statuses/update', array('status' => date(DATE_RFC822)));이런 형태로 api를 호출해서 데이터를 가져올 수 있습니다.
http://www.netbeans.org/community/releases/67/
5.5부터 저는 써왔는데요. 버전업을 할 때 마다 처음시작 로딩 시 뜨는 이미지가 매번 바뀝니다. 더욱 화려해집니다. 나중에 10버전 나오면 완전 다빈치가 그린 그림 나올듯-_-

근데, 완벽한 한글이 아닙니다. 넷빈카페에서 시작한 것으로 알고 있는데, 어찌된 것인지 모르겠습니다. 어쨌든 한글판은 반쪽자리 한글판입니다.
약간(?) 덜 된 한글화-_-
1. Kenai와 연동
Kenai은 저번에 포스팅에 올린 오픈소스저장소 호스팅입니다. 이것과 연동할 수 있는 기능이 있습니다.
http://mudchobo.tomeii.com/tt/423
2. Maven
메이븐은 제가 잘 몰라서 모르겠는데, 예전에 얼핏듣기로는 java에서 프로젝트관리를 하면서 필요한 lib나 그런것을 손쉽게 업데이트를 해주고, 손쉽게 서버에 배포까지 해주는 그런 것이라고 하더군요. ANT보다 향상된 뭐 그런건가봐요. 암튼, 그것과 연동지원을 하는 듯
3. php
제일 맘에 드는 기능입니다. php툴을 찾고 있었는데, aptana보단 왠지 넷빈즈가 더 끌려요-_- 코드하이라이트는 저번버전부터 제공했었고, 이번엔 SQL문도 코드하이라이트를 지원을 합니다. 강력해요!
그 외에는 다 제공했었는데, 기능향상이 좀 있었군요. 사이트가서 직접 확인해보시길 ㅠㅠ
PS. 근데, JavaFX는 왜 빠졌을까요....뭔가 마이그레이션 하다가 잘 안된 것 같음 ㄷㄷ JavaFX를 하려면 그 이전버전인 6.5.1을 받아야합니다. 6.7은 안됩니다.
[Flex] Php와 쉽게 연동할 수 있는 Flash Builder4 Beta를 이용한 Php+Flex 간단방명록만들기
Posted in 플렉스(Flex) // Posted at 2009/06/25 21:14예전에 포스팅한 Zend Amf사용후기- http://mudchobo.tomeii.com/tt/398
Zend Amf가 이번에 출시된 Flash Builder4 Beta에서 기능으로 포함되어있습니다. 사용하기도 더 편해졌구요. 설정 같은 것은 전혀 안해줘도 Flash Builder4가 알아서 다하네요.
우선 Flash Builder4 Beta를 설치해야합니다.(adobe.com 회원가입 후 받을 수 있음!)
New Flex Project -> Project Name은 FlexGuestBook, Application type은 Web, Server technology는 PHP!
Next하면 서버 셋팅을 해야하는데요. 우선 Apache와 Mysql깔려있다는 가정하에 진행!-_-
Server location에서 Web root는 htdocs위치, Root URL은 http://localhost.
Output folder는 냅둬도 돼요^^ 바로 Finish!
htdocs/FlexGuestBook-debug생기면 성공!
아...디비부터 만들어야겠군요.
DROP TABLE IF EXISTS `mudchobo`.`guestbook`;
CREATE TABLE `mudchobo`.`guestbook` (
`idx` int(10) unsigned NOT NULL AUTO_INCREMENT,
`author` varchar(45) NOT NULL,
`content` text NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`idx`)
);그럼 PHP코딩해봅시다.
저같은 경우 NetBeans를 사용해서 하는데, 그게 정신건강에 좋아요-_- PHP는 NetBeans와 함께-_-
아까Web root에서 FlexGuestBook폴더를 만듭니다.
PhpClass파일을 하나 만듭니다.
GuestBookService.php
<?php
class GuestBookService {
private $connection;
private function connect()
{
$this->connection = mysqli_connect("localhost", "root", "mudchobo", "mudchobo")
or die(mysqli_connect_error());
}
public function getList()
{
$this->connect();
$sql = "SELECT * FROM guestbook order by idx desc limit 0, 10";
$result = mysqli_query($this->connection, $sql)
or die("Query failed: " . mysqli_error($this->connection));
$rows = array();
while($row = mysqli_fetch_object($result))
{
$rows[] = $row;
}
mysqli_free_result($result);
mysqli_close($this->connection);
return $rows;
}
public function insert($author, $content)
{
$this->connect();
$sql = "INSERT INTO guestbook (idx, author, content, date) VALUES (null, '" .
$author . "', '" . $content . "', now())";
$result = mysqli_query($this->connection, $sql)
or die("Query failed: " . mysqli_error($this->connection));
mysqli_close($this->connection);
}
}
?>클래스에 초간단 insert함수와 getList()함수가 있어요. 여기서 잠깐! NetBeans6.7의 새로운 기능-_-
쿼리문의 코드힌트가 가능해요!!! idx, author, content, date가 다보여요. guestbook 테이블명도 보이는군요.

Flash Builder설명하다 튀어나온 NetBeans...-_-
FlashBuilder에서 하단에 Data/Services가 있는데요. Connect Data/Service를 클릭하면 PHP가 있는데, 클릭하고, ServiceName은 GuestBookService로 하고, Php Location은 아까 작성한 GuestBookService.php를 선택합니다.
이 과정에서 Zend Amf가 설치가 안되어있으면 설치할꺼냐고 물어봅니다. 설치해야합니다^^
설치할 때 htdocs/ZendFramework폴더에 자동으로 설치됩니다.
Finish! 그려면 services.guestbookservice패키지에 뭔가 생겼을 겁니다.
그럼 getList와 insert가 보이는데요. 리턴타입을 설정해야해서 getList에 오른쪽버튼 누르면, Configure Return Type이 있는데, Create a new custom data type에서 GuestBook을 입력하고, Finish를 하면 모든 타입이 String으로 된 Bean같은 것을 만듭니다-_-(Bean마다 타입은 지정이 안되는데, 왜그런지 모르겠음 ㅠ)
insert는 기존에 있는 타입에서 void로 고르고!^^
그럼 이제 진짜 Flex로 와서 Design모드로 바꾸고, DataGrid를 넣어봅시다.

왜 한글로 나오지...한글화가 되다 말았네-_-

예전에는 Php로 Service랑 설정파일 작성하고 그랬는데, 그럴필요가 없어요. 알아서 다 만들어주거든요.
Insert하고 getList하는 것도 다 추가하면 아래와 같은 코드를 완성할 수 있어요.
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768" xmlns:guestbookservice="services.guestbookservice.*">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.controls.Alert;
protected function dataGrid_creationCompleteHandler(event:FlexEvent):void
{
getListResult.token = guestBookService.getList();
}
protected function btnWrite_clickHandler(event:MouseEvent):void
{
if (inputAuthor.text.length < 1)
{
Alert.show("글쓴이를 입력하세요");
return;
}
if (taContent.text.length < 1)
{
Alert.show("내용을 입력하세요");
return;
}
guestBookService.insert(inputAuthor.text, taContent.text);
inputAuthor.text = "";
taContent.text = "";
getListResult.token = guestBookService.getList();
}
]]>
</fx:Script>
<fx:Declarations>
<s:CallResponder id="getListResult"/>
<guestbookservice:GuestBookService id="guestBookService" destination="GuestBookService" endpoint="http://localhost/PhpFlexGuestBook/gateway.php" fault="Alert.show(event.fault.faultString)" showBusyCursor="true" source="GuestBookService"/>
</fx:Declarations>
<mx:DataGrid x="72" y="21" width="489" height="307" id="dataGrid" creationComplete="dataGrid_creationCompleteHandler(event)" dataProvider="{getListResult.lastResult}">
<mx:columns>
<mx:DataGridColumn headerText="content" dataField="content" showDataTips="true" dataTipField="content"/>
<mx:DataGridColumn headerText="author" dataField="author" showDataTips="true" dataTipField="author"/>
<mx:DataGridColumn headerText="idx" dataField="idx"/>
<mx:DataGridColumn headerText="date" dataField="date"/>
</mx:columns>
</mx:DataGrid>
<mx:Label x="70" y="370" text="내용 :"/>
<s:TextArea id="taContent" x="111" y="369" width="447"/>
<s:Button id="btnWrite" x="279" y="524" label="글쓰기" click="btnWrite_clickHandler(event)"/>
<mx:Label x="59" y="344" text="글쓴이 :"/>
<s:TextInput id="inputAuthor" x="112" y="343"/>
</s:Application>
참고자료 : http://sujitreddyg.wordpress.com/2009/06/01/building-flex-application-for-a-php-class-using-flash-builder-4/
-
플렉스시작
플렉스로 오라클을 연동할려고하는데...보통 보면 Mysql이랑 연동하는 예제뿐인데...
오라클이랑 연동하는 예제 하나만 만들어주시면..안될까요?
초보라서 응용이 잘안돼네요..ㅠㅠ-
머드초보
안녕하세요!
정확히 말하면 플렉스와 Mysql이 연동된 것이 아니라 php와 mysql이 연동이 된 것 입니다.
php에서 oracle을 사용하는 방법을 찾으시면 될 듯합니다^^
저도 안해봐서 잘 모르겠네요 ㅠ
구글에서 php oracle쳐보시면 뭔가 나올 겁니다 ㅠㅠ
-
-
자바초보
플렉스로 오라클을 연동할려고하는데...보통 보면 Mysql이랑 연동하는 예제뿐인데...
오라클이랑 연동하는 예제 하나만 만들어주시면..안될까요?
초보라서 응용이 잘안돼네요..ㅠㅠ -
EHXM
안녕하세요. 글 잘 읽어보았습니다.
위 처럼 작업을하고 이제 서버에 올려서 사용할때는
BlazeDS 가 서버에 필요한 건 가요?
아니면 Flash에서 구동이 되는 거라서 다른 서버 작업은 필요하지 않은 건가요?-
머드초보
안녕하세요~
BlazeDS는 자바용이고, zenphp가 그 역할을 대신하는 것입니다.
php가 서버단 언어입니다. php로 작업하시면 됩니다^^
-
-
무니
안녕하세요..^^
올려주시는 글 너무 잘 보고 있습니다..^^
제가 공부중인 상태라서요..염치 불구하고 질문 드립니다..(질문을 어따가 하는지 모르겠어서..ㅎㅎ)
Messaging 서비스 를 이용해서 간단한 air 작업을 하고 싶었는데요..
처음에는 BlazeDS 를 사용 하려고 했는데..
제가 원래 php를 주로 해서요.. zend Amf 를 사용하려구요..
그런데 zend Amf 예제중에 Messaging 서비스 관련 된게 없는거 같아서요..
BlazeDS에서 사용할수 있는 기능을 zend Amf에서 모두 사용 가능한건가요??
Messaging 서비스 (서버에 접속한 여러 클라이언트간에 실시간(real-time)으로 메세지를 전달해 주는 서비스)가 zend Amf에서도 지원이 되는지 성능은 같은지 궁금해서요..ㅎㅎ
시간 되시면 답변 부탁 드립니다..ㅜㅜ-
머드초보
안녕하세요~
저도 그냥 remoteobject만 호출하는 것만 해봐서-_-
Messaging서비스에 관한 자료가 있는지 홈페이지에 가보니
없는 것 같은데-_-
저도 되는지 안되는지 정확하게 모르겠네요 ㅠㅠ
-
암튼, BlazeDS를 하셨다면 그리 어렵지 않군요.
이번에도 간단하게 소녀시대예제를 통해...접근해봅시다-_-;
간단히 데이터를 불러오고, 저장도 해보는 그런 애플리케이션을 만들어봅시다.
우선 Eclipse에서 php가 가능하도록 해야하는데요. 뭐 그냥 editplus에서 해도 상관없습니다. Zend홈페이지에 가면 자기네들 IDE깔라고 합니다-_-; Zend Studio라는 게 있네요. 뭐 php단은 netbeans를 이용해서 개발하셔도 되고, 이클립스에 있는 PDT를 추가하셔서 해도 상관없어요~ ^^ 전 NetBeans를 선호합니다. 좋아요!
DB입니다.
DROP TABLE IF EXISTS `sosi`.`sosi`;
CREATE TABLE `sosi`.`sosi` (
`idx` int(10) unsigned NOT NULL AUTO_INCREMENT,
`sosiname` varchar(45) NOT NULL,
`height` int(10) unsigned NOT NULL,
`blood` varchar(45) NOT NULL,
PRIMARY KEY (`idx`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
INSERT INTO `sosi` (`idx`,`sosiname`,`height`,`blood`) VALUES
(1,'윤아',166,'B'),
(2,'수영',170,'O'),
(3,'효연',160,'AB'),
(4,'유리',167,'AB'),
(5,'태연',162,'O'),
(6,'제시카',163,'B'),
(7,'티파니',162,'O'),
(8,'써니',158,'B'),
(9,'서현',168,'A');우선 Flex Project를 만듭니다.
여기서 Application server type을 php로 하세요~ php로 하게 되면 설정된 폴더로 swf를 바로 위치시킬 수 있어요!
Project name은 ZendAmfTest -> Web root는 아파치가 돌아가는 폴더를 지정하면 됩니다.
저는 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs여기군요.
Root URL은 http://localhost/ Finish때려주면 ZendAmfTest-debug폴더에 swf가 생기죠.
요 아래 주소에서 ZendAMF를 받을 수 있습니다.
http://framework.zend.com/download/amf
받은 다음에 압축을 풀면 library폴더 안에 Zend라는 폴더가 있는데 통채로 복사해서 src폴더 아래에 놓습니다.
그리고 php파일을 하나 만드세요. ValueObject입니다. Java에서 bean같은..-_-;
SosiVo.php
<?php
class SosiVo {
public $idx;
public $sosiname;
public $height;
public $blood;
}
?>이제 서비스를 하나 만들어봅시다. SosiService입니다.
SosiService.php
<?php
require_once 'SosiVo.php';
//conection info
define("DATABASE_SERVER", "localhost");
define("DATABASE_USERNAME", "root");
define("DATABASE_PASSWORD", "mudchobo");
define("DATABASE_NAME", "sosi");
class SosiService {
public function getData() {
$mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME,
DATABASE_PASSWORD);
mysql_select_db(DATABASE_NAME);
$query = "SELECT idx, sosiname, height, blood FROM sosi";
$result = mysql_query($query);
$ret = array();
while ($row = mysql_fetch_object($result)) {
$tmp = new SosiVo();
$tmp->idx = $row->idx;
$tmp->sosiname = $row->sosiname;
$tmp->height = $row->height;
$tmp->blood = $row->blood;
$ret[] = $tmp;
}
mysql_free_result($result);
return $ret;
}
}
?>php의 array는 ActionScript3의 array와 호환됩니다.
서비스를 만들었으니 EndPoint페이지를 만들어줘야합니다.
amf.php
<?php
require_once 'Zend/Amf/Server.php';
require_once 'SosiService.php';
$server = new Zend_Amf_Server();
$server->setClass("SosiService");
$server->setClassMap("SosiVo", "SosiVo");
echo($server -> handle());
?>이제 이것을 연결시켜줄 service-config.xml파일을 만들어야합니다.
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service id="amfphp-flashremoting-service"
class="flex.messaging.services.RemotingService"
messageTypes="flex.messaging.messages.RemotingMessage">
<default-channels>
<channel ref="my-zend"/>
</default-channels>
<destination id="zend">
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="my-zend"
class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://localhost/ZendAmfTest-debug/amf.php"
class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>우선 default로 my-zend라는 채널을 잡았는데, my-zend는 endpoint uri가 ~~/amf.php입니다. 우리가 좀전에 작성했던 endpoint죠. 새로운 서비스가 추가되어 새로운 endpoint를 작성하게 될 때 endpoint파일을 amf1.php라고 했을 때 이곳에 추가해서 channel에 기입할 수도 있고, <mx:RemoteObject>에서 endpoint를 해당 uri로 바꿔주는 방법 2가지가 있습니다.
그럼 이제 Flex쪽으로 넘어가봅시다.
ZendAmfTest.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
creationComplete="creationCompleteHandler()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
private function creationCompleteHandler():void
{
roSosi.getData();
}
private function faultHandler(event:FaultEvent):void
{
Alert.show(event.message.toString());
}
private function resultGetDataHandler(event:ResultEvent):void
{
dgSosi.dataProvider = event.result as Array;
}
]]>
</mx:Script>
<mx:RemoteObject id="roSosi" fault="faultHandler(event)" destination="zend" source="SosiService">
<mx:method name="getData" result="resultGetDataHandler(event)" />
</mx:RemoteObject>
<mx:DataGrid id="dgSosi" width="100%" height="100%">
<mx:columns>
<mx:DataGridColumn headerText="아이디" dataField="idx"/>
<mx:DataGridColumn headerText="소녀시대이름" dataField="sosiname"/>
<mx:DataGridColumn headerText="신장" dataField="height" />
<mx:DataGridColumn headerText="혈액형" dataField="blood" />
</mx:columns>
</mx:DataGrid>
</mx:Application>만약 다른 서비스를 추가하게 된다면, <mx:RemoteObject>에서 endpoint를 다른 url로 잡아주면 됩니다.
<mx:RemoteObject id="roAnother" fault="faultHandler(event)"
destination="zend" source="AnothorService"
endpoint="http://localhost/ZendAmfTest-debug/another_amf.php">아님 service-config.xml에서 channel을 다르게 해서 destination을 다르게 설정해도 되구요.

ps1. 다른 예제에서는 2개의 service를 이용한 예제가 없더라구요. 그래서 사실 저렇게 하는 게 맞는지 잘 모르겠습니다. 다른 방법이 있을 수도 있구요^^ 암튼, 제가 삽질한 바로는 서비스당 1개의 php파일을 만들어야 하더라구요.
ps2. PHP를 시작한지 얼마 안되었는데, DB연동 시 한글이 깨지더라구요. 인코딩을 my.ini과 php.ini에 utf-8로 맞췄는데, ???로 인식해서 나오는 경우가 있더라구요. php파일에서 db정보를 출력하니 이상하게 그냥 로컬에서 쳤을 때에는 utf-8로 나오는데, php파일이 출력한 db정보는 latin으로 나올 때가 있더라구요. 이 경우 my.ini파일에 이 부분을 추가해주면 됩니다.
[mysqld] 아래에
character-set-client-handshake = FALSE
client 인코딩으로 강제 셋팅하는거라고 하더라구요. 저는 처음에 ??? 뜨길래 이걸로 해결봤습니다-_-;
아 또 다른 방법으로 쿼리날리기 전에 set names 'utf8'이라고 먼저 날려줘도 됩니다.
mysql_query("SET NAMES 'utf8'");ps3. 이런...생각해보니 client에서 VO를 안만들어줬군요-_-;
참고자료
http://corlan.org/2008/11/13/flex-and-php-remoting-with-zend-amf/
덧. 채널 못찾는 에러는 아래 주너니님의 댓글을 참조하세요~ 컴파일옵션을 추가해야합니다^^
주너니님 감사합니다 ^^
-
지돌스타
매우 유용하군요. PHP에서도 AMFPHP는 AMF0만 지원했던걸로 알고 있는데 AMF3까지 지원한다고 하니... 매우 좋은걸요. 개인적으로 php로 할 프로젝트가 있었는데 적절한 시기에 소개해주셔서 참 감사합니다. 이걸 사용해야겠네요.
-
머드초보
앗 지돌스타님^^
저도 php를 배운지 얼마 안되었는데, 데이터연동부분에 관한 자료를 찾다보니 Zend Amf가 있더라구요^^ 방문해주셔서 감사해요~^^
-
-
주너니
안녕하세요. 좋은정보 감사합니다.
내용중에 약간 잘못된게 있는것 같아서 저도 꽤 삽질했네요 ^^;;
amf.php
<?php
require_once 'Zend/Amf/Server.php';
require_once 'SosiService.php';
$server = new Zend_Amf_Server();
$server->setClass("SosiService"
;
$server->setClassMap("SosiVo", "SosiVo"
;
?>
마지막에 echo($server -> handle()); 가 빠진것 같네요.
그리고 $mysql_query("SET NAMES 'utf8'"
; -> mysql_query("SET NAMES 'utf8'"
;
이렇게 되야될거 같고요~
마지막으로 channel 을 못찾는 에러가 나시는 분들은
해당 프로젝트 Properties -> Flex Compiler -> Additional compiler arguments 에
-services "D:\work\test\service-config.xml"
식으로 service-config.xml 이 있는 절대경로값을 추가해주셔야 합니다.
그럼 좋은정보 감사합니다. 수고하세요~ -
-
햇무리
좋은 글 정말 잘 봤습니다.
AMFPHP가 느리다고 해서 망설이고 있었는데 좋은 게 있었네요.
그런데 zendamf를 http://framework.zend.com/download/amf 에서 받아서 하니까 Minimal이고
Zend폴더 밑에 Loader 폴더가 없어서 에러가 나더라구요.
그래서 http://framework.zend.com/download/current/ 에서 Full로 받아서 해보니 되네요.
물론 3월에 해보신거라 그때는 잘 되었을지도 모르겠네요.
앞으로 해보시는 분들은 참고하세요.
감사합니다.
(그런데 한글깨지는거
character-set-client-handshake = FALSE 로 하면 된다고 하셨는데 어떻게 하는지 잘 모르겠어요... ㅠㅠ
mysql_query("SET NAMES 'utf8'"
; 를 쓰는 것보다는 이게 더 좋을 것 같은데요.)-
머드초보
아....그거 mysql옵션 수정하셔야합니다.
mysql.ini파일인가-_- 설정파일이 있는데, 그걸 수정해서 mysql다시 리셋해주면 돼요 ^^
방문해주셔서 감사해요~ ^^좋은 정보도 감사해요!
-
-
햇무리
오... 잘 되네요... 감사합니다.
그런데 또 안되는 것이 있네요... ㅠㅠ
서비스 여러개 넣는거 해보는데 잘 안되요.
위에 말씀하신 두가지를 다 해보고 있는데 워낙 zend에 대한 지식도 없고 하니 잘 안되네요.
service-config.xml와 flex쪽에서 어떻게 바꾸면 될까요?
-----
몇시간 후...
저도 삽질끝에 성공을 했어요... ^^
이젠 저장하는 것을 해봐야 겠어요. 감사합니다.-
머드초보
와 축하드립니다^^
저도 이거 삽질했던 때가 생각나는군요.
저도 조만간 이것을 쓰게 될 듯-_- 뭔가 개발해야하는데 서버가 php거든요^^
-
-
햇무리
netbeans을 사용하신다고 했는데요.
zend amf와 사용할때 php debug를 netbeans으로 어떻게 하나요?
해보려고 하는데 잘 안되서요.
php 코드쪽 문제 발생할 경우가 많은데 디버깅 없이는 코딩이 어려울 것 같아요.
부탁드립니다. ^^-
머드초보
디버깅을 하시려면 XDEBUG라는 디버거를 설치해야합니다.
검색 하시면 셋팅하는 것이 다 나올꺼에요 ^^
xdebug입니다!
-
-
햇무리
감사합니다. xdebug라는 것이 있었네요.
방금 php만 테스트 해봤는데 잘되네요.
이젠 flex와도 되는지 봐야겠네요. ^^-
머드초보
아네 이클립스에서도 php랑 다 할 수 있는데, ide가 전 따로 있는 게 더 편하더라구요. 그래서 서버는 넷빈즈, 클라이언트는 flex를 ^^
그럼 둘다 디버깅을 편하게 할 수 있어요^^
방문해주셔서 감사해요~
-
-
붉은고래
좋은 정보 감사합니다..^^
댓글 정보도 너무 유용하네요...
오류가나서 이것저것 해보다가 댓글에서 해답들을 찾았네요..감사 감사 ^^ -
-
-
-
행복한 아침
환경 : window2003,php5.2,Mysql5.1,Flex builder 3
위의 절차를 따라 실행을 하면 계속 이런 메시지가 떠는데
제가 초보자라 무슨 뜻인지 잘 모르겠네요..
정말 며칠동안 계속 이문제를 풀려고 했지만 도저히 무슨 영문인지 잘 모르겠습니다.
왜 이러한 현상이 나는지 바쁘시겠지만 알려주시면 감사드립니다.
(mx.messaging::ChannelSet)#6
clientId = (null)
connected = false
defaultHeaders = (null)
destination = "zend"
id = "D0577C34-67E2-48B1-A580-CCFC96CE62A1"
reconnectAttempts = 0
reconnectInterval = 0
requestTimeout = -1
subtopic = ""
connected = false
connectTimeout = -1
enableSmallMessages = true
endpoint = "http://localhost:81/ZendAmfTest-debug/amf.php"
failoverURIs = (Array)#11
id = "my-zend"
mpiEnabled = false
netConnection = (flash.net::NetConnection)#12
client = (mx.messaging.channels::AMFChannel)#4
connected = false
objectEncoding = 3
proxyType = "none"
uri = "http://localhost:81/ZendAmfTest-debug/amf.php" -

