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));

플러터 단축키

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