[PHP] No space left on device (28) - error message

Posted at 2009/11/05 17:06 // in 웹프로그래밍™/PHP, ASP // by 블루비
아래와 같은 PHP 에러 메시지가 발생되는 경우는
세션을 저장하는 파티션 또는 디렉토리(/tmp) 사용율이 100% 일때 발생합니다.
No space left on device (28)
세션을 저장하는 디렉토리를 비워보세요~~!!!


2009/11/05 17:06 2009/11/05 17:06
  1. 아즈키

    2009/11/05 18:04 [수정/삭제] [답글]

    그렇군요. 꽉차면 저런 메시지가 뜨는군요!

    • 블루비

      2009/11/06 09:24 [수정/삭제]

      저 메시지 말고도 추가 메시지가 더 나오는데 거기에 보면 session.save_path 과련 메시지도 보입니다.

      갑자기 모든 사이트에 저런 메시지가 보이길래 서버쪽 문제인거 같아 찾아 보니.. 역시나 .. full disk

댓글을 남겨주세요.

[로그인][오픈아이디란?]

The CheatSheet - CakePHP 1.2

Posted at 2009/10/20 09:26 // in 웹프로그래밍™/CakePHP // by 블루비
CakePHP 1.2 Cheatsheet

CakePHP 1.2 Cheatsheet





http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf

2009/10/20 09:26 2009/10/20 09:26

댓글을 남겨주세요.

[로그인][오픈아이디란?]

WordPress 2.7 ERD

Posted at 2009/10/19 09:29 // in 웹프로그래밍™ // by 블루비
WordPress ERD 2.7

WordPress ERD 2.7



http://codex.wordpress.org/Database_Description/2.7

PHP기반 설치형 블로그툴 워드프레스(WordPress)는 ERD를 제공하고 있습니다.
ERD를 보고 있자니 이넘을 한번 분석해보고 싶은 마음이 생기는 군요.....





2009/10/19 09:29 2009/10/19 09:29

댓글을 남겨주세요.

[로그인][오픈아이디란?]

CakePHP Email Encoding

Posted at 2009/10/01 08:55 // in 웹프로그래밍™/CakePHP // by 블루비

$
this->Email->charset = 'utf-8';

$this->Email->from = '블루비 <blog @ blueb . net>';
$this->Email->to = '블루비 <blog @ blueb . net>';
$this->Email->subject = 'CakePHP Email Test';
$this->Email->template = 'test'; //views/elements/email/html/test.ctp
$this->Email->sendAs = 'both'; // text, html or both
$this->Email->send();

2009/10/01 08:55 2009/10/01 08:55

댓글을 남겨주세요.

[로그인][오픈아이디란?]

PHP Fest 2009 실용주의 PHP 세미나 안내

Posted at 2009/09/23 09:19 // in 웹프로그래밍™/PHP, ASP // by 블루비
PHP Fest 2009 실용주의 PHP

PHP Fest 2009 실용주의 PHP



PHP 개발자 세미나가 있었네요 작년에도 진행했던거 같은데 처음 알았습니다.
되도록 참여 하고 싶지만 일정이 애매한상태라 일단 보류중입니다.

일시 : 2009년 10월 10일(토), 12:30 ~ 18:20
장소 : 대치동 포스코센터 서관 5층 한국마이크로소프트
주최 : PHP Korea
주관 : 월간마이크로소프트웨어
문의 : phpfest @ phpkorea . org
참가비 : 2,000월(수익금전액 자유소프트웨어재단에 기부된다고 합니다.)

세미나 내용
- CodeIgniter 프레임워크 소개(최용운, Marsh)
- PHP TDD (용영환,NHN)
- MySQL + PHP 기반 응용을 CUBRID + PHP로 포팅하기 ( 남재우, 큐브리드 )
- Extreme RIA = Silverlight3 + PHP (김영욱, 한국MS)
- SCRUM 방법론 적용 사례 공유 (김명구, NHN)


CodeIgniter 프레임워크만 소개 하는게 좀 아쉽네요 CakePHP 도 하나 넣어주시지. ㅋㅋ
시간이 허락한다면 참여해야겠습니다!

세미나 신청하기




2009/09/23 09:19 2009/09/23 09:19
  1. 아즈키

    2009/09/23 10:08 [수정/삭제] [답글]

    저는 이미 일주일전에 결제까지 했어요 ㅋㅋ
    혹시 오시면 뵙겠네요 ^^;
    작년에 CakePHP 했다고 들었는데 아마 그래서 안들어간 것 같아요

댓글을 남겨주세요.

[로그인][오픈아이디란?]

CKEditor 로 다시 태어난 FCKeditor

Posted at 2009/09/03 12:32 // in 웹프로그래밍™ // by 블루비
6년간 FCKEditor 라는 이름으로 위지윅 에디터 시장 1위를 달리던 FCKEditor 가 2009년 새로운 이름 "CKEditor" 으로 위지윅 시장에 다시 뛰어 들었다.

새로운 디자인, 성능향상, 접근성 등 많은 부분 업그레이드 되어 돌아왔다.
현재 lastest version 은 3.0 으로 FCKEditor 2.6.4 버전의 후속 버전이다.

현재 라이센스는 기존과 마찬가지로
오픈소스 라이센스와 상업용 라이센스를 체택하고 있다.
오픈소스 라이센스는 개인이나 교육용 사용자 및 오픈소스 소프트웨어에서 무료로 사용할 수 있으며
상업용 라이센스로 제품화 및 소스코드를 공개할 필요가 없게 된다.
자세한 리이센스 내용은 여기를 통해 확인하기 바란다.

네이밍이 바뀌면서 도메인 주소(http://fckeditor.com -> http://ckeditor.com)도 바뀌었다.
기존 http://fckeditor.com 으로 접속을 하게 되면 http://ckeditor.com 으로 리다이렉트 된다.

웹표준 및 접근성을 위해서라도 이제는 ckeditor로 갈아 타야 할듯 하다.



CKEditor

CKEditor

2009/09/03 12:32 2009/09/03 12:32
  1. 녹풍

    2009/12/04 15:46 [수정/삭제] [답글]

    저도 이 사실을 얼마 전에 알았답니다. ;; 바뀐건 꽤 된 것 같던데 말이죠. ckeditor 같은 해외 위지윅들은 국산 에디터들보다 웹표준에 훨씬 잘 맞는 코드를 만들어주는 것 같아요. 짧은 지식에 인상적 판단이지만 말예요.

  2. 이형민

    2009/09/08 16:58 [수정/삭제] [답글]

    정보 잘보았습니다. 감사합니다.

  3. 김천곤

    2010/01/19 22:32 [수정/삭제] [답글]

    제가 웹관리 지식이 아주 초보라 무식한 질문이 될지도 모르겠네요. 이 CKeditor를 사이트 계정에 올려서 이용한다는 것은 이해하겠는데 구체적으로는 어떻게 사용하는 것입니까? 예를 들면, 이 프로그램을 사용하면 관리하고자 하는 웹사이트 첫페이지를 웹상에서 수정할 수 있다는 의미인가요? 그렇다면, 어떤식으로 그 파일을 열고 수정하고 저장해야 하는지 등의 방법이 궁금합니다.
    관련 내용이 있는 링크만 알려주셔도 고맙겠습니다.

    • 블루비

      2010/01/31 16:42 [수정/삭제]

      CKeditor 는 html코드상에 자바스크립트로 구동이 됩니다... 드림위버와 같은 위지윅 에디터만 제공을 한다고 생각하시면 됩니다.

      파일을 열고 수정하는 방법은 데이터 베이스와 연동을 해야 합니다.
      php, jsp, asp와 같은 웹언어 그리고 데이터 베이스( MySQL, MsSQL, Oracle .. ) 를 통해서 구현을 해야겠지요~~!!!

      웹프로그래머가 해야 할 일입니다..... 관리적인 측면과는 다소 거리가 있죠~~!!!

댓글을 남겨주세요.

[로그인][오픈아이디란?]

IIS7 + CakePHP + URL Rewrite

Posted at 2009/08/04 12:47 // in 웹프로그래밍™/CakePHP // by 블루비
Windows Server 2008에서 CakePHP를 서비스 할 수 있습니다.
IIS7에는 URL Rewrite 모듈을 추가 하여 Apache Mod_Rewrite 모듈과 같이 Fancy URL을 사용할 수 있습니다.


사용자 삽입 이미지
URL Rewrite 모듈을 다운 받아 설치 하시면 위에 보시는 봐와 같이 URL Rewrite 가 보입니다.

사용자 삽입 이미지
CakePHP의 Fancy URL을 사용하기 위해 URL Rewrite 모듈을 이용하여 Rule을 추가 해줍니다.
위 모듈을 설정하시면 web root 에 web.config xml 파일에 생성이 됩니다.
처음 UI 패널을 통해 등록하시기는 좀 어려우시니 web.config 파일에 직접 등록하셔되 됩니다.

web.config 파일 소스입니다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<defaultDocument>
<files>
<add value="index.php" />
</files>
</defaultDocument>
<rewrite>
<rules>
<rule name="Imported Rule CSS" stopProcessing="true">
<match url="^css(.*)$" ignoreCase="false" />
<action type="Rewrite" url="webroot/css{R:1}" />
</rule>
<rule name="Imported Rule JS" stopProcessing="true">
<match url="^js(.*)$" ignoreCase="false" />
<action type="Rewrite" url="webroot/js{R:1}" />
</rule>
<rule name="Imported Rule IMG" stopProcessing="true">
<match url="^img(.*)$" ignoreCase="false" />
<action type="Rewrite" url="webroot/img{R:1}" />
</rule>
<rule name="Imported Rule Images" stopProcessing="true">
<match url="^images(.*)$" ignoreCase="false" />
<action type="Rewrite" url="webroot/images{R:1}" />
</rule>
<rule name="Imported Rule Flash" stopProcessing="true">
<match url="^flash(.*)$" ignoreCase="false" />
<action type="Rewrite" url="webroot/flash{R:1}" />
</rule>
<rule name="Imported Rule Files" stopProcessing="true">
<match url="^files(.*)$" ignoreCase="false" />
<action type="Rewrite" url="webroot/files{R:1}" />
</rule>


<rule name="Imported Rule 3" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" pattern="" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
<handlers>
<add name="php5" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe" resourceType="Unspecified" />
</handlers>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>

Default 문서를 셋팅하기 위해 아래 내용도 같이 추가 해주시면 됩니다

<defaultDocument>
<files>
<add value="index.php" />
</files>
</defaultDocument>


사용자 삽입 이미지
IIS7 에서 PHP를 실행 할 수 있도록 http://windows.php.net/download/ 에서 VC9 x86 Non Thread Safe Zip 파일을 다운받아 c:\PHP 폴더를 만들고 압출을 풀어 "처리기 매핑"을 통해 모듈매핑추가를 해줍니다.
2009/08/04 12:47 2009/08/04 12:47

댓글을 남겨주세요.

[로그인][오픈아이디란?]

[CakePHP] multiple language url connection : /lang/controller/action

Posted at 2009/07/08 10:13 // in 웹프로그래밍™/CakePHP // by 블루비
CakePHP 를 다국어로 접속가능 하도록 하기 위한 설정내용입니다.

일반적으로 uri 접속시 /controller/action 으로 접속하게 됩니다.
언어별 접속을을 위해 /lang/controller/action 과 같이 controller가 아닌 language로 시작할 수 있습니다.


언어별 약어 표현은 ISO 639-2 Language Code 참조 하세요


1. 기본 언어를 설정하기 위해 core.php 파일에 아래 코드를 추가합니다.
app/config/core.php
Configure::write('Config.language', 'kor');

2. /lang/controller/action 과 같은 url 접속을 위해 router.php 파일에 아래 코드를 추가합니다.
app/config/router.php
Router::connect('/:language/:controller/:action/*', array(), array('language' => '[a-z]{3}'));

3. 언어별 접속시 switching 하기위해서 app_controller.php 파일에 아래 코드를 추가합니다.
(app_controller.php 파일이 없는 경우는 생성합니다.)
app/app_controller.php
class AppController extends Controller {

function beforeFilter(){
$this->_setLanguage();
}

function _setLanguage() {

if ( $this->Cookie->read('lang') && !$this->Session->check('Config.language')){
$this->Session->write('Config.language', $this->Cookie->read('lang'));
}
else if( isset($this->params['language'] ) && ($this->params['language'] != $this->Session->read('Config.language')) ){
$this->Session->write('Config.language', $this->params['language']);
$this->Cookie->write('lang', $this->params['language'], true, '20 days');
}
else if ( !isset($this->params['language']) && isset($this->params['named']['language']) && ($this->params['named']['language'] != $this->Session->read('Config.language'))) {
$this->Session->write('Config.language', $this->params['named']['language']);
$this->Cookie->write('lang', $this->params['named']['language'], true, '20 days');
}
else if( !isset($this->params['language']) && !isset($this->params['named']['language']) && $this->Cookie->read('lang') != Configure::Read('Config.language') ){
$this->Session->write('Config.language', Configure::Read('Config.language'));
$this->Cookie->write('lang', Configure::Read('Config.language'), true, '20 days');
}

}
}//end of class AppController

4. 각 언어별 default.po 파일을 생성합니다.
msgid , msgstr 을 이용하여 메시지 내용을 셋팅합니다.
/app/locale/eng/LC_MESSAGES/default.po
msgid "num"
msgstr "No"

msgid "file"
msgstr "File"
/app/locale/kor/LC_MESSAGES/default.po
msgid "num"
msgstr "번호"

msgid "file"
msgstr "파일"

5. view 파일에서 __() 메쏘드와 locale의 msgid를 사용합니다.
<?=__("num");?> >> 번호
<?=$this->link(__("num",true),array('/'));?> >> <a href="/">번호</a>

6. 각 언어별로 접속시 자동으로 언어별 메시지가 switching 됩니다.
http://blueb.net/controller/action (kor language)
http://blueb.net/eng/controller/action (eng language)




2009/07/08 10:13 2009/07/08 10:13

댓글을 남겨주세요.

[로그인][오픈아이디란?]

[JAVA] RegExp (정규 표현식)

Posted at 2009/07/01 21:45 // in 웹프로그래밍™/JSP,JAVA // by 블루비

<%
import!
java.util.regex.*; // Pattern과 Matcher가 속한 패키지

class RegularEx5
{
public static void main(String[] args)
{
String source = "23123()asdawe()23123()asdawe()23123()asdawe()";
String pattern = "\\d+\\(\\)";// 숫자(\\d)뒤에오는 괄호를 패턴으로 지정
// \d는 숫자를 의미하며 +는 하나이상의 숫자가 있어야함을 의미
// 괄호는 예약문자(?)이므로 \\를 앞에 붙여줘야 괄호로 인식
// 괄호앞에 \\를 붙이지 않으면 그룹화문자로 인식한다.
// \를 \\와 같이 두개씩 쓰는 이유는
//문자열 내에서 \를 표현하려면 두개 써줘야하기 때문


StringBuffer sb = new StringBuffer();

Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(source);

System.out.println("source:"+source);

int i=0;
while(m.find()) {

// 지정한 패턴과 매칭되는 부분을 치환한다. 마지막 두글자인 괄호를 잘라내고
// 원하는 문자(@@)로 바꾼다.
// find()를 통해서 패턴과 일치하는 부분은 m.group()을 통해서 얻는다.
m.appendReplacement(sb, m.group().substring(0, m.group().length()-2)+"@@");
}//end of while

m.appendTail(sb);
System.out.println("result:"+sb.toString());
}
}

/*
source:23123()asdawe()23123()asdawe()23123()asdawe()
result:23123@@asdawe()23123@@asdawe()23123@@asdawe()
*/

%>



숫자뒤에오는 ()를 @@로 바꾼겁니다.


ex)정규식 사용예

package test.regEx;

import! java.util.regex.*; // Pattern과 Matcher가 속한 패키지

class RegularEx {
public static void main(String[] args) {
String[] data = { "bat", "baby", "bonus", "c", "cA", "co", "c.",
"c0", "c#", "car", "combat", "count", "date", "disc", "mmcard", "mmca",
"ca", "ca&&", "^ca", "*ca~", "#*&ca)^(", "yraa*ca#iiop", "yraa*ca&", "yraa*ca", "ca^7ae", ")ca^7ae", "aa''ca%", "'(ca%^bc", "vv'(ca%^bc",
"dca~", "*ca0", "*ca0^", "%*ca0", "%*ca0ca^^", "%*ca가^^", "%*ㄱca^^",
"^@", "&*@~", "@_~", "@@", "#@@*", "*@@", "aa*@@", "yraa*@@(fa", "*@@0", "@@0", "aa''@%", "aa''@%(aa", "''@%(aa", "'@%(aa",
"**@rd", "mm@^^", "*@0*", "*@0@*", "*@ㄱ@*", "*@ㄱ*", "ㄱ@*"};
String[] pattern = { ".*", "c[a-z]*", "c[a-z]", "c[a-zA-Z]",
"c[a-zA-Z0-9]", "c.", "c.*", "c\\.", "c\\w", "c\\d", "c.*t",
"[b|c].*", ".*a.*", ".*a.+", "[b|c].{2}","[a-z]*ca[a-z]*",
"[^a-zA-Z0-9ㄱ-힣]*@[^a-zA-Z0-9ㄱ-힣]*", "@[^a-zA-Z0-9ㄱ-힣].*", "[a-zA-Z0-9ㄱ-힣]*[^a-zA-Z0-9ㄱ-힣]@", "[^a-zA-Z0-9ㄱ-힣]*@[^a-zA-Z0-9ㄱ-힣].*", "[a-zA-Z0-9ㄱ-힣]*[^a-zA-Z0-9ㄱ-힣]@[^a-zA-Z0-9ㄱ-힣].*",
"[^a-zA-Z0-9ㄱ-힣]*ca[^a-zA-Z0-9ㄱ-힣]*", "ca[^a-zA-Z0-9ㄱ-힣].*", "[a-zA-Z0-9ㄱ-힣]*[^a-zA-Z0-9ㄱ-힣]ca", "[^a-zA-Z0-9ㄱ-힣]*ca[^a-zA-Z0-9ㄱ-힣].*", "[a-zA-Z0-9ㄱ-힣].*[^a-zA-Z0-9ㄱ-힣]ca[^a-zA-Z0-9ㄱ-힣].*"};

for (int x = 0; x < pattern.length; x++) {
Pattern p = Pattern.compile(pattern[x]);
System.out.print("Pattern : " + pattern[x] + " 결과: ");
for (int i = 0; i < data.length; i++) {
Matcher m = p.matcher(data[i]);
if (m.matches())
System.out.print(data[i] + ", ");
}
System.out.println();
}
} // public static void main(String[] args)
}

/*

Pattern : .* 결과: bat, baby, bonus, c, cA, co, c., c0, c#, car, combat, count, date, disc, mmcard, mmca, ca, ca&&, ^ca, *ca~, #*&ca)^(, yraa*ca#iiop, yraa*ca&, yraa*ca, ca^7ae, )ca^7ae, aa''ca%, '(ca%^bc, vv'(ca%^bc, dca~, *ca0, *ca0^, %*ca0, %*ca0ca^^, %*ca가^^, %*ㄱca^^, ^@, &*@~, @_~, @@, #@@*, *@@, aa*@@, yraa*@@(fa, *@@0, @@0, aa''@%, aa''@%(aa, ''@%(aa, '@%(aa, **@rd, mm@^^, *@0*, *@0@*, *@ㄱ@*, *@ㄱ*, ㄱ@*,
Pattern : c[a-z]* 결과: c, co, car, combat, count, ca,
Pattern : c[a-z] 결과: co, ca,
Pattern : c[a-zA-Z] 결과: cA, co, ca,
Pattern : c[a-zA-Z0-9] 결과: cA, co, c0, ca,
Pattern : c. 결과: cA, co, c., c0, c#, ca,
Pattern : c.* 결과: c, cA, co, c., c0, c#, car, combat, count, ca, ca&&, ca^7ae,
Pattern : c\. 결과: c.,
Pattern : c\w 결과: cA, co, c0, ca,
Pattern : c\d 결과: c0,
Pattern : c.*t 결과: combat, count,
Pattern : [b|c].* 결과: bat, baby, bonus, c, cA, co, c., c0, c#, car, combat, count, ca, ca&&, ca^7ae,
Pattern : .*a.* 결과: bat, baby, car, combat, date, mmcard, mmca, ca, ca&&, ^ca, *ca~, #*&ca)^(, yraa*ca#iiop, yraa*ca&, yraa*ca, ca^7ae, )ca^7ae, aa''ca%, '(ca%^bc, vv'(ca%^bc, dca~, *ca0, *ca0^, %*ca0, %*ca0ca^^, %*ca가^^, %*ㄱca^^, aa*@@, yraa*@@(fa, aa''@%, aa''@%(aa, ''@%(aa, '@%(aa,
Pattern : .*a.+ 결과: bat, baby, car, combat, date, mmcard, ca&&, *ca~, #*&ca)^(, yraa*ca#iiop, yraa*ca&, yraa*ca, ca^7ae, )ca^7ae, aa''ca%, '(ca%^bc, vv'(ca%^bc, dca~, *ca0, *ca0^, %*ca0, %*ca0ca^^, %*ca가^^, %*ㄱca^^, aa*@@, yraa*@@(fa, aa''@%, aa''@%(aa, ''@%(aa, '@%(aa,
Pattern : [b|c].{2} 결과: bat, car,
Pattern : [a-z]*ca[a-z]* 결과: car, mmcard, mmca, ca,
Pattern : [^a-zA-Z0-9ㄱ-힣]*@[^a-zA-Z0-9ㄱ-힣]* 결과: ^@, &*@~, @_~, @@, #@@*, *@@,
Pattern : @[^a-zA-Z0-9ㄱ-힣].* 결과: @_~, @@, @@0,
Pattern : [a-zA-Z0-9ㄱ-힣]*[^a-zA-Z0-9ㄱ-힣]@ 결과: ^@, @@,
Pattern : [^a-zA-Z0-9ㄱ-힣]*@[^a-zA-Z0-9ㄱ-힣].* 결과: &*@~, @_~, @@, #@@*, *@@, *@@0, @@0, ''@%(aa, '@%(aa,
Pattern : [a-zA-Z0-9ㄱ-힣]*[^a-zA-Z0-9ㄱ-힣]@[^a-zA-Z0-9ㄱ-힣].* 결과: #@@*, *@@, aa*@@, yraa*@@(fa, *@@0, '@%(aa,
Pattern : [^a-zA-Z0-9ㄱ-힣]*ca[^a-zA-Z0-9ㄱ-힣]* 결과: ca, ca&&, ^ca, *ca~, #*&ca)^(,
Pattern : ca[^a-zA-Z0-9ㄱ-힣].* 결과: ca&&, ca^7ae,
Pattern : [a-zA-Z0-9ㄱ-힣]*[^a-zA-Z0-9ㄱ-힣]ca 결과: ^ca, yraa*ca,
Pattern : [^a-zA-Z0-9ㄱ-힣]*ca[^a-zA-Z0-9ㄱ-힣].* 결과: ca&&, *ca~, #*&ca)^(, ca^7ae, )ca^7ae, '(ca%^bc,
Pattern : [a-zA-Z0-9ㄱ-힣].*[^a-zA-Z0-9ㄱ-힣]ca[^a-zA-Z0-9ㄱ-힣].* 결과: yraa*ca#iiop, yraa*ca&, aa''ca%, vv'(ca%^bc,

*/


[참고]쌍따옴표(")내에서 escape문자(\)를 표현하려면 escape문자를 '\'와 같이 두 번 사용해야한다.


자주 쓰일 만한 몇 가지 패턴들을 만들어서 테스트하였다. 그 결과를 정리해보면 다음과 같다.


pattern0 = "[^가-힣]" '한글만
pattern1 = "[^-0-9 ]" '숫자만
pattern2 = "[^-a-zA-Z]" '영어만
pattern3 = "[^-가-힣a-zA-Z0-9/ ]" '숫자와 영어 한글만
pattern4 = "<[^>]*>" '태그만

pattern5 = "[^-a-zA-Z0-9/ ]" '영어 숫자만


정규식

설명

결과

c[a-z]*

c로 시작하는 영단어

c,ca,co,car,combat,count,

c[a-z]

c로 시작하는 두 자리 영단어

ca,co,

c[a-zA-Z]

c로 시작하는 두 자리 영단어

(a~z 또는 A~Z, 즉 대소문자 구분안함)

cA,ca,co,

c[a-zA-Z0-9]

c\w

c로 시작하고 숫자와 영어로 조합된 두 글자

cA,ca,co,c0,

.*

모든 문자열

bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,date,disc,

c.

c로 시작하는 두 자리

cA,ca,co,c.,c0,c#,

c.*

c로 시작하는 모든 문자열(기호포함)

cA,ca,co,c.,c0,c#,car,combat,count,

c\.

c.와 일치하는 문자열

'.'은 정규식표현에 사용되는 문자이므로 escape문자인 ''를 사용해야한다.

c.,

c\d

c[0-9]

c와 숫자로 구성된 두 자리 문자열

c0,

c.*t

c로 시작하고 t로 끝나는 모든 문자열

combat,count,

[b|c].*

[bc].*

[b-c].*

b 또는 c로 시작하는 문자열

bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,

[^b|c].*

[^bc].*

[^b-c].*

b 또는 c로 시작하지 않는 문자열

date,disc,

.*a.*

a를 포함하는 모든 문자열

* : 0 또는 그 이상의 문자

bat,baby,ca,car,combat,date,

.*a.+

a를 포함하는 모든 문자열.

+: 1 또는 그 이상의 문자

+는 *과는 달리 반드시 하나 이상의 문자가 있어야 하므로 a로 끝나는 단어는 포함되지 않았다.

bat,baby,car,combat,date,

[b|c].{2}

b 또는 c로 시작하는 세 자리 문자열.

(b 또는 c 다음에 두 자리이므로 모두 세 자리)

bat,car,

2009/07/01 21:45 2009/07/01 21:45

댓글을 남겨주세요.

[로그인][오픈아이디란?]

[JSP] web.xml - <error-page> 에러에 페이지 설정

Posted at 2009/06/30 20:44 // in 웹프로그래밍™/JSP,JAVA // by 블루비
JSP 에서 HTTP 에러 페이지를 설정을 위한 설정 입니다.

/WEB-INF/web.xml 파일에 다음과 같이 추가

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>http://blueb.net/blog</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>

<error-page>
<error-code>404</error-code>
<location>/error/code404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/code500.jsp</location>
</error-page>

</web-app>




code404.jsp , code500.jsp 페이지를 /error 디렉토리에서 생성합니다.


code404.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
response.setStatus(HttpServletResponse.SC_OK);
%>
<html>
<head>
<title>404 Not Found</title>
</head>
<body>The server has not found anything matching the Request-URI. No indication is given of whether the condition is temporary or permanent. The 410 (Gone) status code SHOULD be used if the server knows, through some internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding address. This status code is commonly used when the server does not wish to reveal exactly why the request has been refused, or when no other response is applicable. </body>
</html>


code500.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
response.setStatus(HttpServletResponse.SC_OK);
%>
<html>
<head>
<title>500 Internal Server Error</title>
</head>
<body>
The server encountered an unexpected condition which prevented it from fulfilling the request.
</body>
</html>


셋팅이 끝났다면

WAS 엔진을 제 가동합니다.

2009/06/30 20:44 2009/06/30 20:44

댓글을 남겨주세요.

[로그인][오픈아이디란?]

언어별 Redirect

Posted at 2009/06/30 20:37 // in 웹프로그래밍™/JSP,JAVA // by 블루비
언어별 Redirect

JSP
<% response.sendRedirect("http://blueb.net/blog"); %>

ASP
<% Response.Redirect "http://blueb.net/blog" %>

PHP
<? header("Location: http://blueb.net/blog"); exit; ?>

HTML
<meta http-equiv='refresh' content='0;url=http://blueb.net/blog'>

Javascript

<script type="text/javascript">
window.location.href = 'http://blueb.net/blog'
</script>

2009/06/30 20:37 2009/06/30 20:37

댓글을 남겨주세요.

[로그인][오픈아이디란?]

CakePHP를 위한 OpenID component

Posted at 2009/06/18 11:16 // in 웹프로그래밍™/CakePHP // by 블루비
CakePHP 에서 사용할 수 있는 OpenID 컴포넌트 입니다.

설치 방법

  • OpenID component 를 다운받습니다.
  • “app/controllers/components” 위치에 다운받은 openid.php 파일을 복사 합니다.
  • PHP OpenID Library 2.1.x 를 다운 받습니다.
  • “Auth” 디렉토리를 “vendors” 디렉토리에 복사합니다.
  • “Auth/OpenID/Consumer.php” 파일 소스을 변경해주세요
    if (Auth_OpenID::arrayGet($q, $key) != $value) {

    on line 922 with

    if ($key != 'url' && Auth_OpenID::arrayGet($q, $key) != $value) {
  • EAUT library 를 다운받은 후 , Email.php 파일을 Auth/Yadis 디렉토리에 복사합니다.
  • controller(s) 에서 component 를 추가하여 사용할 수 있습니다:
    public $components = array('Openid');

사용 예제

Login form (app/views/users/login.ctp):

<?php
if (isset($message)) {
echo '<p class="error">'.$message.'</p>';
}
echo $form->create('User', array('type' => 'post', 'action' => 'login'));
echo $form->input('OpenidUrl.openid', array('label' => false));
echo $form->end('Login');
?>

And the controller (app/controllers/users_controller.php):

<?
class UsersController extends AppController {
public $components = array('Openid');
public $uses = array();

public function login() {
$returnTo = 'http://'.$_SERVER['SERVER_NAME'].'/users/login';

if (!empty($this->data)) {
try {
$this->Openid->authenticate($this->data['OpenidUrl']['openid'], $returnTo, 'http://'.$_SERVER['SERVER_NAME']);
} catch (InvalidArgumentException $e) {
$this->setMessage('Invalid OpenID');
} catch (Exception $e) {
$this->setMessage($e->getMessage());
}
} elseif (count($_GET) > 1) {
$response = $this->Openid->getResponse($returnTo);

if ($response->status == Auth_OpenID_CANCEL) {
$this->setMessage('Verification cancelled');
} elseif ($response->status == Auth_OpenID_FAILURE) {
$this->setMessage('OpenID verification failed: '.$response->message);
} elseif ($response->status == Auth_OpenID_SUCCESS) {
echo 'successfully authenticated!';
exit;
}
}
}

private function setMessage($message) {
$this->set('message', $message);
}
}
?>
2009/06/18 11:16 2009/06/18 11:16

댓글을 남겨주세요.

[로그인][오픈아이디란?]

[CakePHP] Dynamic validation rules

Posted at 2009/06/16 20:45 // in 웹프로그래밍™/CakePHP // by 블루비
모델에서 선언된 validate 를 변경하고 싶다면,
다음과 같이 Controller 에서 Set::merge() 를 통해 재정의 해주면 됩니다.


$this->Profile->validate = Set::merge($this->Profile->validate, array(
'name'=>array(
'required'=>true,
'rule'=>array('alphaNumeric')
)
));





2009/06/16 20:45 2009/06/16 20:45

댓글을 남겨주세요.

[로그인][오픈아이디란?]

[CakePHP] 조인문 추가 작성을 위한 bindModel tip

Posted at 2009/06/02 15:44 // in 웹프로그래밍™/CakePHP // by 블루비

CakePHP 테이블 조인을 추가로 작성 하기 위해 bindModel()을 이용하여 작성할 수 있습니다.
하지만, 페이징(paginate) 처리시 bindModel()을 이용하게 되면 적상 적으로 조인문에 대한 쿼리가 적용되지 않습니다.
$this->Board->bindModel(array(
'hasOne'=>array('[ClassName]'=>array('foreignKey'=>'id'))
));

원인은 bind/unbind 시에 쿼리 한번만 유호하게 됩니다.
paginate 에서는 쿼리를 두번 날리도록 되어 있습니다.
첫번째 쿼리는 레코드수를 가져오고 두번째 쿼리는 limit 된 쿼리를 날리게 됩니다.
따라서 레코드수를 가져오는 쿼리에서는 정상적으로 조인문에 추가된 반면 두번째 쿼리에서는 추가된 조인문이 적용 되지 않습니다.

이문제를 해결하는 방법은 간단합니다. bindModel()의 두번재 인자에 false 값을 주는것으로 bindModel을 지속시켜 줍니다.

$this->Board->bindModel(array(
'hasOne'=>array('[ClassName]'=>array('foreignKey'=>'id'))
),false);



2009/06/02 15:44 2009/06/02 15:44

댓글을 남겨주세요.

[로그인][오픈아이디란?]

[CakePHP] radio 버튼 checked 옵션 사용법

Posted at 2009/05/18 09:12 // in 웹프로그래밍™/CakePHP // by 블루비
CakePHP Form Helper 에서 지원하는 radio 메쏘드에는 checked 옵션이 포함되어 있지 않습니다.
그래서 $form->radio() 아닌 $form->input() 을 사용하여 해결해야 합니다.

아래 코드와 같이 $form->input() 의 옵션에 default 옵션을 추가 하여 해당 값을 지정함으로 checked 가 되어 집니다.

$form->input('Model.field',array (
'legend'=>false,
'type'=>'radio',
'options'=>array(
'val1'=>'label1',
'val2'=>'label2'
),
'default'=>'val2')))


참조 : http://anjella.co.kr/283
2009/05/18 09:12 2009/05/18 09:12
  1. 안젤라

    2009/05/19 11:16 [수정/삭제] [답글]

    이거땜시 저도 좀 고민했었죠~~~ ^^도움이 되셔서 좋네요~

  2. 안젤라

    2009/09/02 16:17 [수정/삭제] [답글]

    제가 블로그를 티스토리로 옮겼어요. 그래서 하위 디렉토리 tc 없이 그냥 글번호를 붙여주면 그 글로 갑니다. ^^

    http://anjella.co.kr/tc/283
    => http://anjella.co.kr/283

댓글을 남겨주세요.

[로그인][오픈아이디란?]

1 2 3 4 5 ... 24