2010년 1월 3일 일요일
YUI PHP Loader 문제
2010년 1월 2일 토요일
PHP에서 YUI 삽입하기
YUI야 Javascript 라이브러리인데 PHP가 무슨 상관일까?
YUI PHP Loader라는 Utility가 있다.
이 유틸리티는 YUI 컴포넌트를 로딩해주는 역할을 한다.
클라이언트 사이드에 YUI Loader가 있다면 php 서버사이드엔 YUI PHP Loader가 있다.
php 쓰는 김에 같이 쓰기로 결정.
php에서 제공된 loader.php를 include 하고 아래와 같이 코드를 실행하면 된다.
$loader = new YAHOO_util_Loader("2.8.0r4");
$loader->load("yahoo", "dom", "event", "tabview", "grids", "fonts", "reset");
3.0이 좋다하여 $loader = new YAHOO_util_Loader("3.0.0"); 으로 바꿨더니 잘 되는 것같다.
서비스 서버에 올릴때 meta 디렉토리가 담겨있는 lib 디렉토리를 빼먹으면 안된다.
2009년 12월 31일 목요일
PHP XML Writer 속도
XMLWriter
0.000063
XMLDocument
0.000068
String
0.000084
XMLWriter가 가장 빨라보이기는 했는데 XMLDocument가 String으로 XML을 만든 것보다 빠른 것은 예상 밖이었다. 위의 값은 평균 값은 아니고 어떤 특정시점의 스냅샷이다. 그렇지만 여러번 실행시켜도 결과는 마찬가지다.
PHP 속도체크
$s = microtime();
$this->doSomething();
echo sprintf("%f", microtime_float() - $s);
위처럼 하니 속도파악이 가능하다.
PHP에서 XML 다루기
XMLWriter 라는 스트링으로 XML을 생성하는 클래스를 구해다가 사용하고 있었다. 그런데 계층 구조의 객체 관계를 모델링하고 이를 XML로 바꾸는 과정에서 스트링은 문제가 생겼다. 스트링은 여태까지 만들어 놓은 XML 텍스트를 수정하는 것이 불편하다.
따라서 PHP에서 XML을 다루는 방법을 찾아본 결과 역시나 정리되어 있는 문서를 찾아볼 수 있었다. XML을 다루는 방법은 크게 네 분류로 나뉘는데 tree based, streaming, event based, transformation 이다.
tree based
- ext/dom
PHP 4에서는 ext/domxml을 쓰고 PHP 5에서는 ext/dom을 사용한다. 사용법은 매우 비슷하다.
- ext/simplexml
streaming (빠르고 간단함)
- ext/xmlreader
- ext/xmlwriter
event based
- ext/xml
transformation
- XSL
2009년 12월 28일 월요일
PHP 의 POST 자동 addslashes
SQL injection을 피해보잡시고 POST값에 대해서 addslashes를 하려고 했다. 그런데 뭔가 조금 이상해서 봤더니 POST된 값에 이미 슬래쉬가 붙어있다. flash가 그렇게 보내진 않을거 같고 조금 찾아봤더니 아래와 같은 설명이 PHP 메뉴얼에 나온다.
The PHP directive magic_quotes_gpc is on by default, and it essentially runs addslashes() on all GET, POST, and COOKIE data. Do not use addslashes() on strings that have already been escaped with magic_quotes_gpc as you'll then do double escaping. The function get_magic_quotes_gpc() may come in handy for checking this.
magic_quotes_gpc가 on이면 GET, POST, COOKIE에 대해서 addslashes()를 수행한다. 그래서 addslashes()를 추가했다가 다시 빼버렸다. 다른 환경을 위해 get_magic_quotes_gpc()로 검사하고 직접 해주던지 놔두던지 하게 바꾸야 한다.
2009년 8월 4일 화요일
AIR에서 WebORB for PHP 사용
weborb\Weborb\WEB-INF\flex 위치에 remoting-config.xml, services-config.xml를 잘 변경해줘야 쓸 수 있다. services-config.xml에 my-air-amf 라는 게 있어서 봤더니 주소가 틀려서 접속이 안되더라.
remoting-config.xml 에 보면 아래와 같은 xml이 있다.
<destination id="GenericAIRDestination">
<channels>
<channel ref="my-air-amf"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
이 remoting-config.xml과 services-config.xml이 뭐 어떻게 꿍짝꿍짝 하나본데 급하게 하느라 WebORB에서 문서를 몇 번 찾아보다가 안보여서 그냥 "되는데 뭐~" 하면서 관뒀다.
destination의 id값은 RemoteObject의 destination 프로퍼티 값 혹은 RemoteObject 생성할 때 생성자의 첫 번째 인자로 지정해주는 값이다. source가 만약 com.example.app.FileSystemBrowser로 지정되어 있으면 weborb\Services\com\example\app에 있는 FileSystemBrowser.php 클래스를 사용하게 된다. 기타 다른 클래스가 또 있다면 아래와 같이 지정해주면 된다.
flash.net.registerClassAlias("com.example.app.FolderItem", FolderNode);
flash.net.registerClassAlias("com.example.app.FileItem", FileNode);
flash.net.registerClassAlias("com.example.app.FileSystemItem", FileSystemNode);
이렇게 해두면 flex에서 원격(WebORB for PHP로 구성된 웹서버)에 있는 SomeMethod(fileNode); 메소드를 호출하면 FileNode 타입을 서버에서 받아 그대로 사용할 수 있다. 어쨌든 비동기라 짜기 귀찮긴 하지만 XML 파싱하고 전송하고 받고 그런거 안하는 게 어디야.