블로그 이미지
veresuke's House!!
verere

calendar

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Recent Comment

Recent Trackback

  • 28,375total
  • 1today
  • 2yesterday
2009/03/07 23:29 Study/Web

정말 간만에 올리는 공부글이 아닌지 ㅋ


코딩을 하다가 배열을 상수로 사용할 필요가 생겼다.

constant, define을 이리저리 사용해보다가 생각만큼 안 돼서

인터넷을 뒤적 뒤적~~

그러다가 발견한게 var_export()eval()을 이용한 방법이다.

요렇게~~


<?PHP

 Define(
   '_TESTARRAYCONSTANT',
   var_export(
     array(
       '1'  => 'the value is 1',
       '10' => 'the vaue is 10',
       '100' => 'the value is 100',
       '1000' => 'the value is 1000'
      ),
     true
    )
  );

 $testDefine = eval('return ' . _TESTARRAYCONSTANT . ';');

 print _TESTARRAYCONSTANT;

 print '<BR /><BR />';

 print $testDefine[10];
 print '<BR />';
 print $testDefine[1000];

?>


결과를 보면 짐작들 하시겠지만 요렇다~

array('1'  => 'the value is 1', '10' => 'the vaue is 10', '100' => 'the value is 100',  '1000' => 'the value is 1000')

the vaue is 10
the vaue is 1000


이 방법을 사용하면서 좀 신경써야 할 부분은

var_export() 부분이다.

var_export()의 파라미터 중 두 번째 파라미터에 꼭!! true를 해줘야 한다는 것이다.

true를 안 하면 접근이 안 된다는 ㄷㄷㄷ


슬슬 이쯤에서 var_export()와 eval에 대해 살펴보는 시간을 ㅋ


var_export()

변수의 표현을 출력하거나 문자열로 반환하는 함수로 함수의 형태는 요렇다
mixed var_export ( mixed expression [, bool return])

파라미터로 받은 변수에 대해 구조 정보를 반환하는데 언뜻 보면 PHP 디버깅을 할 때 많이 쓰이는 var_dump()와 비슷하기도 하다.
하지만 var_dump()와의 차이점은 반환하는 표현이 유요한 PHP 코드이고 또 다른 점은 PHP5에서 객체의 protected, private 속성을 반환한다는 것이다.
두 번재 파라미터를 살펴보면 bool return으로 되어있다. 말 그래도 반환을 할 것인지 안 할 것인지 결정한다. 디폴트는 false다. 변수 표현을 반환하길 바란다면  true로 셋팅해 주시길 ㅋ

eval()

문자열로된 PHP 코드를 실행, 해석, 인식 시켜주는 함구로 함수의 형태는
mixed eval ( string code_str) 이렇다
요 함수는 다로 설명할 만한게....
그냥 짤막한 예를 들어면
$testPlusVar = '\$resultSum = 1 + 2;';
이렇게 있을 때
eval('$testPlusVar');
print $resultSum;
한다면 결과는
3
이렇다;;


오늘도 대충 글이 끝난것(?) 같다.

오늘도 이쯤에서 끝을... ㅋ

'Study > Web' 카테고리의 다른 글

[PHP]배열을 상수로 사용하기  (0) 2009/03/07
[JSON]클라이언트에서 JSON 데이터 사용하기  (0) 2008/11/06
[AJAX]timeout  (1) 2008/11/05
[PHP] 가변변수에 대해서  (2) 2008/10/24
posted by verere
2008/11/06 13:52 Study/Web
가끔 JOSN으로 서버와 데이터를 주고 받다 보면
하나의 request에 여러 데이터?를 받게되는 경우가 있다.

request를 http://xxx.xxx.xxx/xxx.xxx?yy=y(GET 방식. POST나 다른 방식으로 넘겨줘도 무방해요~^^) 넘겨주면
서버에서는 요렇게~     참고로 아래는 php임돠ㅋ

$oResponseJsonData = '{ "REQUEST":{"REQ_DATA1":"data1", "REQ_DATA2":"data2"}, "RESULT_LIST":[';

for($i=0; $i<$nCount; $i++) {
if($i == ($nCount-1))
$oResponseJsonData .= '{"RESULT":{"RST_DATA1":"data1", "RST_DATA2":"data2", "RST_DATA3":"data3", "RST_DATA4":"data4"}}';
else
$oResponseJsonData .= '{"RESULT":{"RST_DATA1":"data1", "RST_DATA2":"data2", "RST_DATA3":"data3", "RST_DATA4":"data4"}},';
}

$oResponseJsonData .= '] }';

클라이언트로 넘겨주게 된다.
그렇다고 서버에서 꼭 저렇게 넘겨주는 것은 아니다. 그냥 한 예일 뿐이며, 지극히 내 맘... -ㅅ-;;
넘겨주는 형식이 중요할 뿐이므로 패쑤~~

여기서 '[', ']' 이게 중요!!!!!! 그래야 각 하위 엘리먼트(여기서는 각 RESULT 부분)에 접근할 수 있다.
'{ }' 이렇게 감싸면 제일 마지막의 엘리먼트만 접근이 가능하다는..
'{ }' 요게 혹시 가능하다면 저한테 코멘트 좀....;;

서버에서 넘겨주는 데이터의 구성은 아래와 같이 된다.

{ "REQUEST":{ "REQ_DATA1":"data1", "REQ_DATA2":"data2" },
  "RESULT_LIST":[
{"RESULT":{ "RST_DATA1":"data1", "RST_DATA2":"data2", "RST_DATA3":"data3", "RST_DATA4":"data4" }},
{"RESULT":{ "RST_DATA1":"data1", "RST_DATA2":"data2", "RST_DATA3":"data3", "RST_DATA4":"data4" }},
{"RESULT":{ "RST_DATA1":"data1", "RST_DATA2":"data2", "RST_DATA3":"data3", "RST_DATA4":"data4" }}
  ]
}

이걸 어떻게 클라이언트에서 사용해야 될까?
우선 Ajax의 reponseText를 이용해 받게된다면 eval(text를 object 형식으로 변환하여 사용하기 위해)을 이용하자.
다른 방식도 있는데 parseJSON()을 사용해도 된다. parseJSON의 역은 toJSONString()으로 object를 text로 변환해준다.

실제 예를 함 보자. text를 object로 변환 ㄱㄱㅆ~~

var sResponseVal = Object.responseText;
var oVal = eval("(" + sResponseVal + ")");

이 상태에서 REQUEST의 REQ_DATA2에 접근할려면
oVal.REQUEST.REQ_DATA2 이렇게 접근하면 된다 ^^

RESULT_LIST의 3번째 RESULT의 RST_DATA3에 접근하려면
oVal.RESULT_LIST[3].RESULT.RST_DATA3 이렇게 ㅎ

간단하다. 나머진 각자 입맛에 맞게 바꾸면 끝~~

'Study > Web' 카테고리의 다른 글

[PHP]배열을 상수로 사용하기  (0) 2009/03/07
[JSON]클라이언트에서 JSON 데이터 사용하기  (0) 2008/11/06
[AJAX]timeout  (1) 2008/11/05
[PHP] 가변변수에 대해서  (2) 2008/10/24
posted by verere
2008/11/05 10:13 Study/Web
어느날 외부 API를 이용하여 데이터를 가져오게 돼었다.
포맷은 XML. 편하게 php 자체 함수인 simpleXML_Load_File 함수를 이용하여 사용했다.

그런데 이게 뭥미 +_____+
처음에는 잘 돼는가 했더니 외부 서버 상태에 따라 서비스에 너무 많은 영향을 끼치는 것이 아닌가 ㅠ
속도가 야~~~~ㄱ간 느려지는 것은 다반사고
가끔 중단되어 버리는 ㄷㄷㄷㄷ

그래서 timeout을 주기로 했다. 이리저리 뒤적거려 보는데 simpleXML_Load_File 에는 timeout 옵션이 없다.
다시 인터넷을 뒤적뒤적... XML 파싱 방법을 바꿀가 했지만 시간이 그리 많지 않고 한번 소켓이나 스트림을 이용하기로 결정!!
하지만 소켓이나 스트림을 거쳐 simpleXML_Load_File을 호출하기 때문에 전보다 시간이 쪼오금 더 들고 타임아웃도 잘 안 먹히는것이 아닌가 줸장 ㅠ

계속 찾다 찾다 결정한것은 Ajax!!!!
Ajax에는 readState를 통해 상태를 확인할 수 있다.
0은 초기화되지 않은 상태, 1은 로딩중, 2는 로드가 완료, 3은 사용될 준비가 되었을 때, 4는 작업이 완료된 상태.
그래서 이 상태를 이용해 보기로 했다. 호출한 후 일정시간이 지나서 상태를 확인했을 때 4가 아니라면 도중에 중단하기로.
그래서 또 뒤적뒤적거리다 abort() 라는 함수를 찾았다. 아싸~ 좋구나!!! -ㅅ- ㅋㅋㅋㅋ abort는 Ajax에서 실행하던 것을 도중에 멈추게 하는 기능을 한다.

코딩을 하기 시작.
Object.open()으로 url 및 전송 타입 등을 알려주고 Object.onreadystatechange를 이용하여 상태에 대해 변화를 감시한다.
Object.send()를 이용하여 요청을 하면 당근 상태에 변화가 생기고 완료상태(4)가 되면 결과를 받아오도록 했다.
여기서 중요한건 send()를 호출한 후 window.setTimeout()을 이용여 일정시간이 지난 후 상태를 확인하고 완료상태가 아니면 중단하도록 하는 함수를 호출하는 것이다.
요렇게...
window.setTimeout(abortSendMessage, 1000);

function abortSendMessage() {
if(Object.readyState < 4)
Object.abort();

}

생각보다 쉽다 -ㅅ-
그런데 난 해멘거다 ㅋ

요건 허접한 전체 소스 ㅋㅋㅋ

더보기


'Study > Web' 카테고리의 다른 글

[JSON]클라이언트에서 JSON 데이터 사용하기  (0) 2008/11/06
[AJAX]timeout  (1) 2008/11/05
[PHP] 가변변수에 대해서  (2) 2008/10/24
[JAVASCRIPT]Html에서 탭형식 내부변환하기  (2) 2007/03/12
posted by verere
2008/10/24 15:50 Study/Web
오랫만에 올리는 스터디(?)글일것 같다.
오랫만에 올리는 글이니 만큼 간단하게 시작하기로...
절!대!! 제대로 정리된 자료가 없어서 그런것은 아니다;;

가변변수.. 가끔씩 프로그래밍을 하다보면 가변변수를 쓰고 싶을 때가 있다.
가령 $변하는 부분_btn 과 같은
더 자세히 써보면 $submit_btn, $del_btn, $mod_btn과 같이 뒤의 '_btn'은 고정시키면서 앞 부분은 변화하도록 하는것과 같이

처음에 몰라서 고생한걸 생각하면 ㅠ_____ㅠ

정말 간단하다.
${$str}_btn;  <-- 요런 형식으로 하면 된다.
$str에 값이 'submit'이 들어있으면 변수 이름은 $submit_btn이 되는 것이고
'del'이 들어있으면 $del_btn이 되는 것이다.
간단하지만 모르면 짜증난다는....;;

배열의 값들을 이용해 만드는것도 잠~~깐만 봐보자

$aVarName = array('one', 'two', 'three');

이런 식으로 배열에 값이 있다면

foreach($aVarName as $key => $val) {
    ${$val} = null;
}

이런식으로 사용해도 되고 아니면,

for($i=0; $i<3; $i++) {
    ${$aVarName[$i]} = null;
}

이렇게 하면 총 3개의 변수가 만들어진다
$one, $two, $tree 요렇게 ㅋㅋ

오랫만에 쓰니 더 허접한것 같지만
이번글은 여기서 마치고 잠시 쉬자는ㅎ

참고로 먼가 잘못됐다거나 모르겠으면 댓글로 남겨주세요~~~~ ^_________^

'Study > Web' 카테고리의 다른 글

[AJAX]timeout  (1) 2008/11/05
[PHP] 가변변수에 대해서  (2) 2008/10/24
[JAVASCRIPT]Html에서 탭형식 내부변환하기  (2) 2007/03/12
[HTML]Div와 Span  (2) 2007/03/12
posted by verere
2007/03/12 18:17 Study/Web

<HTML>
<HEAD>
 <TITLE>내부 탭 변환</TITLE>
 <script language="javascript">
 <!--
 function tabChg(tabAllNum, tabSelfNum)  //tabAllNum은 전체 탭의 수,
 {                                                               //tabSelfNum은 자신의 순서
  for(i=1; i<=tabAllNum; i++)
  {
   if( i==tabSelfNum ) //자신의 순서가 맞다면 화면에 보여주고 그렇지 않다면 보여주지 않음
   {  
    document.getElementById ('tabChg_'+ tabSelfNum).style.display='';  
   }
   else
   {  
    document.getElementById ('tabChg_' + i).style.display='none';  
   }
  }
 }
 //-->
 </script>
</HEAD>
<BODY>

<!-- 첫번째 내부 탭 시작 -->
<div id="tabChg_1" style="display: ;" >
 <span style="color:tomato">첫번째 탭</span>&nbsp;&nbsp;
 <a href="javascript:tabChg(3,2)"><span style="color:gray">두번째 탭</span></a>&nbsp;&nbsp;
 <a href="javascript:tabChg(3,3)"><span style="color:gray">세번째 탭</span></a>&nbsp;&nbsp;
</div>
<!-- 첫번째 내부 탭 끝 -->

<!-- 두번째 내부 탭 시작 -->
<div id="tabChg_2" style="display: none;" >
 <a href="javascript:tabChg(3,1)"><span style="color:gray">첫번째 탭</span></a>&nbsp;&nbsp;
 <span style="color:tomato">두번째 탭</span>&nbsp;&nbsp;
 <a href="javascript:tabChg(3,3)"><span style="color:gray">세번째 탭</span></a>&nbsp;&nbsp;
</div>
<!-- 두번째 내부 탭 끝 -->

<!-- 세번째 내부 탭 시작 -->
<div id="tabChg_3" style="display: none;" >
 <a href="javascript:tabChg(3,1)"><span style="color:gray">첫번째 탭</span></a>&nbsp;&nbsp;
 <a href="javascript:tabChg(3,2)"><span style="color:gray">두번째 탭</span></a>&nbsp;&nbsp;
 <span style="color:tomato">세번째 탭</span>&nbsp;&nbsp;
</div>
<!-- 세번째 내부 탭 끝 -->

</BODY>
</HTML>

=========================================================================================
자바스크립트를 이용한 내부 자체적으로 변환하는 탭 형태이다.

내부 자체적으로 변환할때 좋은 점은 서버에 요청을 할 필요가 없다는 것이다.
실행 시간이 빠르지만 그 만큼 필요한 정보가 간단하고 변하지 않아야 한다.
데이타베이스의 정보가 필요하지 않을 때 사용하면 좋지만 정보가 변하면 어쩔 수 없이 자체 소스를 바꿔줘야 한다 ㅠ
데이타베이스를 사용하면 데이타베이스내의 정보만 바꾸면 돼지만 ㅋㅋ
게다가 소스가 복잡해지고 많아진다면 내부 탭을 사용하지 말아야 한다.
더욱 복잡해지고 소스도 많아진다. 탭의 갯수가 늘수록 더욱 더 늘어난다;;
그럴 때는 그냥 하나씩 만드는게 낫겠다;;

너무 무책임한가 ㅋ

'Study > Web' 카테고리의 다른 글

[PHP] 가변변수에 대해서  (2) 2008/10/24
[JAVASCRIPT]Html에서 탭형식 내부변환하기  (2) 2007/03/12
[HTML]Div와 Span  (2) 2007/03/12
다음 샘플 테스트  (2) 2007/01/09
posted by verere