1. CakePHP 다운로드 받아서 압축을 푼다.http://cakephp.org/

public_html/cakephp 에 설치했다고 가정하고 기술

2. 권한 설정
cakephp/app/tmp 디렉토리에  web server user 쓰기 권한 부여

3.  app/config/core.php 수정
- Security.salt
- Security.cipherSeed

4. config/database.php.default를 database.php로 파일이름 변경
DATABASE_CONFIG 클래스의 정보를 적정하게 수정

기본 설정이 끝나면 다음과 같은 화면을 볼 수 있음. 

Posted by Gu Youn
,
1. 개념
fsockopen 함수를 사용하여 구현한다.

2. 소스
DEFINE("CONTENT_TYPE", "multipart/form-data; boundary=");
DEFINE("CRLF", "\r\n");
DEFINE("CONTENT_DISPOSITION", "Content-Disposition: form-data; name=\"%s\"");
DEFINE("FILE_NAME_PLACE_HOLDER", "; filename=\"%s\"");
DEFINE("CONTENT_TYPE_PLACE_HOLDER", "Content-Type: %s\r\n\r\n");
DEFINE("CONTENT_LENGTH", "Content-Length: %d\r\n");
DEFINE("BOUNDARY", "---------------------------" . "020603111835686");


function http_form_get_send($host, $port, $url, $result_len)
{
                $headers = array(
                        "GET $url HTTP/1.0" . CRLF,
                        "Accept: */*" . CRLF,
                  "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)" . CRLF,
                  "Host: $host" . CRLF,
                  "Connection: Close" . CRLF,
                );

                $sock = fsockopen($host, $port);

                // send headers
                for($i = 0;$i < count($headers);$i++) {
                        fputs($sock, $headers[$i]);
                }
               
                // send end of header
                fputs($sock, CRLF);

                while(!feof($sock)) {
                        $s = fgets($sock, 1024);

                        if($s) {
                                // skip headers
                                if($s[0] == "\n" || $s[0] == "\r")
                                        break;
                        }
                        else break;
                }

                $result = fread($sock, $result_len);

                fclose($sock);

                return $result;                
}

3. 사용 예
$data = "?ownerid=blue";
$data .= "&ticket=5230315";
$data .= "&from=016";
$data .= "&to_number=016";
$data .= "&message=hohoho";

$result = http_form_get_send("ipager.test.co.kr", "80", "/sendsms/" . $data, 1024) ;

print "result : " . $result;

4. 소스파일



Posted by Gu Youn
,
환경 : Tomcat 4.1.29 / HP-UNIX

Tomcat의 JNDI DataSource 사용을 할 때 직접 드라이버를 로드하는 방법과 DBCP 사용을 하는 방법이 있다.

ㄱ. 직접 드라이버 로드를 하는 방식
  JDBC 드라이버를 $CATALINA_HOME/common/lib에 설치를 해서 사용을 하면 된다.

ㄴ. JNDI DataSource 사용하는 방식
  HP에서 제공하는 패키지로 설치한 Tomcat의 $CATALINA_HOME/common/lib의 commons-collections.jar , commons-pool.jar , commons-dbcp.jar 를 이용을 하면 Oracle JNDI 연결시 v () method를 찾지 못한다는 에러 발생한다. 버전에 맞는 것을 Tomcat 프로젝트 홈페이지에서 받아 설치하고 그것을 사용하도록 하면 해결이 됐던 것으로 기억한다.

첨부파일



Posted by Gu Youn
,
1. 참고 자료 #
http://talks.php.net/show/extending-php-ffm2003
http://www.qandr.org/quentin/phpmodule/
http://www.zend.com/publishers/excerpts.php?id=20&exc=custom_php_extension

2. config.m4 변경 #
주석 삭제
PHP_ARG_WITH(charanavi, for charanavi support,
dnl Make sure that the comment is aligned:
[  --with-charanavi             Include charanavi support])
PHP_ADD_INCLUDE($CHRANAVI_DIR)
추가 $CHARANAVI_DIR은 with-charanavi 옵션에 지정하는 경로
PHP_SUBST(CHARANAVI_SHARED_LIBADD)
PHP_ADD_LIBRARY_WITH_PATH(charanavi_main, $CHARANAVI_DIR, CHARANAVI_SHARED_LIBADD)
AC_DEFINE(HAVE_CHARANVI,1,[ ])


3. Makefile 변경 #
CHARANAVI_SHARED_LIBADD옵션에 아래처럼 라이브러리 경로 추가
CHARANAVI_SHARED_LIBADD = -L/home/mdps/php_extension -lcharanavi_main -lmysqlclient


4.컴파일 및 테스트 #
make clean ; make ; php -q charanavi.php
Posted by Gu Youn
,
웹에서 찾은 자료 같은데 정확한 출처는 기억이 안난다.

<%
     OPTION EXPLICIT
     const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
     dim nl
     ' zero based arrays
     dim Base64EncMap(63)
     dim Base64DecMap(127)

     ' must be called before using anything else
     PUBLIC SUB initCodecs()
          ' init vars
          nl = "<P>" & chr(13) & chr(10)
          ' setup base 64
          dim max, idx
             max = len(BASE_64_MAP_INIT)
          for idx = 0 to max - 1
               ' one based string
               Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
          next
          for idx = 0 to max - 1
               Base64DecMap(ASC(Base64EncMap(idx))) = idx
          next
     END SUB

     ' encode base 64 encoded string
     PUBLIC FUNCTION base64Encode(plain)

          if len(plain) = 0 then
               base64Encode = ""
               exit function
          end if

          dim ret, ndx, by3, first, second, third
          by3 = (len(plain) 3) * 3
          ndx = 1
          do while ndx <= by3
               first  = asc(mid(plain, ndx+0, 1))
               second = asc(mid(plain, ndx+1, 1))
               third  = asc(mid(plain, ndx+2, 1))
               ret = ret & Base64EncMap(  (first 4) AND 63 )
               ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second 16) AND 15 ) )
               ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third 64) AND 3 ) )
               ret = ret & Base64EncMap( third AND 63)
               ndx = ndx + 3
          loop
          ' check for stragglers
          if by3 < len(plain) then
               first  = asc(mid(plain, ndx+0, 1))
               ret = ret & Base64EncMap(  (first 4) AND 63 )
               if (len(plain) MOD 3 ) = 2 then
                    second = asc(mid(plain, ndx+1, 1))
                    ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second 16) AND 15 ) )
                    ret = ret & Base64EncMap( ((second * 4) AND 60) )
               else
                    ret = ret & Base64EncMap( (first * 16) AND 48)
                    ret = ret & "="
               end if
               ret = ret & "="
          end if

          base64Encode = ret
     END FUNCTION

     ' decode base 64 encoded string
     PUBLIC FUNCTION base64Decode(scrambled)

          if len(scrambled) = 0 then
               base64Decode = ""
               exit function
          end if

          ' ignore padding
          dim realLen
          realLen = len(scrambled)
          do while mid(scrambled, realLen, 1) = "="
               realLen = realLen - 1
          loop
          dim ret, ndx, by4, first, second, third, fourth
          ret = ""
          by4 = (realLen 4) * 4
          ndx = 1
          do while ndx <= by4
               first  = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
               second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
               third  = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
               fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1)))
               ret = ret & chr( ((first * 4) AND 255) +   ((second 16) AND 3))
               ret = ret & chr( ((second * 16) AND 255) + ((third 4) AND 15) )
               ret = ret & chr( ((third * 64) AND 255) +  (fourth AND 63) )
               ndx = ndx + 4
          loop
          ' check for stragglers, will be 2 or 3 characters
          if ndx < realLen then
               first  = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
               second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
               ret = ret & chr( ((first * 4) AND 255) +   ((second 16) AND 3))
               if realLen MOD 4 = 3 then
                    third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
                    ret = ret & chr( ((second * 16) AND 255) + ((third 4) AND 15) )
               end if
          end if

          base64Decode = ret
     END FUNCTION

' initialize
     call initCodecs

' Testing code
'    dim inp, encode
'    inp = request.QueryString("input")
'    encode = base64Encode(inp)
'    response.write "Encoded value = " & encode & nl
'    response.write "Decoded value = " & base64Decode(encode) & nl
%>

Posted by Gu Youn
,

1. 노턴 안티바이러스가 설치되있는 경우 스크립트 차단기능 때문에 FSO 사용시 Hang 발생한다.

해결법 : 노턴 안티바이러스 환경설정-옵션에서 스크립트 차단기능 해제하고 재부팅 하라는 내용.

PRB: Antivirus Software Causes FileSystemObject Calls to Hang IIS (Q295375)

--------------------------------------------------------------------------------
The information in this article applies to:


Microsoft Active Server Pages


--------------------------------------------------------------------------------


SYMPTOMS
When you browse an Active Server Pages (ASP) page that contains FileSystemObject calls, the request
for that page stops responding (hangs) and eventually times out in the browser.



CAUSE
This problem occurs because the Script Blocking feature in Norton AntiVirus software blocks
scripting operations that access the file system, such as FileSystemObject . Although this problem
is prevalent in Active Server Pages (ASP) Web applications, it can also occur in other
technologies, such as Windows Scripting.

NOTE: This problem occurs even if Norton AntiVirus has been disabled.



RESOLUTION
To resolve this problem, contact Norton AntiVirus Software Support. The following Symantec Web site
describes how to remove the Script Blocking feature:

http://service1.symantec.com/SUPPORT/nav.nsf/aab56492973adccd8825694500552355/399a443be88ce25788256a
0e0068e180?OpenDocument
NOTE : You may have to reboot the server after you make the above-mentioned changes to the Norton
AntiVirus software.

The third-party contact information included in this article is provided to help you find the
technical support you need. This contact information is subject to change without notice. Microsoft
in no way guarantees the accuracy of this third-party contact information.



--------------------------------------------------------------------------------
Published Apr 10 2001 8:10AM Issue Type kbprb
Last Modifed Oct 30 2001 10:35AM Additional Query Words hang fail Anti-Virus iis 5
Keywords kbASP kbScript kbSecurity kbWebServer kbGrpDSASP kbDSupport kbFSO


Posted by Gu Youn
,
1. smalldatetime 타입 컬럼에 인서트 하기

ms-sql server의 smalldatetime에 인서트 하기 위해서는 YYYY-MM-DD HH:II:SS으로 변환해야 한다.

'asp 예제..
'YYYY-MM-DD HH:II:SS 형식으로 변환
end_time = Year(now)&"-"&Month(now)&"-"&Day(Now)&" "&FormatDateTime(now, 4)

2. 같은 이름의 form 요소 배열로 처리하기
  html에 파일의 인풋폼들의 이름이 같은경우 asp의 Request("schedule_id")에 ","를 구분기호로 해서 들어가 있다. 각 요소마다 접근하기 위해서는 아래 예처럼 하면 됨.
  -html-
  <input type="text" name="schedule_id" >
  <input type="text" name="schedule_id" >
  <input type="text" name="schedule_id" >

  -asp-
  Dim i ,strWhere
  i = 0

        for i = 1 to Request("schedule_id").Count
    if i = 1 then
      strWhere = "WHERE schedule_id="&trim(Request("schedule_id")(i))
                else
      strWhere = strWhere & " Or schedule_id="&trim(Request("schedule_id")(i))
    end if
        next


3. 웹 서버 이름
-asp 코드-
<%
  Dim strSName    : strSName = Request.ServerVariables("SERVER_NAME")
%>
<script language="javascript">
<!--
alert("<%= strSName %>");
-->
</script>

-결과-
사용자가 브라우져 주소창에 www.youngu.info를 입력해서 접속한 경우 strSName은 www.youngu.info가 된다.

4. 사용자 아이피 및 HTTP 헤더
request.servervariables("remote_addr")

Response.Write request.servervariables(1) 'http 모든 헤더를 화면에 출력한다.

5. ASP 페이지 내에서 에러(Error) 처리

SQL = "DELETE FROM test_cont_info_tbl "&strWhere
AdoDb.Execute(sql)
Select Case Err.Number
  Case 0
  Case 1
     ' 에러코드 1일 경우 처리
  Case Else
     ' 그밖의 에러 처리
     AdoDb.Close
     Set AdoDb = nothing
     Response.End
End Select

6. Transaction 처리
          On Error Resume Next        
         
          Dbcon.Execute SQL,LngRecs,adCmdText + adExecuteNoRecords
         
          Dim errCount
          errCount = Dbcon.Errors.Count

                If errCount = 0 Then
             DbCon.CommitTrans
             Response.Write "총 " & LngRecs & " 건의 레코드가 반영되었습니다..."
                Else
             DbCon.RollbackTrans        
             response.write "에러가 발생했습니다...따라서 DB에 반영되지 않았습니다....<br>"
             response.write "원인 : " & Err.Description
             Err.clear
                End If        
       
          Dbcon.Close
          Set Dbcon = nothing
Posted by Gu Youn
,
  Dim arrList
  if Rs.Eof or Rs.Bof then
                arrList = ""
        else
          arrList = Rs.getString()
        end if
       
        if arrList <> "" then
    Dim arrRecord, arrColumn, inum
    arrRecord = Split(arrList,chr(13))
        else
                Response.end
        end if

        'arrRecord(Ubound(arrRecord))에는 마지막 vbCrLf뒤의 널값이 들어가므로 arrColumn으로 나누면 에러남
        '예를 들어 Ubound(arrRecord)값이 6이라면 arrRecord(6)은 NULL이므로 arrRecord(0)~arrRecord(5)까지만 사용한다
        for inum=0 to Ubound(arrRecord)-1
    arrColumn = Split(arrRecord(inum), Chr(9))
  next
Posted by Gu Youn
,