블로그 이미지
예진이와 고고씽!! 괴스트

카테고리

분류 전체보기 (340)
Yejin (243)
Life (41)
Dev (32)
Etc (21)
Total36,391
Today15
Yesterday19

mod_rewrite 사용하기

Dev/php / 2010/03/05 09:43
크리에이티브 커먼즈 라이선스
Creative Commons License
mod_rewrite (Rewrite engine)  는 전달 받은 URL 을 재 작성 을 하거나 URL을 최적화 할때 사용하는 모듈입니다.

예들 들어서
원 주소 : http://www.example.com/Blogs/Posts.php?Year=2006&Month=12&Day=10
적 용 주소 : http://www.example.com/Blogs/2006/12/10/


위 와 같은 모습으로 URL을 간단히 처리 할 수 있습니다.

위 예제를  설정하는 룰은 아래와 같습니다.
 (실제 동작은 테스트 하지 않음 : 이해를 돕기 위한 구문임)
RewriteCond %{REQUEST_URI} /Blogs/([0-9]+)/([0-9]+)/([0-9]+)$
RewriteRule . http://www.example.com/Blogs/Posts.php?Year=$1&Month=$2&Day=$3


위 와 같이 설정을 할 수 있습니다.

이제 rewrite 의 설정 및 각 문법에 대해서 알아 보겠습니다.
  1. RewriteBase
  2. RewriteCond
  3. RewriteEngine
  4. RewriteLock
  5. RewriteLog
  6. RewriteLogLevel
  7. RewriteMap
  8. RewriteOptions
  9. RewriteRule

1. RewriteBase (Rewrite 에 사용될 기본 URL 디렉토리를 설정)
사용법 : RewriteBase /Example
적용할수 있는 곳 :  Directory, .htaccess

2. RewriteCond (URL 의 재작성할 부분을 선언하거나 지정한다.)
사용법 : RewriteCond [검사할 문자열] [패턴]
적용할 수 있는 곳 : Server Config, Virtual Host,  Directory, .htaccess

사용할 수 있는 서버 변수

HTTP Headers... 닫기

HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT

HTTP Headers... 닫기

connection & request 닫기

REMOTE_ADDR
REMOTE_HOST
REMOTE_PORT
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE

connection & request 닫기

server internals: 닫기

DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE

server internals: 닫기

date and time 닫기

TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME

date and time 닫기

specials 닫기

API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ
HTTPS

specials 닫기


플래그 (작성중..)
C
CO
F
G
L
N
NC
NE
[P] 재작성한 외부 페이지(웹사이트) 를 재작성 이름으로 대응한다.
PT
QSA
[R] 브라우저에게 변경 사실을 통보한다. (주소창이 변한다)
S
T

사용 예시
Rewrite ^/TestDir/(.*)$ /Web/Test/$1 [L] 은
http://example.com/TestDir/ 으로 들어오면 http://example.com/Web/Test/ 로 처리한다.

Rewrite %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^/$ /browser/mozilla.html [L]

브라우저 UserAgent 에  Mozilla 가 포함되어 잇으면 /browser/mozilla.html 으로 처리한다.

3. RewriteEngine
사용법 : RewriteEngine on|off
기본 : RewriteEngine off
적용할 수 있는 곳 : Server Config, Virtual Host,  Directory, .htaccess
설명 : Rewrite 엔진을 사용하는 여부를 설정한다.

4. RewriteLog
사용법 : RewriteLog [파일패스]
적용할 수 있는 곳 : server conf, virtual host
예 : RewriteLog "/usr/local/apache/log/rewritelog.log"
설 명 : Rewrite 동작에 대한 로그를 남긴다.

5. RewriteLogLevel
사용법 : RewriteLogLevel  [Level]
예 RewriteLogLevel 0
적용할 수 있는 곳 : Server Conf, Virtual Host
설명 : RewirteLog 를 이용하여 기록할 로그 레벨을 지정한다.

6. RewriteMap

7. RewriteOptions

8. RewriteRule
저작자 표시
Posted by 예진이네집 괴스트

mod_rewrite 의 활용

Dev/php / 2010/03/03 18:57
크리에이티브 커먼즈 라이선스
Creative Commons License

mod_rewrite

# 이 문서는 오라클클럽에서 작성하였습니다.
# 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
# 출처 : http://wiki.oracleclub.com/display/SWDEV/mod_rewrite?



mod_rewrite

1 mod_rewrite 설치

  • apache 설치시 Configure 실행시에 --enable-rewrite 옵션을 추가한다.
  • apache 설치 이후 추가 설치시
    • 아파치 압축 푼 디렉토리로 이동 : cd /usr/local/httpd-2.0.63/modules/mappers
    • apxs를 이용해 새 모듈 추가 : /usr/local/apache2/bin/apxs -aic mod_rewrite.c

2 Rewrite 모듈 지시자

2.1 RewriteEngine

  • Rewriteing 엔진을 사용할지 여부를 설정
  • 디폴트 설정은 Off, RewriteEngine On 으로 설정하지 않는 이상 Rewritng 엔진을 사용할 수 없다.
  • 설정문법 : RewriteEngine On|Off

2.2 RewriteRule

  • Rewrite 모듈의 실질적인 Rewrite 규칙들을 적용 한다.
  • Input URL을 Return URL로 변경하기 위한 규칙들을 설정 한다.
  • 아래는 RewriteRule을 이용해 퍼머링크를 만드는 예제다.
 <IfModule mod_rewrite.c>  
RewriteEngine On
RewriteRule ^/$ /main.ok [R]
RewriteRule ^/community/([0-9]+)$ /articlelist.ok?article.communityId=$1 [PT]
RewriteRule ^/article/([0-9]+)$ /articleview.ok?article.articleId=$1 [PT]
</IfModule>

  • RewriteRule 플래그
    • F(forbidden) : 요청하는 페이지를 403 에러로 redirect 시킵니다.
    • G(gone) : 요청하는 페이지를 410 에러로 redirect 시킵니다.
    • R(redirect) : Return URL로 redirect 한다.
    • PT(passthrough) : Input URL을 그대로 유지하며 Return URL을 실행한다.
    • http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

2.3 RewriteCond

참고4. 정규표현식 기초
. : 다수의 한문자
? : 0개 이상의 한문자
* : 0개 이상의 문자 또는 문자열
+ : 1개 이상의 문자 또는 문자열
^ : 문자열의 첫문(열)을 지정합니다.
$ : 문자열의 끝 문자(열)을 지정합니다.
(역슬래쉬) : 정규표현식에서 특별한 의미로 사용되는 문자의 특수기능을 제거합니다.(예:(, ), [, ] . 등)
{n} : 정확히 n번 반복
{n,} : n번 이상 반복
{n,m} : n 이상 m 이하 반복
[chars] : 문자들의 범위 또는 표현할 수 있는 문자들을 설정합니다.
예) [a-z] : a 부터 z 까지의 소문자, [tT] : 소문자 t 또는 대문자 T

정규표현식 단축표현들
[:alpha:] : 알파벳. [a-zA-Z] 와 같은 표현
[:alnum:] : 알파벳과 숫자. [a-zA-Z0-9] 와 같은 표현
[:digit:] : 숫자 [0-9] 와 같은 표현
[:upper:] : 대문자. [A-Z] 와 같은 표현

# 이 문서는 오라클클럽에서 작성하였습니다.
# 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
# 출처 : http://wiki.oracleclub.com/display/SWDEV/mod_rewrite?
저작자 표시
Posted by 예진이네집 괴스트
크리에이티브 커먼즈 라이선스
Creative Commons License
원문 링크 : http://www.javaworld.com/javaworld/jw-10-2008/jw-10-load-balancing-1.html

이용방식이 stateful인지의 여부에 따라 매우 다른 형태가 이루어지는데 stateful인 경우 상태를 서버간에 동기화시키기위한 도전이 필요하고 performance가 떨어질 위험이 있으므로 될 수 있으면 stateless하게 이용할 수 있도록 노력하고 있다.

가용성(availability), 확장성(scalability)




일반적인 load balancing으로 서버군에 대한 접근은 load balancer를 통해서만 수행되며 load balancer가 실제 request를 담당할 서버들을 주어진 알고리즘을 통해 선택하는 방식

통 상은 load balancing에 대한 architecture를 이야기 할때 가용성(availability), 확장성(scalability)을 살펴보게 되는데 위와 같은 구조는 load balancer가 병목이 생기지 않는다면 확장성은 매우 좋은 구조다. 다만, load balancer 자체에 대한 가용성 문제 때문에 가용성 부분은 쉽게 단정하기 힘들다.

따라서 load balancer를 다중화 할 수 있다면 가용성이 증대되는 효과가 크고 또한 load balancer의 병목위험을 없애 확장성도 크게 높일 수 있게 된다.

Server load balancing techniques

다음의 2가지로 구분될 수 있다.
  • Transport-level
  • Application-level
또 한 hardware인지 software인지를 이용해 구분할 수도 있는데 transport-level의 경우는 대부분 hardware타입이 많다(hardware타입은 속도가 빠르다.). 다만, hardware의 경우는 비용이 많이 소요되는 단점이 있다.

DNS-based load balancing

DNS 설정을 이용해 요청 host 명에 다수의 ip를 배정하여 round robin방식으로 balancing하게 되는데
  • 구축이 매우쉽다.
  • 따로 load balancer가 필요없다.
위와 같은 장점이 있는 반면 다음과 같은 치명적 단점을 가지고 있다.
  • stateful 지원이 안된다.
  • 클라 이언트에 cache를 가지고 있기 때문에 가용성에 문제가 발생한다.(예를 들면 특정 서버가 고장이 났어서 클라이언트 cache에 해당 서버 주소가 있다면 접근을 시도할 것이므로)

TCP/IP Server load balancing

Virtual IP를 이용한 스위칭을 통해 수행되며 LVS(Linux Virtual Server)로 구성된다.
아래 그림과 같이 load balancer 자체의 가용성을 높이기 위해 backup load balancer 채용이 가능하다.



단, 이들 TCP/IP level의 load balancer는 session처리나 caching처리를 application에서 따로 담당해야 하는 단점이 있다.

Caching

어 플리케이션 수준에서 caching이나 session처리를 위한 서버들 사이의 공용 메모리 영역을 설정할 수 있는 솔루션이 필요하다.


cache에 대해서는 위 그림과 같이 구성할 수 있다.
위 그림에서 Server1, Server n은 모두 동일한 Cache Server를 이용할 수 있도록 구성되어 있다.

위와 같은 구조는 spymemcached와 같은 memcached 라이브러리를 이용하여 구성한다.
즉, request에 대해 response와 짝을 이뤄 cache에 저장을 하고 request가 올때마가 cache에서 먼저 검사를 해서 있으면 바로 해당 response를 return하고 그렇지 않은 경우에만 business layer를 구동하는 형태임.

Application session data support

caching 과 session자료는 다른 성격을 갖는다.
즉, cache는 있다면 좋지만 없어도 새로 생성해서 사용할 수 있는 특징이 있지만 session은 반드시 하나씩 있어야 하고 없어져서는 안되는 자료이다. 따라서 cache관련 구조로는 한계가 있고 cookie를 이용하는 방안도 보안 위험성이 높다.

따라서 이런 종류의 경우에 대해서는 application(server software)에서 감당이 되어야 한다.

Client affinity

memcached 구조나 session server 구조를 이용하는 경우 양이 많아지면 network traffic이 필요이상으로 많아 지는 문제가 발생한다. 이를 해결하기 위해서는 한번 접속한 client에 대해서 접속했던 load balancer 하위의 실질서버에 그 이후 요청을 지속으로 보내서 불필요한 network traffic을 막을 수 있다.
LVS에서는 client affinity를 설정에 의해 지정할 수 있다. dial-up 연결에 대해서는 하지만 항상 새로운 연결이라고 여기기 때문에 affinity가 작동하지 않는다는 점을 주의하자.

Part 2: Application-level load balancing


원문 링크 : http://www.javaworld.com/javaworld/jw-10-2008/jw-10-load-balancing-2.html?page=1

part 1에서 언급한 TCP/IP level의 load balancing으로 static web service는 충분한 기능을 수행하지만 dynamic web service에 대해서는 cache의 문제나 session의 문제 등을 원활히 처리하기 위해서는 memcached 구조나 session server 구조 등 부가적인 구조가 필요해 진다.

따라서 이들 dynamic web service에 대해서는 application-level의 load balancing이 필요해진다.



위 그림은 transport level과 app level의 load balancer를 포함하는 구성이다.

위 그림과 같은 tomcat서버의 예는 다음과 같다.



물리적으로 transport-level load balancer와 Apache는 같은 서버가 될 수 있다.

여 기서 application-level load balancer는 요청 HttpRequest로부터 사용자ID나 sessionID등을 이용해 뒷 단의 서버를 선택하는 방식을 이용한다면 cache나 session에 대한 처리 문제를 해결할 수 있으며 cookie값을 이용하는 방법도 이를 해결할 수 있는 solution이다.(물론 사용자가 cookie사용을 제한하는 경우는 사용할 수 없게 되겠지만)

HTTP redirect-based server load balancer

위의 구조와는 달리 redirect 방법을 이용해서 load balancer가 접속해야 하는 서버를 분리 지정해주는 방식이 있을 수 있다.
이는 처음 접속시에만 실질서버를 알지 못하고 이미 접속해서 사용하기 시작하면 실질적인 서버를 알고 그곳에 접속해 서비스를 이용하는 형태가 된다.




이 구조는 2가지 단점을 갖는다.
  1. 외부 인터넷에 서버 구조를 투명하게 공개함으로써 공격 받을 수 있는 영역이 넓다.
  2. 고 가용성에 문제가 있는데 이미 서버를 배정받아 서비스 중인 상황에서 해당 서버가 말썽을 부리면 그곳에서 서비스를 받던 클라이언트는 고스란히 말썽을 감내해야 한다.

Server-side server load balancer interceptor

interceptor 방식으로 구성을 하게 되면 아래 그림과 같은 구조를 가질 수 있다.



위 구성을 사용하게 되면 불필요한 network 이동을 줄일 수 있다는 단점이 있다.(로컬 접속의 경우에 대해서만) 하지만 서버의 scalability를 훼손할 수 있다. 즉, 많은 양의 서버를 증설하는 경우 문제가 발생할 수 있다.

Client-side server load balancer interceptor

아래 그림과 같이 사용하는 경우 가용성이나 확장성을 높일 수 있으나 정상적인 웹서비스를 위해서 cross-domain 문제등을 해결해야 하는데 이런 부분은 매우 program지향적인 작업이 된다.




Application session data support

cache나 session자료에 대한 공유의 문제에 있어 cache는 affinity를 이용해서 자체 해결하도록 할 수 있으며 다만 session자료에 대한 공유가 필요해 진다. 이는 서버들간에 session자료를 공유하는 구조를 갖고 클라이언트에서는 jsessionid를 cookie에 담아 서버에 요청할 때 부가하는 방법을 이용하면 서버가 문제가 생겨 다른 서버로 이동할때에도 문제가 없게 된다. 다만, 서버가 많아 서로간의 session자료 공유가 메모리상 문제가 발생된다면 서버들을 특정 수만큼씩의 그룹으로 나눠 그 그룹내에서만 session자료를 공유하는 방향으로 해결할 수도 있다.

또한 session backup 구조를 이용한다면 서버들 끼리 세션자료를 공유할 필요조차 없어지며 자신이 보유한 sessionid 이외의 요청이 들어오면 backup server에 요청하여 세션자료를 가져와 이용하면 되는 구조이다.


Apache Tomcat load balancing architectures

앞의 내용에서 Apache Tomcat구조의 load balancing 예제를 간단히 살펴보긴 했는데 아래 그림과 같은 구조가 적합할 것이다.


그림에서와 같이 http 서버 전에 tcp/ip level의 load balancer를 LVS를 이용해 구성하고(backup까지 포함해서) Apache 서버에서는 application-level load balancing을 mod_proxy, mod_proxy_balancer를 통해 수행하여 ajp를 통해 뒷단의 tomcat에 전달할 수 있게 된다. 다만, tomcat도 session자료 등 공유해야할 자료가 있는 만큼 session server를 따로 두지 않고 tomcat의 clustering 구조를 이용하여 해결할 수 있다.

In conclusion

client-side load balancing은 쉽고 강력한 방법이긴 하지만 cross domain 문제와 같은 해결에 많은 자원이 소모되는 상황이 발생할 수 있다.

순수한 transport level load balancing은 쉽고, 유연하며 효율적이긴 하지만 cache의 문제와 session자료 문제를 해결하기 위한 공용장소의 필요가 생기게 되며 많은 수의 network traffic이 발생할 가능성이 높아진다.
이런 경우 client affinity를 구현하면 cache와 session에 대한 문제를 상당부분 해소할 수 있게 된다.


출처: http://redtiger.tistory.com/entry/Server-load-balancing-architectures
저작자 표시
Posted by 예진이네집 괴스트
크리에이티브 커먼즈 라이선스
Creative Commons License

김연아 선수가 더욱 대단한 것은 이제 우리나라에서는 (그녀의 명성에 비해서) 슬슬 자중하는데 비해서 해외에서 더욱 인정을 받는다는 것이죠. 정말 온갖 찬사를 다 늘어놓습니다. 그녀는 정말 이제 모든 것을 다 이루었네요.



김연아의 프리 프로그램은 그녀의 외모, 코발트 블루인 드레스, 조지 거쉰의 바장조 음악까지도 아름다운 조화를 이룬다고 찬사에 찬사를 거듭합니다. 너무 감동적으로만 흘러가는 우리나라 해설만 보다가 아낌없이 극찬을 늘어놓는 -  하하 - 해외 각국의 동영상을 보니 제 속이 다 후련합니다.




먼저 마봉춘(MBC)의 후예 나봉춘이라고 불릴 정도로 우리 김연아 선수에게 푹 빠진 미국 NBC 방송국 생방송 동영상입니다.

NBC는 다른 나라와 카메라 앵글이 조금 다릅니다.
김연아 선수가 더욱 아름다워 보일 수 있는 각도에서 김연아 선수의 연기를 보여주네요.

")//]]>

이 방송국은 김연아 선수에게 예전부터 굉장히 호감이었죠.

연기하는 동안은 감상하느라 별 말이 없다가 마지막 점프를 마친 후에는 아직도 음악이 흘러나오고 있음에도..

"오.. 세상에, 이것은 제가 본 올림픽 연기 중에 가장 눈부신 작품입니다."라고 외칩니다.

또한 스캇 해밀턴 분은 "관객들이 모두 연기에 빨려들어갔습니다."라고 하더니...
결국 "여왕 폐하 만세~!!" (Long Live the Queen!!) 라고 외치십니다.




이것은 NBC의 재방송 해설 동영상입니다. (자막 있음.)
본방송 때는 감상하느라고 해설을 잘 못하다가 재방송 때는 처음부터 자세하게 분석 들어가는군요.

")//]]>  




영국 유로 스포츠 채널(EURO SPORTS)입니다. (자막 있음)

")//]]>

"지금 여러분께서는 한국의 모든 TV가 그녀에게 맞춰져 있는 것을 상상할 수 있을 것입니다."

"김. 연아.(또박 또박 발음하며) "

"수퍼스타의 트리플 점프입니다. 지붕이 필요없을 정도로 높습니다."

"믿을 수 없습니다. 그녀의 연기는 눈부시게 아름다웠습니다.!"
"관객들의 반응을 보세요, 모든 국적의 사람들을 말입니다!"

"그녀는 부담을 느낀다고 했는데... 부담은 걱정마세요, 부담은 명예입니다.!"

"그녀는 자신의 나라와 브라이언 오서에게 환상적인 모습으로 보상을 했습니다."

"부담은 무슨 부담입니까? 그녀는 부담 같은 건 느끼지 않아요~!"

"믿을 수 없을 정도에요, 그녀의 연기는 믿을 수 없을 정도의 선수이고, 대단한 사람입니다."

"그녀는 이제 19살입니다."

"그녀의 모든 점프에는 트랜지션이 있어요, 이에 스프레드 이글이 트랜지션이고, 더블 악셀을 넣어 이를 더 어렵게 만들면서, 이런 수준 덕에 심판들에게 점수를 더 줄 기회를 주면서 끝에 트리플 토룹을 합니다. 믿을 수 없을 정도에요"

"아주 아주 쉬워 보이도록 연기합니다. 하지만 저는 말씀드릴 수 있는데, 그(브라이언 오서)도 알고 있듯이 결코 쉽지 않아요."

"그녀의 어깨에서 무게를 내려놓는 것을 보니 보기 좋습니다."




이번에는 일본의 NHK 방송국 해설입니다. (자막 있음)

")//]]>

일본은... 사회자가 김연아에 대해서 호의적인 멘트를 하면 방송국에 항의 전화가 그렇게 많이 온다고 하네요..
그래서인지 시종 일관 조용한 편입니다.

그렇지만 일본 해설자들도 거장의 위대한 연기에는 어쩔 수가 없었는지 연기를 마친 후에는 역시나 감탄사를 연발합니다.

"대단합니다. 이 중압감에서 물 흐르듯이 자신의 연기를 펼친 김연아.."

"엄청난 집중력이네요."
"그렇군요."

"저 엄청난 압박감 속에서 처음부터 끝까지 자기 자신에게 집중하여 자신만의 연기를 펼쳤다는 것이 대단합니다."
"그렇군요." 

 - 저 대단한 연기를 보고 계속적으로 집중력 이야기 하고 있습니다.ㅡㅡ;;;




다음은 중국의 CCTV입니다. (자막 있음)

")//]]>

"그녀는 한국의 피겨스케이팅의 선구자입니다."


"천 번의 점프는 이 한 번의 비상을 위한 것이었습니다."

그리고는 그녀의 적수 아사다 마오가 두 개의 트리플 악셀을 준비하고 있는데 이는 상당히 위협적이라고 말합니다.
그녀의 점수 '150.06 (78.30 + 71.76)가 발표되자,
"기술점 78.30!! 그 어느 선수가 이런 점수를 받을 수 있겠습니까?" 라고 놀라워하는군요.



러시아... 해설은 해설인데.... 자막이 없습니다...

")//]]>




그 다음에 소개해 드릴 것은 독일의 유로 스포츠 채널인데요. (자막 있음)
김연아 선수에게 굉장한 찬사를 늘어놓고도 어떤 미사여구를 붙여도 어울리지 않을 정도라고 합니다.

")//]]>

이 분들은 대놓고 "한국에서 온 피겨 천재"라고 소개를 해주네요.

게다가 김연아 선수를 '킴요나 혹은 요나~킴'이라고 하지 않고
"김.연.아., 이게 그녀 이름의 제대로 된 발음이죠. 한 동료가 제대로 발음하는 법을 가르쳐 주었다."고 자랑까지 하십니다. 하하.
시작할 때 - "김연아, 그녀와 함께 하는 올림픽, 위대한 순간입니다."

끝났을 때 -
"시청자 여러분, 지금 이 순간은 피겨스케이팅 역사의 위대한 한 순간입니다."
"완벽한 연기입니다. 어떠한 결점도 찾아볼 수 없는 완벽한 연기입니다.
최소한의 흔들림도, 최소한의 불안정도 없었습니다.!
이는 역사에 길이 남을 연기였습니다. 우리는 몇번이고 이 연기를 다시 보게 될 것입니다."

"100년 만에 한 번 나올까 말까한 연기였습니다.
또한 월드 챔피언쉽이 생긴 이래로 남싱 경기에서 메달을 겨룰 수 있는 최초의 여자 선수입니다." 

"그녀는 앞으로 지속적으로 영향을 미칠 것이며, 그녀는 전혀 다른 차원에서 그녀 자신 만의 경기를 하며, 그녀 자신 만의 리그를 가지고 있습니다."

"마치 화가가 붓을 놀리듯 가볍게 점프를 하며, 어떠한 최상급의 수식어로도 이 젊은 여성을 묘사할 수 없을 것입니다."

"시청자 여러분, 지금 보시는 선수가 금메달리스트 김.연.아.(또박또박 발음하며), 한국에서 왔습니다."

점수가 나왔을 때 - "150.06! (몇 번이고 다시 외치며) 맙소사! 이게 맞나요? 단지 프리 프로그램으로만?? 오! 세상에!!"
"그녀는 여태까지 있었던 모든 것을 갈아치우는 군요. 믿을 수 없습니다!"

그녀가 연기하는 동안에는 조용히 감상하다가 끝난 후에는 온갖 최상급의 극찬을 늘어놓다가 해설이 끝납니다.


촐처: http://v.daum.net/link/5987239
저작자 표시
Posted by 예진이네집 괴스트

PHP ftp 함수모음

Dev/php / 2010/02/23 09:46
크리에이티브 커먼즈 라이선스
Creative Commons License
1. ftp_connect : FTP서버에 연결한다.
int ftp_connect (string host [, int port]) 
$ftp = ftp_connect("서버주소 또는 도메인명", 21);

2. ftp_login : 계정과 패스워드로 서버에 접근한다.
int ftp_login (int ftp_stream, string username, string password) 
$ftplogin = ftp_login($ftp, "$ftp_user_name", "$ftp_user_pass");

3. ftp_pwd : 현재 디렉토리 값을 리턴한다.
int ftp_pwd (int ftp_stream) 
$ftp_dir = $ftp_pwd($ftp);

4. ftp_cdup : 가장 상위 디렉토리로 이동
int ftp_cdup (int ftp_stream) 
$ftp_dir = $ftp_cdup($ftp);

5. ftp_chdir : FTP 디렉토리의 변경
int ftp_chdir (int ftp_stream, string directory) 
$chdir = ftp_chdir($ftp, $ftp_dir);

6. ftp_mkdir : 디렉토리를 만들고 만든 디렉토리명을 반환한다.
string ftp_mkdir (int ftp_stream, string directory) 
$mkdir = ftp_mkdir($ftp, "만들 디렉토리명");

7. ftp_rmdir : 디렉토리를 삭제한다.
int ftp_rmdir (int ftp_stream, string directory) 
$mkdir = ftp_rmdir($ftp,"삭제할 디렉토리명");

8. ftp_nlist : 디렉토리의 파일이름을 배열로 반환한다.
int ftp_nlist (int ftp_stream, string directory) 
$contents = ftp_nlist($ftp, "디렉토리명");

9. ftp_rawlist : 디렉토리의 파일이름과 읽고 쓰고 실행할 권한을 파일 당 한 줄의 배열로 반환한다.
int ftp_rawlist (int ftp_stream, string directory) 
$contents = ftp_rawlist($ftp, "디렉토리명");

10. ftp_systype : FTP서버의 타입을 리턴하는데 리눅스는 UNIX로 표시해준다.
int ftp_systype (int ftp_stream) 
echo ftp_systype($ftp);

11. ftp_get : FTP로부터 파일을 다운로드 받는다.
int ftp_get (int ftp_stream, string local_file, string remote_file, int mode) 
$download = ftp_get($ftp, "저장할 파일명", "다운받을 파일명","FTP_ASCII or FTP_BINARY");

12. ftp_fget : FTP로부터 파일 포인터를 다운받는다.
int ftp_fget (int ftp_stream, int fp, string remote_file, int mode) 
$download = ftp_fget($ftp, "저장할 파일명", "다운받을 파일명", "FTP_ASCII or FTP_BINARY");

13. ftp_put : FTP서버에 파일을 업로드 한다.
int ftp_put (int ftp_stream, string remote_file, string local_file, int mode) 
$upload = ftp_put($ftp, "업로드할 파일명", "업로드될 파일명", "FTP_ASCII or FTP_BINARY");

14. ftp_fput : FTP서버에 파일 포인터를 업로드한다.
int ftp_fput (int ftp_stream, string remote_file, string local_file, int mode) 
$upload = ftp_fput($ftp, "업로드할 파일명", "업로드될 파일명", "FTP_ASCII or FTP_BINARY");

15. ftp_size : 파일의 사이즈를 구한다.
int ftp_size (int ftp_stream, string remote_file) 
$filesize = ftp_size($ftp, $contents[$i]);
ftp_nlist 나 ftp_rawlist에 의해 구한 파일명에 대한 배열값인 $contents[$i]에는 각 파일명과 속성이 저장되어지는데 이 파일명을 사이즈로 구하면 파일이면 사이즈가 리턴되고 디렉토리이면 -1이 리턴된다.

16. ftp_mdtm : 파일의 마지막 수정시간을 timestamp 값으로 리턴한다.
int ftp_mdtm (int ftp_stream, string remote_file) 
$filemdth = ftp_size($ftp, "파일명");

17. ftp_rename : 파일명을 변경한다.
int ftp_rename (int ftp_stream, string from, string to) 
$rename = ftp_rename($ftp, "바꿀 파일명", "바뀐 후 파일명");

18. ftp_delete : 해당 파일을 삭제한다.
int ftp_delete (int ftp_stream, string path) 
$delfile = ftp_delete($ftp, "지울 파일명");

19. ftp_quit : 연결된 FTP의 접속을 끊는다.
int ftp_quit (int ftp_stream) 
ftp_quit ($ftp);


출처: ?
저작자 표시
Posted by 예진이네집 괴스트

최근에 달린 댓글

최근에 받은 트랙백

글 보관함