Press "Enter" to skip to content

[태그:] php

PHP에서 콜백함수 사용하기

간단하게 호출하기

<?php
function cbExclaim($str) 
{
  return print($str."!\n");
}

function cbAsk($str) 
{
  return print($str."?\n");
}

function callCallback($str, $cbFunc) 
{
  // $cbFunc로 콜백 함수 호출
  $cbFunc($str);
}

// $cbFunc 파라미터에 "cbExclaim", "cbAsk" 입력하여 콜백함수 호출
callCallback("안녕", "cbExclaim");
callCallback("안녕", "cbAsk");
?>

출력

안녕!
안녕?

인스턴스의 함수를 파라미터와 함께 호출하기

<?php
    // $obj는 클래스의 인스턴스. function_name 이라는 함수를 가지고 있다.
    $cbfunc = array(&$obj, "function_name");
    $param = array("param1", "param2", true);

    // $obj->function_name 함수를 
    // 파라미터 3개("param1", "param2", true)를 대입하여 호출한다.
    $rtn = call_user_func_array($cbfunc, $param);
?>

PHP v5.6 이상에서 mcrypt_encrypt() 함수 사용 시 발생하는 에러 해결

mcrypt_encrypt(): Key of size 6 not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported in test.php on line 128

암/복호화시 사용하는 mcrypt_encrypt() 함수가 PHP 5.6 이상에서 제약사항이 있습니다.
암/복호화시 사용하는 key의 길이를 16, 24, 32 에 맞게 사용해야 한다는 것입니다.
자릿수가 맞지 않으면 위와 같은 에러메시지를 출력하고 정상적으로 암/복호화 되지 않습니다.

그러면 php v5.6 미만에서 자유로운 길이로 사용하던 key 를 v5.6이상에서 어떻게 처리해야 할까?
다구나 키를 바꾸면 기존에 사용하던 암/복호화 된 문자열을 쓰기가 골치 아파집니다.
요렇게 해봅시다. 짧은 키도 그대로 사용할 수 있습니다.

// 암호화
function ase_encrypt($plainText)
{
    $key = 'mykeys';
    $key = str_pad($key, 16,chr(0));  // Key 자릿수 채우기
    $mode = MCRYPT_MODE_ECB;
    $enc = MCRYPT_RIJNDAEL_128;
    $iv = mcrypt_create_iv(mcrypt_get_iv_size($enc, $mode), MCRYPT_RAND);

    return strtoupper(bin2hex(mcrypt_encrypt($enc, $key, $plainText, $mode, $iv)));
}
// 복호화
function ase_decrypt($encText)
{
    $key = 'mykeys';
    $key = str_pad($key, 16,chr(0));  // Key 자릿수 채우기
    $mode = MCRYPT_MODE_ECB;
    $enc = MCRYPT_RIJNDAEL_128;
    $iv = mcrypt_create_iv(mcrypt_get_iv_size($enc, $mode), MCRYPT_RAND);

    $encText = mcrypt_decrypt($enc, $key, pack("H*", $encText), $mode, $iv);

    return rtrim($encText, $encText[strlen($encText)-1]);
}