2015년 11월 16일 월요일

윈도우7 작업표시줄 아이콘 깨짐 고치기

뭣때문인지는 원인은 모르겠으나, 작업표시줄의 윈도우 관련 아이콘들이 깨져보이기 시작..


해결방법은 아래와 같이 콘솔창에서 입력 후 재부팅하면 된다.

시작아이콘을 누르고 > 프로그램 및 파일검색에 마우스를 클릭하면 커서가 깜박이는데

거기에 cmd 라고 입력 후 엔터 > 아래와 같은 검은 콘솔 화면이 나오면

cd appdata 입력 후 엔터
cd local 입력 후 엔터
del /a:h IconCache.db 입력 후 엔터 (del /a:h i 까지 입력후 탭키를 누르면 글자 자동완성)

그리고 컴퓨터를 껐다가 다시 켜면, 아이콘이 원래대로 나옵니다.


2015년 11월 14일 토요일

서브라임 텍스트~ 플러그인 삭제, FTPSync 설치

예전에 서브라임 Sftp 를 추천했는데, 30달러 유료였다. SVN 기능까지하면 거의 50달러;
게다가, 결제를 하지 않고 사용했을경우, 수시로 경고창이 뜨는 어처구니가 없는 상황이;

그래서, FTPSync 라는 무료 FTP 플러그인을 찾았는데,
업로드 속도가 조금 느리지만, 괜찮은것 같다.

Sftp 처럼 ..... 업로드 상황이 프로그레스바 형태로 표시되진 않고
10% 50% 100% 처럼 퍼센테이지 텍스트로만 작게 표시되었다가 사라진다.

그럼먼저, 기존의 SFTP 플러그인 삭제 부터 시작해보자.


Preferences > Package Control 로 들어간다. 단축키는 Ctrl+Shift+P


Package Control: 이 뜨면 remove package 를 검색하고 엔터 또는 클릭


그리고 sftp 를 입력하면 설치된 SFTP가 보이는데, 엔터 또는 클릭하면 삭제완료.


자~ 이제 다시 Package Control (CTRL+Shift+P) 로 들어가서 in 으로 검색,
Install Package 를 선택하고, FTPSync 를 설치한다.


서브라임텍스트에서 관리할 폴더를 추가 (Project > Add Folder to Project)하면
왼쪽에 FOLDERS 메뉴가 뜬다. 본인은 nginx 폴더 밑에 html 폴더를 추가했다.
html 폴더 위에서 마우스 우클릭을 하면 메뉴가 뜨는데,
FTPSync > Setup FTPSync in this folder 를 선택한다.


그럼 ftpsync.settings 라는 파일이 하나 생성되는데,
여기서 host , username, password, path 를 지정해주면 완료.
로컬의 파일을 CTRL+S 로 저장하면, FTP 로 파일이 자동 전송된다.


끝으로 Sftp 에서 썼던 sftp-config.json 파일은 더이상 필요가 없으니, 삭제를 하면된다.

2015년 10월 17일 토요일

Sublime Text 서브라임 텍스트 한글깨짐

원인은 모르겠지만, (아마도 CCleaner 청소 이후?)
한글이 박스 물음표 ? 로 나와 당황했었다.

검색을 해본결과

서브라임 텍스트 메뉴의
Preferences > Settings - User
에서 폰트를 지정하면 된다.

이미 JSON 형태로 값이 들어가 있지만, 당황하지 않고
아래의 형태대로 그대로 복사 붙여넣기 저장

{
 "color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme",
 "ignored_packages":
 [
  "Vintage"
 ],
 "font_face": "Bitstream Vera Sans Mono",
 "font_size": 11,
 "tab_size": 4,
 "word_wrap": true,
 "draw_white_space": "all",
 "translate_tabs_to_spaces": true,
 "trim_trailing_white_space_on_save": true,
 "ensure_newline_at_eof_on_save": true,
 "default_line_ending": "unix",
 "rulers": [80, 120],
 "highlight_line": true,
 "fade_fold_buttons": false,
 "bold_folder_labels": true,
 "caret_style": "phase",
 "highlight_modified_tabs": true,
 "line_padding_top": 1,
 "line_padding_bottom": 1,
 "always_show_minimap_viewport": true,
 "draw_minimap_border": true
}

default_line_ending 줄바꿈 문자 형식 지정(system, windows, unix)
caret_style 커서 스타일 ("solid","wide","blink", "phase", "smooth")

2015년 5월 1일 금요일

사기꾼이 잘사는 나라~ 한국

개인이든 기업이든 

남의 등 쳐먹고, 사기를 쳐야 잘사는 나라, 한국입니다.






2015년 4월 18일 토요일

Windows 7 MAIN-WND.exe on My Laptop

사건 개요 및 발단
1. DELL 노트북의 윈도우7 로그인유저에 비밀번호를 생성하였다.
2. 윈도우7 로그인 화면에서 비밀번호를 입력하여 로그온
3. 바탕화면에 아이콘들이 보이기전에, 아주 작은 창이 보인다.

??? WTF ! Virus ? 바이러스일까???

4. 작은창은 금방 사라진다.
5. 재부팅하여, 1 inch 정도의 작은 창을 다시 확인하였다.

단서는 이것뿐 
MAIN-WND

6. 구글검색... 같은증상을 보이는 글을 발견

Answer 답변이 엉망이다. 유료 프로그램을 유도하는 광고 글.

우선, 바이러스 검사부터... 바이러스 없음.

사건 해결 과정
1. MAIN*.exe 로 검색하였으나 아무것도 없다.
2. *WND*.exe 로 검색하였으나 아무것도 없다.
3. windows icon > run > msconfig 에서 start program 을 모두 uncheck 체크해제
4. ReBooting 재시작
5. 하나씩 하나씩 step by step check 하며 원인을 찾아 보았다.

사건 해결, 범인은?
범인은 바로, Bluetooth Software | Atheros Communications
c:\Program Files (x86)\Dell Wireless\Bluetooth Suite\athbttray.exe
c:\Program Files (x86)\Dell Wireless\Bluetooth Suite\btvstack.exe

이 녀석이 check 되면, 윈도우 로그인시 작은 창이 보인다.

결론
바이러스는 아니지만, 신경쓰이는 프로그램이다. 블루투스도 안쓰고 그래서 uncheck !


2015년 3월 14일 토요일

윈도우 서비스 삭제

프로그램을 삭제했는데도 MySQL 같은 서비스가 윈도우 서비스에 남을때가 있다. 

시작 버튼 누르고 프로그램 및 파일 검색에 
cmd 라고 치고 (엔터)
콘솔화면이 뜨면, 아래 처럼
sc delete 서비스명 (엔터)
성공이라고 뜨며 서비스가 삭제된다.
c:\> sc delete MySQL56
[SC] DeleteService 성공

2015년 2월 27일 금요일

윈도우 7 정품인증 안됨, 상태가 사용가능 하지 않음. 해결방법

윈도우7에서 바탕화면에 있는

내컴퓨터 아이콘 > 우클릭 > 속성을 보면

Windows 정품인증
상태가 사용 가능하지 않음
제품 ID: 사용할 수 없음



이라고 뜨는 경우가 있다.

그리고,
Windows 정품인증을 받으라는 팝업창이 화면제일 위로 뜬다.
창을 닫아도 계속해서 알림창이 뜬다.

크랙을했던,안했던,정품이던,정품이아니던
알림창이 계속뜬다.

안보이게 아래로 내려두고 쓸수는 있겠지만,
이렇게 팝업창이 뜨는 순간부터
중요한 윈도우 업데이트를 받지 못해, 보안의 위험이 크다.

이 경우는 2가지 원인이 있는데

1. 크랙버전인 경우
윈도우 자동 업데이트로 인해 KB971033 업데이트가 설치되면 크랙이 해제되며, 알림창이 뜬다. 해결방법은 KB971033 업데이트를 삭제하고, 자동 업데이트를 하지 않는것.
생각날때마다 업데이트를 수동으로 확인해 중요한것만 업데이트 해주는것이 좋다.

2. 정품인 경우
시작 아이콘 > 제어판 > 관리도구 > 서비스 > Software Protection
을 사용안함으로 꺼둔 경우이다. (자동 지연된 시작)으로 설정하는것이 좋다.

윈도우 튜닝한다고
서비스를 이것저것 건드리다 보면
이런 예상치않은 문제가 발생하기도 한다.

* 인터넷 상에 있는 윈도우 크랙 프로그램들은 99.9% 백도어 바이러스를 포함하고 있다.
꽤나 유명한 크랙 프로그램 조차도 백도어를 심어둔것으로 확인되었다.
일부 크랙 프로그램은 BIOS 까지 건드리는 크랙을 하는데, 그럴경우 백신에도 잡히지 않고 (특정한 날짜 시간이 되면 사용자도 모르게 특정한 활동을 수행하는) 좀비PC로 변할 확률이 높다. 크랙 프로그램을 써야할경우?에는 반드시 여러 백신프로그램으로 검사를 하고, 크랙이 완료된후 PC의 전체 파일 검사를 반드시 해야한다.
그러고도 백신에 잡히지 않는 (키보드나 마우스의 움직임이 모두 해커에게 전송되는) 키로거나 (컴퓨터의 뒷구멍이 생겨 해커가 마음대로 침입해 자료를 빼내는) 백도어가 발견되는 경우도 많이 있으니, 왠만하면 크랙 프로그램이나 수상한 프로그램은 실행하지 않는것이 좋다.

-----------------------
2018 업데이트

윈도와 오피스는 순정으로 설치를 하고,
윈도 업데이트 (중요업데이트도) 왠만하면 안하는게 좋을거같다..
딱히 업데이트 안해서, 해킹당하거나 하는일은 드물고, 쓰는데 이상이 없으니~
정품이라 해도 업데이트 하는순간, 윈도 뿐 아니라 오피스 까지 정품인증이 풀려버린다.

크랙버전은 더 하겠지? 크랙 쓸바엔, 리눅스 쓰는게 차라리 맘이 더 편하다.

크랙을 하려고 SOFTASM 같은곳에서 받은 크랙은 100% 백도어 바이러스가 있다.
(SOFTASM 에서 받은 크랙은 유명 백신에서 조차 바이러스로 안잡힌다)
가만히 있어도 마우스가 움직이거나, 클릭을하면 SEX 관련 사이트로 이동해 버리고
어느샌가 바탕화면에 모르는 아이콘들이 넘쳐나고, 윈도 중요 dll , exe  파일을 비롯,
인터넷, 크롬, 파이어폭스 등의 여러 실행파일들도 해킹되어 있는걸 확인 할 수 있다.

랜섬웨어로 비트코인을 요구당하기 전에 중요파일은 항상 외장하드에 백업해두고
C 에 있는 윈도우는 언제든 포맷해서 쓸 수 있도록 준비해 둬야한다.

2015년 2월 11일 수요일

CI 세그먼트 한글 문제

코드이그나이터의 주소체계입니다. 

http://example.com/[controller-class]/[controller-method]/[arguments]

arguments 부분에 한글이 들어가는 주소가 있는데 (게시물 제목 등),
post 로 받아와 url_title 로 주소를 가공할 경우,
정상적으로 작동하지 않는 경우가 있습니다.

그럴경우 아래의 소스코드처럼 url_helper.php 와 config.php 파일에
가-힣 을 추가해 주면 한글주소도 정상적으로 작동하게 됩니다.
// system/helpers/url_helper.php 495 line
'[^가-힣a-z0-9 _-]' => '',

// application/config/config.php 157 line
$config['permitted_uri_chars'] = '가-힣a-z 0-9~%.:_\-';
하지만 여기에도 문제가 있는데요.
일본어나 중국어같은 전각문자의 경우에도,
정상적으로 작동을 안하는데요.

그럴경우 application/config/config.php 파일의 157 line 부분을
그냥 주석처리 해주시면 됩니다.

아니면 아래처럼 일본어 히라가나와 한자, 일본식 영어,숫자 까지 예외처리를 해주셔야죠.

// application/config/config.php 157 line
$config['permitted_uri_chars'] = '一-龠ぁ-んァ-ヴーa-zA-Z0-9a-z 0-9~%.:_-';
코드이그나이터 3.0 을 기준으로 작성하였습니다.

2015년 2월 4일 수요일

CI 다중 사이트 설정

코드이나이터는 하나만 인스톨을 하고,
여러 사이트를 서브도메인으로 연결하여 사용하려면
index.php 파일의 application_folder를 다음 처럼 수정하면 된다.

/*
 *---------------------------------------------------------------
 * APPLICATION FOLDER NAME
 *---------------------------------------------------------------
 *
 * If you want this front controller to use a different "application"
 * folder than the default one you can set its name here. The folder
 * can also be renamed or relocated anywhere on your server. If
 * you do, use a full server path. For more info please see the user guide:
 * http://codeigniter.com/user_guide/general/managing_apps.html
 *
 * NO TRAILING SLASH!
 */
// $application_folder = 'application';
 switch($_SERVER['HTTP_HOST'])
 {
  case('www.a.com') : 
   $application_folder = 'www.a.com';
  break;
  case('www.b.com') : 
   $application_folder = 'www.b.com';
  break;
  case('www.c.com') : 
   $application_folder = 'www.c.com';
  break;
  default : 
   $application_folder = 'application';
 }

PHP 수학 연산 함수 정리


/*************************************
PHP 수학 연산 함수 정리
http://php.net/manual/en/ref.math.php
**************************************/

/*
숫자의 절대값을 반환
abs
number = abs(mixed_number)
http://php.net/manual/en/function.abs.php
*/
echo abs(-4.2); // 4.2 (double/float)
echo abs(5);    // 5 (integer)
echo abs(-5);   // 5 (integer)

/*
숫자의 반올림한 값을 반환
round
float = round(float_val)
http://php.net/manual/en/function.round.php
PHP_ROUND_HALF_UP
PHP_ROUND_HALF_DOWN
PHP_ROUND_HALF_EVEN
PHP_ROUND_HALF_ODD
*/
echo round(3.4);         // 3
echo round(3.5);         // 4
echo round(3.6);         // 4
echo round(3.6, 0);      // 4
echo round(1.95583, 2);  // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2);    // 5.05
echo round(5.055, 2);    // 5.06
echo round(9.5, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9
echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10
echo round(9.5, 0, PHP_ROUND_HALF_ODD);  // 9
echo round(8.5, 0, PHP_ROUND_HALF_UP);   // 9
echo round(8.5, 0, PHP_ROUND_HALF_DOWN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_ODD);  // 9
/* Using PHP_ROUND_HALF_UP with 1 decimal digit precision */
echo round( 1.55, 1, PHP_ROUND_HALF_UP);   //  1.6
echo round( 1.54, 1, PHP_ROUND_HALF_UP);   //  1.5
echo round(-1.55, 1, PHP_ROUND_HALF_UP);   // -1.6
echo round(-1.54, 1, PHP_ROUND_HALF_UP);   // -1.5
/* Using PHP_ROUND_HALF_DOWN with 1 decimal digit precision */
echo round( 1.55, 1, PHP_ROUND_HALF_DOWN); //  1.5
echo round( 1.54, 1, PHP_ROUND_HALF_DOWN); //  1.5
echo round(-1.55, 1, PHP_ROUND_HALF_DOWN); // -1.5
echo round(-1.54, 1, PHP_ROUND_HALF_DOWN); // -1.5
/* Using PHP_ROUND_HALF_EVEN with 1 decimal digit precision */
echo round( 1.55, 1, PHP_ROUND_HALF_EVEN); //  1.6
echo round( 1.54, 1, PHP_ROUND_HALF_EVEN); //  1.5
echo round(-1.55, 1, PHP_ROUND_HALF_EVEN); // -1.6
echo round(-1.54, 1, PHP_ROUND_HALF_EVEN); // -1.5
/* Using PHP_ROUND_HALF_ODD with 1 decimal digit precision */
echo round( 1.55, 1, PHP_ROUND_HALF_ODD);  //  1.5
echo round( 1.54, 1, PHP_ROUND_HALF_ODD);  //  1.5
echo round(-1.55, 1, PHP_ROUND_HALF_ODD);  // -1.5
echo round(-1.54, 1, PHP_ROUND_HALF_ODD);  // -1.5

/*
인자로 전달받은 부동소수형의 값보다 더 큰 정수 중 최소값을 반환
ceil
float = ceil(float_value)
http://php.net/manual/en/function.ceil.php
*/
echo ceil(4.3);    // 5
echo ceil(9.999);  // 10
echo ceil(-3.14);  // -3

/*
인자로 전달받은 부동소수형의 값보다 더 작은 정수 중 최대값을 반환
floor
float = floor(float_value)
http://php.net/manual/en/function.floor.php
*/
echo floor(4.3);   // 4
echo floor(9.999); // 9
echo floor(-3.14); // -4

/*
제곱승을 반환
pow
number = pow ( number $base , number $exp )
http://php.net/manual/en/function.pow.php
*/
var_dump(pow(2, 8)); // int(256)
echo pow(-1, 20); // 1
echo pow(0, 0); // 1

echo pow(-1, 5.5); // PHP >4.0.6  NAN
echo pow(-1, 5.5); // PHP <=4.0.6 1.#IND

/*
e를 지수로 한 제곱승을 반환
exp
float = exp ( float $arg )
http://php.net/manual/en/function.exp.php
*/
echo exp(12) . "\n";
echo exp(5.7);

/*
지수가 e인 자연로그 값을 반환
log
float = log ( float $arg [, float $base = M_E ] )
http://php.net/manual/en/function.log.php
*/

/*
지수가 10인 상용로그 값을 반환
log10
float = log10 ( float $arg )
http://php.net/manual/en/function.log10.php
*/

/*
원주율 파이의 값을 반환
pi
float = pi ( void )
http://php.net/manual/en/function.pi.php
*/
echo pi(); // 3.1415926535898
echo M_PI; // 3.1415926535898

/*
제곱근을 반환
sqrt
float = sqrt ( float $arg )
http://php.net/manual/en/function.sqrt.php
*/
// Precision depends on your precision directive
echo sqrt(9); // 3
echo sqrt(10); // 3.16227766 ...

/*
인자로 전달받은 값 중 가장 큰 값을 반환
max
mixed = max ( array $values )
mixed = max ( mixed $value1 , mixed $value2 [, mixed $... ] )
http://php.net/manual/en/function.max.php
*/
echo max(2, 3, 1, 6, 7);  // 7
echo max(array(2, 4, 5)); // 5

// The string 'hello' when compared to an int is treated as 0
// Since the two values are equal, the order they are provided determines the result
echo max(0, 'hello');     // 0
echo max('hello', 0);     // hello

// Here we are comparing -1 < 0, so 'hello' is the highest value
echo max('hello', -1);    // hello

// With multiple arrays of different lengths, max returns the longest
$val = max(array(2, 2, 2), array(1, 1, 1, 1)); // array(1, 1, 1, 1)

// Multiple arrays of the same length are compared from left to right
// so in our example: 2 == 2, but 5 > 4
$val = max(array(2, 4, 8), array(2, 5, 1)); // array(2, 5, 1)

// If both an array and non-array are given, the array will be returned
// as comparisons treat arrays as greater than any other value
$val = max('string', array(2, 5, 7), 42);   // array(2, 5, 7)

// If one argument is NULL or a boolean, it will be compared against
// other values using the rule FALSE < TRUE regardless of the other types involved
// In the below examples, -10 is treated as TRUE in the comparison
$val = max(-10, FALSE); // -10
$val = max(-10, FALSE); // -10

// 0, on the other hand, is treated as FALSE, so is "lower than" TRUE
$val = max(0, TRUE); // TRUE

/*
인자로 전달받은 값 중 가장 작은 값을 반환
min
mixed = min ( array $values )
mixed = min ( mixed $value1 , mixed $value2 [, mixed $... ] )
http://php.net/manual/en/function.min.php
*/
echo min(2, 3, 1, 6, 7);  // 1
echo min(array(2, 4, 5)); // 2

// The string 'hello' when compared to an int is treated as 0
// Since the two values are equal, the order they are provided determines the result
echo min(0, 'hello');     // 0
echo min('hello', 0);     // hello

// Here we are comparing -1 < 0, so -1 is the lowest value
echo min('hello', -1);    // -1

// With multiple arrays of different lengths, min returns the shortest
$val = min(array(2, 2, 2), array(1, 1, 1, 1)); // array(2, 2, 2)

// Multiple arrays of the same length are compared from left to right
// so in our example: 2 == 2, but 4 < 5
$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)

// If both an array and non-array are given, the array is never returned
// as comparisons treat arrays as greater than any other value
$val = min('string', array(2, 5, 7), 42);   // string

// If one argument is NULL or a boolean, it will be compared against
// other values using the rule FALSE < TRUE regardless of the other types involved
// In the below examples, both -10 and 10 are treated as TRUE in the comparison
$val = min(-10, FALSE, 10); // FALSE
$val = min(-10, NULL, 10);  // NULL

// 0, on the other hand, is treated as FALSE, so is "lower than" TRUE
$val = min(0, TRUE); // 0

/*
인자로 지정한 최소값과 최대값 사이의 임의의 난수를 반환
rand
int = rand ( void )
int = rand ( int $min , int $max )
http://php.net/manual/en/function.rand.php
*/
echo rand();
echo rand();

echo rand(5, 15);

/*
Mersenne Twister 알고리즘을 이용하여 인자로 지정한 최소값과 최대값 사이의 임의의 난수를 반환
mt_rand
int = mt_rand ( void )
int = mt_rand ( int $min , int $max )
http://php.net/manual/en/function.mt-rand.php
*/
echo mt_rand();
echo mt_rand();

echo mt_rand(5, 15);

PHP 변수관련 함수 정리


/*
변수의 데이터타입을 반환
gettype
string = gettype(mixed_var)
http://php.net/manual/en/function.gettype.php
*/
$data = array(1, 1.0, NULL, new stdClass, 'foo');

foreach ($data as $value) {
    echo gettype($value), " / ";
}

/*
변수가 boolean 타입 변수인지 여부를 반환
is_bool
bool = is_bool(mixed_var)
http://php.net/manual/en/function.is-bool.php
*/
$a = false;
$b = 0;
// Since $a is a boolean, it will return true
if (is_bool($a) === true) {
    echo "Yes, this is a boolean";
}
// Since $b is not a boolean, it will return false
if (is_bool($b) === false) {
    echo "No, this is not a boolean";
}

/*
변수가 부동소수형 타입의 변수인지 여부를 반환
is_float, is_double, is_real
bool = is_float(mixed_var)
http://php.net/manual/en/function.is-float.php
http://php.net/manual/en/function.is-double.php
http://php.net/manual/en/function.is-real.php
*/
if (is_float(27.25)) {
    echo "is float";
} else {
    echo "is not float";
}
var_dump(is_float('abc')); // bool(false)
var_dump(is_float(23));    // bool(false)
var_dump(is_float(23.5));  // bool(true)
var_dump(is_float(1e7));   // bool(true) Scientific Notation
var_dump(is_float(true));  // bool(false)

/*
변수의 값이 숫자인지 여부를 반환
is_numeric
bool = is_numeric(mixed_var)
http://php.net/manual/en/function.is-numeric.php
*/
$tests = array(
    "42",
    1337,
    0x539,
    02471,
    0b10100111001,
    1337e0,
    "not numeric",
    array(),
    9.1
);
foreach ($tests as $element) {
    if (is_numeric($element)) {
        echo "'{$element}' is numeric";
    } else {
        echo "'{$element}' is NOT numeric";
    }
}

/*
변수가 문자열 타입의 변수인지 여부를 반환
is_string
bool = is_string(mixed_var)
http://php.net/manual/en/function.is-string.php
*/
$values = array(false, true, null, 'abc', '23', 23, '23.5', 23.5, '', ' ', '0', 0);
foreach ($values as $value) {
    echo "is_string(";
    var_export($value);
    echo ") = ";
    echo var_dump(is_string($value));
}

/*
변수가 배열인지 여부를 반환
is_array
bool = is_array(mixed_var)
http://php.net/manual/en/function.is-array.php
*/
$yes = array('this', 'is', 'an array');
$no  = 'this is a string';
echo is_array($yes) ? 'Array' : 'not an Array';
echo is_array($no) ? 'Array' : 'not an Array';

/*
변수가 클래스의 객체인지 여부를 반환
is_object
bool = is_object(mixed_var)
http://php.net/manual/en/function.is-object.php
*/
function get_students($obj)
{
    if (!is_object($obj)) {
        return false;
    }

    return $obj->students;
}
$obj = new stdClass();
$obj->students = array('Kalle', 'Ross', 'Felipe');
var_dump(get_students(null)); // bool(false)
var_dump(get_students($obj)); // array(3)

/*
변수가 리소스 타입의 변수인지 여부를 반환
is_resource
bool = is_resource ( mixed $var )
http://php.net/manual/en/function.is-resource.php
*/
$db_link = @mysql_connect('localhost', 'mysql_user', 'mysql_pass');
if (!is_resource($db_link)) {
    die('Can\'t connect : ' . mysql_error());
}

/*
변수가 NULL 값인지 여부를 반환
is_null
bool = is_null ( mixed $var )
http://php.net/manual/en/function.is-null.php
*/
error_reporting(E_ALL);
$foo = NULL;
var_dump(is_null($inexistent), is_null($foo));

/*
변수가 스칼라 타입의 변수인지 여부를 반환
is_scalar
bool = is_scalar ( mixed $var )
http://php.net/manual/en/function.is-scalar.php
*/
function show_var($var) 
{
    if (is_scalar($var)) {
        echo $var;
    } else {
        var_dump($var);
    }
}
$pi = 3.1416;
$proteins = array("hemoglobin", "cytochrome c oxidase", "ferredoxin");

show_var($pi);
show_var($proteins);

/*
변수의 정수형 값을 반환
intval
int = intval ( mixed $var [, int $base = 10 ] )
http://php.net/manual/en/function.intval.php
*/
echo intval(42);                      // 42
echo intval(4.2);                     // 4
echo intval('42');                    // 42
echo intval('+42');                   // 42
echo intval('-42');                   // -42
echo intval(042);                     // 34
echo intval('042');                   // 42
echo intval(1e10);                    // 1410065408
echo intval('1e10');                  // 1
echo intval(0x1A);                    // 26
echo intval(42000000);                // 42000000
echo intval(420000000000000000000);   // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8);                   // 42
echo intval('42', 8);                 // 34
echo intval(array());                 // 0
echo intval(array('foo', 'bar'));     // 1

/*
변수의 부동소수형 값을 반환
floatval, doubleval
float = floatval ( mixed $var )
http://php.net/manual/en/function.floatval.php
http://php.net/manual/en/function.doubleval.php
*/
$var = '122.34343The';
$float_value_of_var = floatval($var);
echo $float_value_of_var; // 122.34343

$var = 'The122.34343';
$float_value_of_var = floatval($var);
echo $float_value_of_var; // 0

/*
변수의 값을 문자열 형태로 반환
strval
string = strval ( mixed $var )
http://php.net/manual/en/function.strval.php
*/
class StrValTest
{
    public function __toString()
    {
        return __CLASS__;
    }
}
// Prints 'StrValTest'
echo strval(new StrValTest);

/*
변수가 어떤 값으로 설정되어 존재하는지 여부를 검사
isset
bool = isset ( mixed $var [, mixed $... ] )
http://php.net/manual/en/function.isset.php
*/
$var = '';

// This will evaluate to TRUE so the text will be printed.
if (isset($var)) {
    echo "This var is set so I will print.";
}

// In the next examples we'll use var_dump to output
// the return value of isset().

$a = "test";
$b = "anothertest";

var_dump(isset($a));      // TRUE
var_dump(isset($a, $b)); // TRUE

unset ($a);

var_dump(isset($a));     // FALSE
var_dump(isset($a, $b)); // FALSE

$foo = NULL;
var_dump(isset($foo));   // FALSE

$a = array ('test' => 1, 'hello' => NULL, 'pie' => array('a' => 'apple'));

var_dump(isset($a['test']));            // TRUE
var_dump(isset($a['foo']));             // FALSE
var_dump(isset($a['hello']));           // FALSE

// The key 'hello' equals NULL so is considered unset
// If you want to check for NULL key values then try: 
var_dump(array_key_exists('hello', $a)); // TRUE

// Checking deeper array values
var_dump(isset($a['pie']['a']));        // TRUE
var_dump(isset($a['pie']['b']));        // FALSE
var_dump(isset($a['cake']['a']['b']));  // FALSE

$expected_array_got_string = 'somestring';
var_dump(isset($expected_array_got_string['some_key']));
var_dump(isset($expected_array_got_string[0]));
var_dump(isset($expected_array_got_string['0']));
var_dump(isset($expected_array_got_string[0.5]));
var_dump(isset($expected_array_got_string['0.5']));
var_dump(isset($expected_array_got_string['0 Mostel']));


/*
변수를 파괴
unset
void = unset ( mixed $var [, mixed $... ] )
http://php.net/manual/en/function.unset.php
*/
function destroy_foo() 
{
    global $foo;
    unset($foo);
}

$foo = 'bar';
destroy_foo();
echo $foo;

function foo() 
{
    unset($GLOBALS['bar']);
}

$bar = "something";
foo();

function foo(&$bar) 
{
    unset($bar);
    $bar = "blah";
}

$bar = 'something';
echo "$bar";

foo($bar);
echo "$bar";

function foo()
{
    static $bar;
    $bar++;
    echo "Before unset: $bar, ";
    unset($bar);
    $bar = 23;
    echo "after unset: $bar";
}

foo();
foo();
foo();


/*
변수가 비어있는 값을 가진 변수인지 여부를 반환
empty
bool = empty ( mixed $var )
http://php.net/manual/en/function.empty.php
*/
$var = 0;

// Evaluates to true because $var is empty
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}

// Evaluates as true because $var is set
if (isset($var)) {
    echo '$var is set even though it is empty';
}

$expected_array_got_string = 'somestring';
var_dump(empty($expected_array_got_string['some_key']));
var_dump(empty($expected_array_got_string[0]));
var_dump(empty($expected_array_got_string['0']));
var_dump(empty($expected_array_got_string[0.5]));
var_dump(empty($expected_array_got_string['0.5']));
var_dump(empty($expected_array_got_string['0 Mostel']));

/*
변수의 정보를 이해하기 쉬운 형태로 출력
print_r
mixed = print_r ( mixed $expression [, bool $return = false ] )
http://php.net/manual/en/function.print-r.php
*/
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z'));
print_r ($a);
$b = array ('m' => 'monkey', 'foo' => 'bar', 'x' => array ('x', 'y', 'z'));
$results = print_r($b, true); // $results now contains output from print_r

/*
변수에 대한 구조화된 정보를 출력
var_dump
void = var_dump ( mixed $expression [, mixed $... ] )
http://php.net/manual/en/function.var-dump.php
*/
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);

$b = 3.1;
$c = true;
var_dump($b, $c);


/*
변수에 대한 구조화된 정보를 PHP 코드의 형태로 출력 또는 반환
var_export
mixed = var_export ( mixed $expression [, bool $return = false ] )
http://php.net/manual/en/function.var-export.php
*/
$a = array (1, 2, array ("a", "b", "c"));
var_export($a);
$b = 3.1;
$v = var_export($b, true);
echo $v;

class A { public $var; }
$a = new A;
$a->var = 5;
var_export($a);

class A
{
    public $var1;
    public $var2;

    public static function __set_state($an_array)
    {
        $obj = new A;
        $obj->var1 = $an_array['var1'];
        $obj->var2 = $an_array['var2'];
        return $obj;
    }
}

$a = new A;
$a->var1 = 5;
$a->var2 = 'foo';

eval('$b = ' . var_export($a, true) . ';'); // $b = A::__set_state(array(
                                            //    'var1' => 5,
                                            //    'var2' => 'foo',
                                            // ));
var_dump($b);

/*
인자로 전달받은 변수의 데이터를 저장 및 복원이 가능한 형태로 반환
serialize
string = serialize ( mixed $value )
http://php.net/manual/en/function.serialize.php
*/
// $session_data contains a multi-dimensional array with session
// information for the current user.  We use serialize() to store
// it in a database at the end of the request.

$conn = odbc_connect("localhost", "db_user", "db_password");
$stmt = odbc_prepare($conn,
      "UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata)) {
    $stmt = odbc_prepare($conn,
     "INSERT INTO sessions (id, data) VALUES(?, ?)");
    if (!odbc_execute($stmt, $sqldata)) {
        /* Something went wrong.. */
    }
}

/*
변환되었던 데이터를 원래의 데이터로 복원
unserialize
mixed = unserialize ( string $str )
http://php.net/manual/en/function.unserialize.php
*/
// Here, we use unserialize() to load session data to the
// $session_data array from the string selected from a database.
// This example complements the one described with serialize().

$conn = odbc_connect("localhost", "db_user", "db_password");
$stmt = odbc_prepare($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array($_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata) || !odbc_fetch_into($stmt, $tmp)) {
    // if the execute or fetch fails, initialize to empty array
    $session_data = array();
} else {
    // we should now have the serialized data in $tmp[0].
    $session_data = unserialize($tmp[0]);
    if (!is_array($session_data)) {
        // something went wrong, initialize to empty array
        $session_data = array();
    }
}

$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';

// unserialize_callback_func directive available as of PHP 4.2.0
ini_set('unserialize_callback_func', 'mycallback'); // set your callback_function

function mycallback($classname) 
{
    // just include a file containing your classdefinition
    // you get $classname to figure out which classdefinition is required
}

2015년 2월 3일 화요일

PHP 배열 함수 정리


function pre($val){  
        echo '
';  
        print_r($val);  
        echo  '
'; } /* 배열생성 array array = array(mixed) http://php.net/manual/en/function.array.php */ $arr = array(1,2,3,4,5,6); pre($arr); $arr = array('a'=>'apple','b'=>'banana','c'=>'cherry'); pre($arr); $arr = array('one',5=>'two','three'); pre($arr); $arr = array(1,3,2=>8,4,0=>6); pre($arr); $arr = array('a'=>'apple','b'=>'banana','c'=>'cherry','d'=>array('do'=>array('dol'=>'dolphin','dou'=>'double'),'dr'=>'dragon','du'=>'duck','dw'=>'dwarf')); pre($arr); /* 배열의 원소를 변수에 할당 list array = list(mixed) http://php.net/manual/en/function.list.php */ $alphabet = array('apple','banana','coffee','dance','elf'); list($red,$yellow,$brown,,$game) = $alphabet; echo $game; /* 배열에서 포인터가 가리키는 원소의 키와 값을 가져와 배열로 반환 each array = each(array_&$array) http://php.net/manual/en/function.each.php */ $food = array('a'=>'apple', 'b'=>'banana', 'c'=>'cherry', 'd'=>'dragon', 'e'=>'egg', 'f'=>'fish'); pre(each($food)); reset($food); while (list($key, $val) = each($food)) { echo "$key => $val" . "
"; } /* 연관배열로부터 현재 포인터가 가리키는 원소의 키를 반환 key mixed = key(array_&$array) http://php.net/manual/en/function.key.php */ $food = array('a'=>'apple', 'b'=>'banana', 'c'=>'cherry', 'd'=>'dragon', 'e'=>'egg', 'f'=>'fish'); while ($fruit_name = current($food)) { if ($fruit_name == 'banana') { echo key($food).'
'; } next($food); } /* 배열로부터 현재 포인터가 가리키는 원소의 값을 반환 current, pos mixed = current(array_&$array) http://php.net/manual/en/function.current.php http://php.net/manual/en/function.pos.php */ $food = array('a'=>'apple', 'b'=>'banana', 'c'=>'cherry', 'd'=>'dragon', 'e'=>'egg', 'f'=>'fish'); var_dump(current($food)); /* 배열의 포인터를 다음 원소로 이동 next mixed = next(array_&$array) http://php.net/manual/en/function.next.php */ $food = array('a'=>'apple', 'b'=>'banana', 'c'=>'cherry', 'd'=>'dragon', 'e'=>'egg', 'f'=>'fish'); var_dump(next($food)); /* 배열의 포인터를 처음으로 이동 reset mixed = reset(array_&$array) http://php.net/manual/en/function.reset.php */ $food = array('a'=>'apple', 'b'=>'banana', 'c'=>'cherry', 'd'=>'dragon', 'e'=>'egg', 'f'=>'fish'); var_dump(reset($food)); /* 배열의 포인터를 이전 원소로 이동 prev mixed = prev(array_&$array) http://php.net/manual/en/function.prev.php */ $food = array('a'=>'apple', 'b'=>'banana', 'c'=>'cherry', 'd'=>'dragon', 'e'=>'egg', 'f'=>'fish'); var_dump(prev($food)); /* 배열의 포인터를 끝으로 이동 end mixed = end(array_&$array) http://php.net/manual/en/function.end.php */ $food = array('a'=>'apple', 'b'=>'banana', 'c'=>'cherry', 'd'=>'dragon', 'e'=>'egg', 'f'=>'fish'); var_dump(end($food)); /* 배열에 값이 존재하는지 확인 in_array bool = in_array(mixed_needle, array_haystack) http://php.net/manual/en/function.in-array.php */ $food = array('a'=>'apple', 'b'=>'banana', 'c'=>'cherry', 'd'=>'dragon', 'e'=>'egg', 'f'=>'fish', 'g'=>array('ginger','grape')); if (in_array("banana", $food)) { echo "Got Banana"; } if (in_array(array('ginger','grape'), $food, true)) { echo "Got G Food"; } /* 배열이 가진 원소의 갯수를 반환 count, sizeof int = count(mixed_array_or_countable) http://php.net/manual/en/function.count.php http://php.net/manual/en/function.sizeof.php */ $food = array('apple', 'banana', 'c'=>'cherry', 'd'=>'dragon', 'e'=>'egg', 'f'=>'fish', 'g'=>array('gi'=>'ginger','gr'=>'grape')); echo count($food, COUNT_RECURSIVE); // 9 echo sizeof($food); // 7 for ($i = 0; $i < count($food); $i++) { echo $food[$i]; } /* 인자로 지정한 영역의 문자 또는 숫자로 구성된 배열을 생성 range array = range(mixed_start, mixed_end) http://php.net/manual/en/function.range.php */ $arr = range(0,10); $arr = range(0,100,2); $arr = range('a','h'); $arr = range('z','o'); foreach ($arr as &$value) { echo $value; } /* 배열안 원소들의 순서를 섞는다 shuffle bool = shuffle(array_&array) http://php.net/manual/en/function.shuffle.php */ $numbers = range(1, 20); shuffle($numbers); foreach ($numbers as $number) { echo "$number / "; } /* 배열을 정렬 sort bool = sort(array_&array) http://php.net/manual/en/function.sort.php SORT_REGULAR SORT_NUMERIC SORT_STRING SORT_LOCALE_STRING SORT_NATURAL SORT_FLAG_CASE */ $food = array('pizza', 'banana', 'cake', 'apple', 'grape', 'fish', 'egg', 100, 200, 101, 10, 22); sort($food, SORT_NATURAL | SORT_FLAG_CASE); foreach ($food as $key => $val) { echo "food[" . $key . "] = " . $val; } /* 배열의 키를 기준으로 정렬 ksort bool = ksort(array_&array) http://php.net/manual/en/function.ksort.php */ $fruits = array('d'=>'lemon', 'a'=>'orange', 'c'=>'banana', 'b'=>'apple'); ksort($fruits); foreach ($fruits as $key => $val) { echo "$key = $val "; } /* 배열의 키를 유지한채 정렬 asort bool = asort(array_&array) http://php.net/manual/en/function.asort.php */ $number = array(123,321,88,23,11,15); asort($number); foreach ($number as $key => $val) { echo "\$number[$key] = $val "; } /* 배열을 거꾸로 정렬 rsort bool = rsort(array_&array) http://php.net/manual/en/function.rsort.php */ $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); rsort($fruits); foreach ($fruits as $key => $val) { echo "$key = $val "; } /* 배열의 키를 유지한채 거꾸로 정렬 arsort bool = arsort(array_&array) http://php.net/manual/en/function.arsort.php */ $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); arsort($fruits); foreach ($fruits as $key => $val) { echo "$key = $val "; } /* 배열의 키를 기준으로 거꾸로 정렬 krsort bool = krsort(array_&array) http://php.net/manual/en/function.krsort.php */ $fruits = array("a"=>"lemon", "d"=>"orange", "c"=>"banana", "b"=>"apple"); krsort($fruits); foreach ($fruits as $key => $val) { echo "$key = $val "; } /* 알고리즘을 이용하여 배열을 정렬 natsort bool = natsort(array_&array) http://php.net/manual/en/function.natsort.php */ $array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png"); asort($array1); echo "Standard sorting"; print_r($array1); // img1 img10 img12 img2 natsort($array2); echo "Natural order sorting"; print_r($array2); // img1 img2 img10 img12 echo "Negative numbers"; $negative = array('-5','3','-2','0','-1000','9','1'); print_r($negative); natsort($negative); print_r($negative); // -2 -5 -1000 0 1 3 9 echo "Zero padding"; $zeros = array('09', '8', '10', '009', '011', '0'); print_r($zeros); natsort($zeros); print_r($zeros); // 0 8 009 09 10 011 echo "Other characters interfering"; $images_oops = array('image_1.jpg','image_12.jpg', 'image_21.jpg', 'image_4.jpg'); print_r($images_oops); natsort($images_oops); print_r($images_oops); // 1 4 12 21 echo "Sort by keys"; $smoothie = array('orange' => 1, 'apple' => 1, 'yogurt' => 4, 'banana' => 4); print_r($smoothie); uksort( $smoothie, 'strnatcmp'); print_r($smoothie); // apple 1 banana 4 orange 1 yogurt 4 /* 알고리즘을 이용하여 대소문자 구분없이 배열을 정렬 natcasesort bool = natcasesort(array_&array) http://php.net/manual/en/function.natcasesort.php */ $array1 = $array2 = array('IMG0.png', 'img12.png', 'img10.png', 'img2.png', 'img1.png', 'IMG3.png'); sort($array1); echo "Standard sorting"; print_r($array1); // IMG0 IMG3 img1 img10 img12 img2 natcasesort($array2); echo "Natural order sorting (case-insensitive)"; print_r($array2); // IMG0 img1 img2 IMG3 img10 img12 /* 배열에서 맨끝 원소를 제거 array_pop mixed = array_pop(array_&array) http://php.net/manual/en/function.array-pop.php */ $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_pop($stack); pre($stack); /* 배열의 맨끝에 원소를 추가 array_push int = array_push(array_&array, mixed_value1, ...) http://php.net/manual/en/function.array-push.php */ $stack = array("orange", "banana"); array_push($stack, "apple", "raspberry"); pre($stack); /* 배열에서 맨앞 원소를 제거 array_shift mixed = array_shift(array_&array) http://php.net/manual/en/function.array-shift.php */ $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_shift($stack); pre($stack); /* 배열의 맨앞에 원소를 추가 array_unshift int = array_unshift(array_&array, mixed_value1, ...) http://php.net/manual/en/function.array-unshift.php */ $queue = array("orange", "banana"); array_unshift($queue, "apple", "raspberry"); pre($queue); /* 배열에서 중복된 원소를 제거 array_unique array = array_unique(array_array) http://php.net/manual/en/function.array-unique.php */ $input = array("a" => "green", "red", "b" => "green", "blue", "red"); $result = array_unique($input); pre($result); // a green 0 red 1 blue $input = array(4, "4", "3", 4, 3, "3"); $result = array_unique($input); var_dump($result); // array(2) { [0]=> int(4) [2]=> string(1) "3" } /* 배열의 인덱스를 반환 array_values array = array_values(array_array) http://php.net/manual/en/function.array-values.php */ $array = array("size" => "XL", "color" => "gold"); pre(array_values($array)); // 0 XL 1 gold /* 배열의 키를 반환 array_keys array = array_keys(array_array, mixed_search_value) http://php.net/manual/en/function.array-keys.php */ $array = array(0 => 100, "color" => "red"); pre(array_keys($array)); // 0 0 1 color $array = array("blue", "red", "green", "blue", "blue"); pre(array_keys($array, "blue")); // 0 0 1 3 2 4 blue 에 대한 키만 반환 $array = array("color" => array("blue", "red", "green"), "size" => array("small", "medium", "large")); pre(array_keys($array)); // 0 color 1 size /* 배열의 원소를 역순으로 정렬하여 반환 array_reverse array = array_reverse(array_array) http://php.net/manual/en/function.array-reverse.php */ $input = array("php", 4.0, array("green", "red")); $reversed = array_reverse($input); $preserved = array_reverse($input, true); // true 하면 키를 보존하면서 역순으로 반환 pre($input); pre($reversed); pre($preserved); /* 배열에서 하나 이상 원소를 랜덤하게 추출하여 반환 array_rand mixed = array_rand(array_array, int_numreq) http://php.net/manual/en/function.array-rand.php */ $input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank"); $rand_keys = array_rand($input, 2); // 2 가져올 원소 수, 기본값은 1 echo $input[$rand_keys[0]]; echo $input[$rand_keys[1]]; /* 지정한 길이만큼 특정 값으로 배열 채우기 array_pad array = array_pad(array_array, int_size, mixed_value) http://php.net/manual/en/function.array-pad.php */ $input = array(12, 10, 9); $result = array_pad($input, 5, 0); pre($result); // 12, 10, 9, 0, 0 $result = array_pad($input, -7, -1); pre($result); // -1, -1, -1, -1, 12, 10, 9 $result = array_pad($input, 2, "noop"); pre($result); // 12 10 9 /* 특정값으로 배열채우기 array_fill array = array_fill(int_start_index, int_num) http://php.net/manual/en/function.array-fill.php */ $a = array_fill(5, 6, 'banana'); $b = array_fill(-2, 3, 'pear'); pre($a); pre($b); /* 배열의 각 원소에 미리 정의한 함수를 적용 array_walk bool = array_walk(array_&array, callable_callback) http://php.net/manual/en/function.array-walk.php */ $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); function test_alter(&$item1, $key, $prefix) { $item1 = "$prefix: $item1"; } function test_print($item2, $key) { echo "$key. $item2"; } echo "Before ...:"; array_walk($fruits, test_print); echo "... and after:"; array_walk($fruits, test_alter, 'fruit'); array_walk($fruits, test_print); /* 배열의 각 원소에 미리 정의한 함수를 적용. 이때 배열의 원소가 또 다른 배열을 포함한 경우에는 해당 배열에 대해서도 지정한 함수를 호출 array_walk_recursive bool = array_walk_recursive(array_&array, callable_callback) http://php.net/manual/en/function.array-walk-recursive.php */ $sweet = array('a' => 'apple', 'b' => 'banana'); $fruits = array('sweet' => $sweet, 'sour' => 'lemon'); function test_print($item, $key) { echo "$key holds $item
"; } array_walk_recursive($fruits, test_print); /* 여러개의 배열을 하나의 배열로 합침 array_merge array = array_merge(array_array1, array_array2, ...) http://php.net/manual/en/function.array-merge.php */ $array1 = array("color" => "red", 2, 4); $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4); $result = array_merge($array1, $array2); //키가 숫자일 경우 다른 숫자로 재부여 된다 //변수+배열도 가능 array_merge((array)"foo", $array1, $array2); pre($result); /* 여러개의 배열을 하나의 배열로 합치되 문자열 키가 동일한 원소가 여러개 존재하는 경우 이들키를 갖는 모든 원소를 배열에 함께 병합 array_merge_recursive array = array_merge_recursive(array_array1, array_array2, ...) http://php.net/manual/en/function.array-merge-recursive.php */ $array1 = array("color" => array("favorite" => "red"), 5); $array2 = array(10, "color" => array("favorite" => "green", "blue")); $result = array_merge_recursive($array1, $array2); pre($result); // red 와 green 이 favorite 배열에 함께 들어감 /* 다른 배열에는 없는 원소만으로 구성된 배열을 반환 array_diff array = array_diff(array_array1, array_array2, ...) http://php.net/manual/en/function.array-diff.php */ $array1 = array("a" => "green", "red", "blue", "red"); $array2 = array("b" => "green", "yellow", "red"); $result = array_diff($array1, $array2); pre($result); // 1 blue /* 다른 배열에는 없는 원소만으로 구성된 배열을 반환. 키와 값이 모두 일치하는 원소만을 제거한 나머지 원소를 배열로 반환 array_diff_assoc array = array_diff_assoc(array_array1, array_array2, ...) http://php.net/manual/en/function.array-diff-assoc.php */ $array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red"); $array2 = array("a" => "green", "yellow", "red"); $result = array_diff_assoc($array1, $array2); pre($result); // b brown c blue 0 red /* 다른 배열에는 없는 키를 갖는 원소만으로 구성된 배열을 반환 array_diff_key array = array_diff_key(array_array1, array_array2, ...) http://php.net/manual/en/function.array-diff-key.php */ $array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4); $array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8); pre(array_diff_key($array1, $array2)); // red 2 purple 4 /* 다른 모든 배열에도 존재하는 원소만으로 구성된 배열을 반환 array_intersect array = array_intersect(array_array1, array_array2, ...) http://php.net/manual/en/function.array-intersect.php */ $array1 = array("a" => "green", "red", "blue"); $array2 = array("b" => "green", "yellow", "red"); $result = array_intersect($array1, $array2); pre($result); // a green 0 red /* 키와 값이 모두 일치하는 원소중에서 모든 배열에 존재하는 원소만으로 구성된 배열을 반환 array_intersect_assoc array = array_intersect_assoc(array_array1, array_array2, ...) http://php.net/manual/en/function.array-intersect-assoc.php */ $array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red"); $array2 = array("a" => "green", "b" => "yellow", "blue", "red"); $result_array = array_intersect_assoc($array1, $array2); pre($result_array); //a green /* 배열에 지정한 이름의 키를 갖는 원소가 존재하는지 검사 array_key_exists bool = array_key_exists(mixed_key, array_array) http://php.net/manual/en/function.array-key-exists.php */ $search_array = array('first' => null, 'second' => 4); if (array_key_exists('first', $search_array)) { echo "The 'first' element is in the array"; } isset($search_array['first']); // false , NULL 이므로 array_key_exists('first', $search_array); // true /* 주어진 값으로 배열을 검사하고 만일 존재하면 해당 원소의 키를 반환 array_search mixed = array_search(mixed_needle, array_haystack) http://php.net/manual/en/function.array-search.php */ $array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red'); $key = array_search('green', $array); // 2; $key = array_search('red', $array); // 1; /* 배열의 모든 문자열 키를 대문자 또는 소문자로 바꿈 array_change_key_case array = array_change_key_case(array_array, int_case) http://php.net/manual/en/function.array-change-key-case.php CASE_UPPER CASE_LOWER */ $input_array = array("FirSt" => 1, "SecOnd" => 3); pre(array_change_key_case($input_array, CASE_UPPER)); /* 배열의 각 원소에 사용자가 정의한 함수를 적용하고 적용한 후의 결과를 배열로 반환 array_map array = array_map(callable_callback, array_array1, ...) http://php.net/manual/en/function.array-map.php */ // 1 8 27 64 125 function cube($n) { return($n * $n * $n); } $a = array(1, 2, 3, 4, 5); $b = array_map(cube, $a); pre($b); // 2 4 6 8 10 $func = function($value) { return $value * 2; }; pre(array_map($func, range(1, 5))); // uno dos tres cuatro cinco function show_Spanish($n, $m) { return("The number $n is called $m in Spanish"); } function map_Spanish($n, $m) { return(array($n => $m)); } $a = array(1, 2, 3, 4, 5); $b = array("uno", "dos", "tres", "cuatro", "cinco"); $c = array_map(show_Spanish, $a, $b); pre($c); $d = array_map(map_Spanish, $a , $b); pre($d); // 1 one uno, 2 two dos, 3 three tres, ... $a = array(1, 2, 3, 4, 5); $b = array("one", "two", "three", "four", "five"); $c = array("uno", "dos", "tres", "cuatro", "cinco"); $d = array_map(null, $a, $b, $c); pre($d); // stringkey value, 0 value $arr = array("stringkey" => "value"); function cb1($a) { return array ($a); } function cb2($a, $b) { return array ($a, $b); } pre(array_map(cb1, $arr)); pre(array_map(cb2, $arr, $arr)); pre(array_map(null, $arr)); pre(array_map(null, $arr, $arr)); /* 배열에 있는 원소의 합을 계산하여 반환 array_sum number = array_sum(array_array) http://php.net/manual/en/function.array-sum.php */ $a = array(2, 4, 6, 8); echo "sum(a) = " . array_sum($a); // 20 $b = array("a" => 1.2, "b" => 2.3, "c" => 3.4); echo "sum(b) = " . array_sum($b); //6.9

2015년 2월 1일 일요일

PHP print_r() 줄맞춤



// HTML 태그가 그대로 출력
function pre($val){
        echo '<pre>';       
        print_r($val);
        echo  '</pre>';
}
// HTML 태그가 실행됨
function xmp($val){
        echo '<xmp>';
        print_r($val);
        echo  '</xmp>';
}

PHP URL 함수 정리


/*
URL을 파싱하여 배열로 반환
parse_url
array = parse_url(string_url)
http://php.net/manual/en/function.parse-url.php
*/
$url = "http://php.net:8080/manual/en/function.parse-url.php?id=value1&pw=value2#anchor";
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
$ftp = parse_url("ftp://id:password@ftp.php.net");
print_r($ftp);

/*
URL을 통해 전송되는 문자열을 인코딩
urlencode
string = urlencode(string_str)
http://php.net/manual/en/function.urlencode.php
*/
$url1 = "click";
$url2 = "click";
echo $url1;
echo $url2;

/*
인코딩된 문자열을 디코딩
urldecode
string = urldecode(string_str)
http://php.net/manual/en/function.urldecode.php
*/
$query = "id=A&password=B+and+C";
foreach (explode('&', $query) as $chunk) {
    $param = explode("=", $chunk);
    if ($param) {
        printf("Value for parameter \"%s\" is \"%s\"
\n", urldecode($param[0]), urldecode($param[1])); } } /* RFC 1738 규약에 따라 URL을 인코딩 rawurlencode string = rawurlencode(string_str) http://php.net/manual/en/function.rawurlencode.php */ echo "click"; /* 인코딩된 문자열을 디코딩 rawurldecode string = rawurldecode(string_str) http://php.net/manual/en/function.rawurldecode.php */ echo rawurldecode('foo%20bar%40baz+apple'); // foo bar@baz /* MIME 규약에 따라 BASE64 방식으로 인코딩된 문자열을 반환 base64_encode string = base64_encode(string_data) http://php.net/manual/en/function.base64-encode.php */ $str = 'This is an encoded string'; echo base64_encode($str); /* BASE64 방법으로 인코딩된 문자열을 디코딩하여 문자열을 반환 base64_decode string = base64_decode(string_data) http://php.net/manual/en/function.base64-decode.php */ $str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw=='; echo base64_decode($str); /* 인코딩된 쿼리 문자열을 생성 http_build_query string = http_build_query(mixed_query_data) http://php.net/manual/en/function.http-build-query.php */ $data = array ( 'a'=>'apple', 'b'=>'banana+', 'c'=>'cherry & cheese', 'd'=>'dog GOD', 'e', 'f', 'g', 'h'=>array ( 'h1'=>'hello', 'h2'=>'hentai', 'h3'=>'hippo' ) ); echo http_build_query($data); echo http_build_query($data, 'X'); /* 클라이언트의 요청에 대한 응답으로 서버가 전송하는 헤더정보를 배열로 반환 get_headers array = get_headers(string_url) http://php.net/manual/en/function.get-headers.php */ $url = "http://php.net"; print_r(get_headers($url)); print_r(get_headers($url,1));

2015년 1월 30일 금요일

PHP 디렉토리 함수 정리


/*
opendir, closedir
resource = opendir(string_path)
void closedir(resource_dir_handle)
http://php.net/manual/en/function.opendir.php
http://php.net/manual/en/function.closedir.php
*/
$dir = "../public_html/";
// 알고 있는 디렉토리를 열어서, 내용을 읽어들이는 작업입니다.
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            echo "filename: $file : filetype: " . filetype($dir.$file);
        }
        closedir($dh);
    }
}

/*
readdir
string = readdir(resource_dir_hendle)
http://php.net/manual/en/function.readdir.php
*/
if ($handle = opendir('test/')) {
    echo "Directory handle : " . $handle;
    echo "Files : ";

    /* 디렉토리 안을 루프하는 올바른 방법입니다. */
    while (false !== ($file = readdir($handle))) {
        echo $file;
    }

    /* 디렉토리 안을 루프하는 *잘못된* 방법입니다. */
    while ($file = readdir($handle)) {
        echo $file;
    }

    closedir($handle); 
}

/*
rewinddir
void = rewinddir(resource_dir_handle)
http://php.net/manual/en/function.rewinddir.php
*/
if ($handle = opendir("test")) {
 // 1st
 $filename = readdir($handle);
 echo " file name : " . $filename . "
"; // 2nd $filename = readdir($handle); echo " file name : " . $filename . "
"; // 3rd $filename = readdir($handle); echo " file name : " . $filename . "
"; // 4th $filename = readdir($handle); echo " file name : " . $filename . "
"; // 5th $filename = readdir($handle); echo " file name : " . $filename . "
"; // rewind dir rewinddir($handle); // go to 1st $filename = readdir($handle); echo " file name : " . $filename . "
"; // close dir closedir($handle); } /* chdir bool = chdir(string_directory) http://php.net/manual/en/function.chdir.php */ // 현재 디렉토리 echo getcwd(); // 바뀐 디렉토리 chdir('/public_html/test/'); echo getcwd(); /* dir Class dir(string directory) http://php.net/manual/en/function.dir.php */ $d = dir("css"); echo "Handle: " . $d->handle . "
"; echo "Path: " . $d->path . "
"; while (false !== ($entry = $d->read())) { echo $entry."
"; } $d->close(); /* scandir array = scandir(string_directory, int_sorting_order) http://php.net/manual/en/function.scandir.php */ $dir = 'css'; $files1 = scandir($dir); //asc $files2 = scandir($dir, 1); // desc print_r($files1); print_r($files2);

PHP 파일 시스템 함수 정리


// http://www.gnu.org/licenses/gpl-3.0.txt
$filename = "test.txt";

/*
fopen
resource_handle = fopen(string_filename, string_mode)
http://php.net/manual/en/function.fopen.php
- mode
r  : read, pointer Begin
r+ : read, write, pointer Begin
w  : write, erase, create new file, pointer End 
w+ : write, read, pointer End
a  : add, write, create new file, pointer End
a+ : add, write, read, pointer End
x  : creat new file, write, pointer Begin
x+ : read, write, pointer Begin
c  : write, pointer Begin
c+ : read, write, pointer Begin
*/
$handle = fopen($filename,"r"); // chmod 777 test, "D:\\test\\test.txt"
if ($handle)
{
 echo "file Opened.";
}
else
{
 die("open Failed.");
}

/*
fread
string = fread(resource_handle, int_length)
http://php.net/manual/en/function.fread.php
*/
$handle = fopen($filename,"r");
$temp = fread($handle, 100);
echo $temp;

/*
fwrite, fputs
int = fwrite(resource_handle, string, int)
int = fputs(resource_handle, string, int)
http://php.net/manual/en/function.fwrite.php
http://php.net/manual/en/function.fputs.php
*/
$handle = fopen($filename,"w");
$temp = fwrite($handle, "ABCDEFGabcあいうえお가나다라마바사");
echo $temp;
$temp = fputs($handle, "abcdefg", 3);
echo $temp;
/*
fwrite, fputs
int = fwrite(resource_handle, string, int)
int = fputs(resource_handle, string, int)
http://php.net/manual/en/function.fwrite.php
http://php.net/manual/en/function.fputs.php
*/
$handle = fopen($filename,"w");
$temp = fwrite($handle, "ABCDEFGabcあいうえお가나다라마바사");
echo $temp;
$temp = fputs($handle, "abcdefg", 3);
echo $temp;

/*
feof
bool = feof(resource_handle, int_length)
http://php.net/manual/en/function.feof.php
*/
$temp = "";
$handle = fopen($filename,"r");
while (!feof($handle))
{
 $temp .= fread($handle, 128);
}

/*
fgets
string = fgets(resource_handle, int_length)
http://php.net/manual/en/function.fgets.php
*/
while (($buffer = fgets($handle, 4096)) !== false) {
 echo $buffer;
}
if (!feof($handle)) {
 echo "Error: unexpected fgets() fail\n";
}

/*
fpassthru
int = fpassthru(resource_handle)
http://php.net/manual/en/function.fpassthru.php
*/
if (!feof($handle)) {
 header("Content-Type: text/html");
 header("Content-Length: " . filesize($file));
 fpassthru($handle);
 exit;
}

/*
readfile
int = readfile(string_filename)
http://php.net/manual/en/function.readfile.php
*/
if (file_exists($filename)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($filename));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filename));
    readfile($filename);
    exit;
}

/*
fgetc
string = fgetc(resource_handle)
http://php.net/manual/en/function.fgetc.php
*/
while (!feof($handle)) {
 $char = fgetc($handle);
 echo $char . ", ";
}

/*
fgetss
string = fgetss(resource_handle)
http://php.net/manual/en/function.fgetss.php
*/
while (!feof($handle)) {
 $strip_tags = fgetss($handle);
 echo $strip_tags;
}

/*
fgetcsv
array = fgetcsv(resource_handle)
http://php.net/manual/en/function.fgetcsv.php
*/
$handle = fopen("test.csv","r");
if ($handle)
{
 while($col = fgetcsv($handle,1024,","))
 {
  $row = count($col);
  //print_r($col);
  foreach ($col as $key=>$val) {
   echo $col[$key] . ",";
  }
  echo "
"; } echo "Total = " . $row; } else { die("open Failed."); } /* file array = file(string_filename) http://php.net/manual/kr/function.file.php */ $array = file("test.txt"); for ($i = 0; $i < count($array); $i++) { echo $array[$i]; } $lines = file("http://php.net/"); while (list($line_num,$line)=each($lines)) { echo "Line" . $line_num . " : " . htmlspecialchars($line) . "
"; } /* filesize int = filesize(string_filename) http://php.net/manual/kr/function.filesize.php */ $size = filesize("test.txt"); echo $size . " Bytes"; /* file_exists bool = file_exists(string_filename) http://php.net/manual/kr/function.file-exists.php */ if (file_exists($filename)) { echo "The file $filename exists"; } else { echo "The file $filename does not exist"; } /* is_executable bool = is_executable(string_filename) http://php.net/manual/kr/function.is-executable.php */ if (is_executable($filename)) { echo $filename.' is executable'; } else { echo $filename.' is not executable'; } /* is_writable bool = is_writable(string_filename) http://php.net/manual/kr/function.is-writable.php */ if (is_writable($filename)) { echo $filename.' is writable'; } else { echo $filename.' is not writable'; } /* copy bool = copy(string_source, string_dest) http://php.net/manual/kr/function.copy.php */ $file = "test.txt"; $newfile = "test.bak"; if (!copy($file, $newfile)){ echo "failed to copy $file...\n"; } /* rename bool = rename(string_oldname, string_newname) http://php.net/manual/kr/function.rename.php */ rename("test.txt", "test.new.txt"); /* unlink bool = unlink(string_filename) http://php.net/manual/kr/function.unlink.php */ unlink("test.csv"); /* mkdir bool = mkdir(string_pathname, int_mode) http://php.net/manual/kr/function.mkdir.php */ $structure = "depth1/depth2/depth3/"; if (!mkdir($structure, 0777, true)) { die("Failed to create folders..."); } /* rmdir bool = rmdir(string_dirname) http://php.net/manual/kr/function.rmdir.php */ if (!is_dir("FolderName")) { mkdir("FolderName"); } rmdir("FolderName"); /* basename string = basename(string_path, string_suffix) http://php.net/manual/kr/function.basename.php */ echo "1) ".basename("/etc/sudoers.txt", ".txt").PHP_EOL; echo "2) ".basename("/etc/passwd").PHP_EOL; echo "3) ".basename("/etc/").PHP_EOL; echo "4) ".basename(".").PHP_EOL; echo "5) ".basename("/"); /* dirname string = dirname(string_path) http://php.net/manual/kr/function.dirname.php */ echo "1) " . dirname("/etc/passwd/test.txt") . PHP_EOL; // 1) /etc/passwd echo "2) " . dirname("/etc/passwd") . PHP_EOL; // 1) /etc echo "3) " . dirname("/etc/") . PHP_EOL; // 2) / (or \ on Windows) echo "4) " . dirname("."); // 3) . /* pathinfo array = pathinfo(string_path) http://php.net/manual/kr/function.pathinfo.php */ $path_parts = pathinfo('/www/htdocs/inc/lib.inc.php'); echo $path_parts['dirname'], "
"; // folder name echo $path_parts['basename'], "
"; // file + extension name echo $path_parts['extension'], "
"; // extension name echo $path_parts['filename'], "
"; // file name /* rewind bool = rewind(resource_handle) http://php.net/manual/kr/function.rewind.php */ $handle = fopen('test.txt', 'r+'); fwrite($handle, 'Really long sentence.'); rewind($handle); fwrite($handle, 'Foo'); rewind($handle); echo fread($handle, filesize('test.txt')); rewind($handle); echo fgets($handle); /* fseek int = fseek(resource_handle, int_offset) http://php.net/manual/kr/function.fseek.php */ $handle = fopen('test.txt', 'r'); while (!feof($handle)) { echo fgets($handle, 4096); } rewind($handle); echo fgets($handle); // move next 10 byte fseek($handle, 10, SEEK_SET); echo fgets($handle); // from now point. move next 5 byte fseek($handle, 5, SEEK_CUR); echo fgets($handle); // from end point. move prev 10 byte fseek($handle, -10, SEEK_END); echo fgets($handle); /* ftell int = ftell(resource_handle) http://php.net/manual/kr/function.ftell.php */ $handle = fopen($filename, "r"); echo ftell($handle); // 0 echo fgets($handle,7); echo ftell($handle); // 6 /* parse_ini_file array = parse_ini_file(string_filename) http://php.net/manual/kr/function.parse-ini-file.php */ define('BIRD', 'Dodo bird'); // Parse without sections $ini_array = parse_ini_file("test.ini"); print_r($ini_array); // Parse with sections $ini_array = parse_ini_file("test.ini", true); print_r($ini_array); /* is_uploaded_file bool = is_uploaded_file(string_filename) http://php.net/manual/kr/function.is-uploaded-file.php */
if (is_uploaded_file($_FILES['uploadedfile']['tmp_name'])) { echo "File ". $_FILES['uploadedfile']['name'] ." uploaded successfully.\n"; echo "Displaying contents\n"; readfile($_FILES['uploadedfile']['tmp_name']); } else { echo "Possible file upload attack: "; echo "filename '". $_FILES['uploadedfile']['tmp_name'] . "'."; } /* move_uploaded_file bool = move_uploaded_file(string_filename, string_destination) http://php.net/manual/kr/function.move-uploaded-file.php */ $uploads_dir = 'iglu'; if (is_uploaded_file($_FILES["uploadedfile"]["tmp_name"])) { //print_r($_FILES); echo "file name : " . $_FILES["uploadedfile"]["name"]; echo "file size : " . $_FILES["uploadedfile"]["size"]; echo "file type : " . $_FILES["uploadedfile"]["type"]; echo "temp name : " . $_FILES["uploadedfile"]["tmp_name"]; //save path $dest = $uploads_dir . "/" . $_FILES["uploadedfile"]["name"]; //save file if (move_uploaded_file($_FILES["uploadedfile"]["tmp_name"], $dest)) { echo "MOVED SUCCESS!"; } else { die("MOVED Failed!"); } } else { die("NO FILE"); } /* fclose bool = fclose(resource_handle) http://php.net/manual/en/function.fopen.php */ $tf = fclose($handle); if($tf) { echo "
file Closed."; } else { echo "
close Failed."; }

2015년 1월 28일 수요일

마이티 나이트(Mighty Knight) 간략 리뷰

킹덤러쉬 오리진 플래쉬를 기다렸지만,
결국 PC 버전은 나오지 않는다는 공식 사이트 포럼의 소식입니다.
( 돈되는 모바일 앱만 출시하겠단말... ㅡㅡ; )

한동안 신작 플래쉬 게임이 뜸했고

재밌는 플래쉬 게임을 찾다가, 우연히 횡스크롤 액션 게임을 발견했습니다.

게임 제목은 "마이티 나이트" 나이츠?

첫 인트로 화면은 '킹덤러쉬'와 비슷.


지도 맵 나오는 것도 '킹덤러쉬' 와 그림체가 비슷.
게임모드도 '킹덤러쉬'와 마찬가지로 3가지.
DEATH 모드는 안해봤는데, 어렵겠지? 아마도


맵을 하나 깰때마다 금화를 준다. 
금화로 무기를 업그레이드 할 수 있다.


이렇게 용병도 살수있다.


횡스크롤 액션게임.

그 옛날 오락실 게임이던, 삼국지 천지를먹다? 같은거.


하지만 이 게임은 유럽스타일? ㅋㅋ

이기면 VICTORY 라고 뜨는것도 '킹덤러쉬'와 비슷하다.


솔직히, 완성도가 많이 떨어지고, 아류작같은 분위기가 나지만

플래시 게임에서 횡스크롤 액션게임이 별로 없었는데, 반가운 마음에 소개를 합니다.

게임은 여기서 ! http://www.kongregate.com/games/swartag/mighty-knight


노말(eliminate)모드 해봤는데, 너무 어렵다.
1분도 안되서 쥬금 ㅠㅠ
횡스크롤은 아닌듯. 맵이 딱 정혀져잇음;

데쓰모드는 더 어려울듯..

방향키 + 키보드 Z (공격), 마법은 x,c
대화창 뜨면 스페이스바 누르면 넘어갑니다. 즐겜!

갑자기 디아블로2 카우방 생각났어; 


끝판왕 보스 입니다.. 텔레포트를 자꾸하고 상당히 쎄다는


팁. 퀘스트 깨기가 힘들면, 했던거 또하고 또해서

돈 모은다음에 업그레이드 하고 진행하면 됩니다.


KMPlayer 지원하지 않는 오디오 코덱(DTA,AC3,E-AC3) 해결법

매우 좋은 프로그램이지만,
이런 에러 메세지가 나오기도 한다.


지원하지 않는 오디오 코덱(DTA,AC3,E-AC3)입니다.
자세한 사항은 포럼에서 확인하세요.

확인을 누르면, 코덱을 받을수 있는 사이트로 연결되어야 하는데,

http://player.kmpmedia.net/redirect/info_codec/?dummy=

페이지가 없는 상태이다.

아래 글에서 확인 할 수 있었는데, 윈도우8에서는 지원을 하고 있다고 한다.

http://forums.kmplayer.com/korea/showthread.php?p=13675
http://blog.naver.com/lshs0806/220234771522

AC3 Fileter 가 설치되어있는데도, 이런에러가 뜨는건
업데이트가 되면서 코덱유료문제?로 코덱이 빠진게 아닐까? 추측해본다.

환경설정에서 ALL Disable 만 해주면 정상작동하는것을 확인했다.


즐감!

2015년 1월 24일 토요일

jQuery 기본, 문서의 동작 확인하기 setTimeout , setInterval

http://jquery.com/

웹페이지가 준비되면 실행되는 제이쿼리 기본 문구이다.

$(document).ready(function(){

//TODO:

});

셑인터발 또는 셑타임아웃으로 간단하게 작동을 확인해보자.

$(document).ready(function(){

   start(); // 문서가 준비되면 start 함수를 실행한다.

   function start(){
      setTimeout(start,1000); // 1초 후 start를 재귀호출한다.
      console.log('hello~'); // 크롬 브라우저라면 F12를 눌러 확인할 수 있다.
      alert('hello~');
   }
});

이렇게하면, 계속 hello~ 를 한다.
어느정도 hello~ 를 하고나면 그만두게 하자.

hello~ 대신 시간을 찍어보자.
$(document).ready(function(){

 var watch; // 왓치라는 변수를 하나 만든다.
 
 function start(){
    watch = setTimeout(start,1000); //왓치변수에 재귀호출하는 행위를 넣는다.
    timer(); //타이머 함수를 불러온다.
 }

 function timer(){
  var d = new Date(); // 이번엔 시간을 찍어보자.
  var t = d.toLocaleTimeString(); // 우리말에 맞게 시간만 뽑아낸다.
  console.log(t);
 }
 
 function stop(){ // stop 이라는 함수는 6초후 
  setTimeout(function() { // 이름없는 함수를 호출하는 동작을 한다.
   clearTimeout(watch); // 재귀호출하는 watch 변수를 지운다.
  }, 6000);
 }

 start(); // start 함수 시작. 6초 동안 시간을 찍는다.
 stop(); // stop 함수 시작. 6초 후 시간 찍는것을 멈춘다.

});

setInterval 함수 역시 setTimeout 과 사용방법은 똑같다.

차이점은 setTimeout 은 한번만 실행되고 사라지기 때문에, 재귀함수로 계속 호출해줘야하지만 , setInterval 재귀함수 없이 밀리세컨드 간격으로 반복해서 실행하는것이 가능하다.

잘 이해가 안간다면 아래 소스와 위 소스 코드를 비교해보자.

$(document).ready(function(){

 var watch;
 
 function start(){
    watch = setInterval(timer,1000);
 }

 function timer(){
  var d = new Date();
  var t = d.toLocaleTimeString();
  console.log(t);
 }
 
 function stop(){
  setTimeout(function() {
   clearInterval(watch); // interval 함수 타이머 종료
  }, 6000);
 }
 start();
 stop();
});

버튼으로 만들면, 타이머를 만들 수 도 있다.

2015년 1월 17일 토요일

서브라임 텍스트 단축키

Preferences > Key Bindings > Default 를 선택하면
단축키 목록이 뜨는데, 사용자가 임의로 설정하여 저장할 수 있다.

전체 화면 : F11

한줄 주석/취소 : Ctrl + /

블럭 주석/취소 : Ctrl + Shift + /

현재라인을 한라인 위로 이동 : Ctrl + Shift + ↑

현재라인을 한라인 아래로 이동 : Ctrl + Shift + ↓

아래로 한라인 추가 : Ctrl + Enter

위로 한라인 추가 : Ctrl + Shift + Enter

현재라인 삭제 : Ctrl + Shift + K

현재라인을 바로 아래에 복사 : Ctrl + Shift + D

코드 펴기/접기 : Ctrl + Shift + ,

화면 나누기 : Shift + Alt + 1, 2, 3 ...

화면 이동 : Ctrl + 1, 2, 3 ...

같은 변수 한꺼번에 선택 편집 : Alt + F3

세로 선택 : Ctrl + Alt + ↑,↓ 또는 Shift + 마우스 우클릭 드래그

검색 : Ctrl + F

치환 : Ctrl + H

서브라임 텍스트 FTP 연결 방법

굉장히 좋은 프로그램이긴 한데,
클릭몇번으로 설정할 수 있는 친절한 프로그램은 아닌듯..
FTP 연결을 하려면 (파이썬)코드를 입력하여 플러그인을 설치해야하는데,
이건 뭐 외울수도 없고... 어디다 적어놔야 할판

Sublime Text SFTP 연결방법



1. CTRL + ~ 을 누르면 콘솔 입력창이 뜬다.



2. 아래 사이트에 가서 해당코드를 복사해 콘솔창에 붙여넣은 후 엔터.
버전별로 코드가 다르니 참고하도록..
https://packagecontrol.io/installation


3. 설치가 완료되면 Preferences > Package Control 이라는 메뉴가 생긴다.


4. 패키지콘트롤 선택 후 install package 라고 입력하고 엔터를 치면, 다시 메뉴가 뜨는데


5. sftp 라고 입력하면 항목이 뜨는데, sftp를 고르고 엔터를 치면, sftp 가 설치가 된다.


6. 설치가 완료되었으면, File > SFTP/FTP 메뉴가 생기는데 Setup Server 를 누른다.


7. File > Open Folder 로 폴더를 선택. View > Side Bar 로 사이드바를 보이게 한다.
CTRL + K,B 단축키로 사이드바를 보였다/숨겼다 할 수 있다.

8. 열린 폴더위에 마우스 우클릭 > SFTP/FTP > Map to Report 를 선택한다.


9. sftp-config.json 파일이 나오는데, 타입,포트,호스트,유저,비밀번호를 설정한다.


10. 그리고 파일을 저장을 하면 FTP 와 싱크 완료. 
로컬에서 파일을 저장하면 서버에도 저장된다.

*단점 : 유료다... 20달러, 서브라임 구매와 상관없이 사야한다.
등록하지 않으면 수시로 등록 권유 알림창이 뜬다.
sftp-config.json 에 일일이 등록유저의 이메일과 시리얼을 적어야한다.

플러터 단축키

1. 위젯 감싸기/벗기기 비주얼 스튜디오 :   Cmd + . 안드로이드 스튜디오 : Alt + Enter 2. 코드 정렬 비주얼 스튜디오 : Ctrl + S 안드로이드 스튜디오 : Ctlr + Alt + L 3. StatelessWidget ->...