* 공식 문서 : www.php.net/manual/en/migration74.deprecated.php
1. Magic Quotes를 쓸 수 없음. (get_magic_quotes_gpc() 관련 함수)
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
if ( function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc() ) {
$value = stripslashes($value);
}
if ( version_compare(phpversion(), '7.0.0', '>=') )
$value = stripslashes($value);
else
if (get_magic_quotes_gpc()) { $value = stripslashes($value); }
2. count() 함수
- 에러 메세지 : Warning: count(): Parameter must be an array or an object that implements Countable in ...
for ( $i=0; $i<count($doRs); $i++ ) {
// ... ... ...
}
Warning: count(): Parameter must be an array or an object that implements Countable in ...
for ( $i=0; is_countable($doRs) && $i<count($doRs); $i++ ) {
// ... ... ...
}
// PHP7과 PHP5 버전에서 같이 써야 할 경우 다음과 같이 공통함수에 넣어놓자!
// is_countable 함수는 php7 이상에만 있음으로...
if (!function_exists('is_countable')) {
function is_countable($var) {
return (is_array($var) || $var instanceof Countable);
}
}
3. 배열 및 문자열에서 중괄호 사용 금지 (Curly bracket)
PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in ... on line 9567
({([$,-,+,*,\/\w]+)\})
/*
위 정규식으로 IDE에서 전체 파일 검색을 진행하면 모두 찾을 수 있다.
단!!! 정규식에 있는 {}도 검색이 되니 이 부분은 잘 피해가자!!!
아... 또!!! 문자열 중간에 {$foo}와 같은 것들도 검색되니 잘 피해가자!!!
*/
$c = substr(str_pad(decbin(ord($str{$len})),8,'0',STR_PAD_LEFT),0,2);
if ($c == '10')
for (;$c != '11' && $c{0} == 1;$c = substr(str_pad(decbin(ord($str{--$len})),8,'0',STR_PAD_LEFT),0,2));
$c = substr(str_pad(decbin(ord($str[$len])),8,'0',STR_PAD_LEFT),0,2);
if ($c == '10')
for (;$c != '11' && $c[0] == 1;$c = substr(str_pad(decbin(ord($str[--$len])),8,'0',STR_PAD_LEFT),0,2));
4. Short Open Tag 사용 금지
<? echo $foo; ?>
<?php echo $foo; ?>
5. real 타입과 is_real() 함수 삭제
$float_val = (real)$float_val;
if ( is_real($float_val) ) {
// ... ...
}
$float_val = (float)$float_val;
if ( is_float($float_val) ) {
// ... ...
}
6. PHP Deprecated: Cannot use "parent" when current class scope has no parent in ... on line 9567
parent::SetError("No connection");
$this->SetError("No connection");
단, __construct와 __destruct는 그대로 둘 것. 이유는 모름...
parent::__construct(...
parent::__destruct(...
7. 미리 선언되지 않은 상수
미리 선언되지 않은 상수가 사용이 될때 Warning에러 발생 (원래 나는거 아니였나? 왜 7에서만 보이는건지...)
Warning: Use of undefined constant T_URL - assumed 'T_URL' (this will throw an Error in a future version of PHP) in M:\***R***\K***_PHP\******.lib.php on line 1085
if (!$url) $url = T_URL;
===> 선언되지 안흔 상수를 지우고 특정한 값을 지정해버리거나,
===> 사용한 상수를 상단 어딘가에 미리 선언하라.
8. 배열에 접근하려는 offset의 값이 null인 경우
Notice: Trying to access array offset on value of type null in
$uploaded_bytes = $this->fix_integer_overflow((int)$content_range[1]);
$crTmp = isset($cOTLdata['char_data']) ? (int)$content_range[1] : 0;
$uploaded_bytes = $this->fix_integer_overflow($crTmp);
9. 숫자의 사칙연산 수행시 숫자가 아닌 것과 연산을 하면 Notice 에러 발생
Notice: A non well formed numeric value encountered in
function get_config_bytes($val) {
$val = trim($val);
$last = strtolower($val[strlen($val)-1]);
$val = (int)$val; //<== $val을 정수로 변환하면 에러 발생 안함.
switch($last) {
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $this->fix_integer_overflow($val);
}
10. loop 또는 switch 문에서는 break를 쓸 수 없다.
Fatal error: 'break' not in the 'loop' or 'switch' context in ...
break를 쓰면 안되고, return을 써야 한다... 고 한다...
그러나 문제는 또 다른 곳에서도 발생한다.
break를 쓸 일이 없는 경우에 사용해도 동일한 에러가 발생한다.
public static function TYPE($value = NULL) {
$value = self::flattenArrayIndexed($value);
if (is_array($value) && (count($value) > 1)) {
$a = array_keys($value);
$a = array_pop($a);
// Range of cells is an error
if (self::isCellValue($a)) {
return 16;
// Test for Matrix
} elseif (self::isMatrixValue($a)) {
return 64;
}
} elseif(empty($value)) {
// Empty Cell
return 1;
}
$value = self::flattenSingleValue($value);
if (($value === NULL) || (is_float($value)) || (is_int($value))) {
return 1;
} elseif(is_bool($value)) {
return 4;
} elseif(is_array($value)) {
return 64;
break; //<== 삭제해야 한다.
} elseif(is_string($value)) {
// Errors
if ((strlen($value) > 0) && ($value[0] == '#')) {
return 16;
}
return 2;
}
return 0;
} // function TYPE()
11. switch문에서도 "continue"를 쓸 수 있었다. PHP7부터는 "continue 2;"라고 써야 한다.
Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in
switch ($type) {
case self::OLE_PPS_TYPE_ROOT:
$pps = new PHPExcel_Shared_OLE_PPS_Root(null, null, array());
$this->root = $pps;
break;
case self::OLE_PPS_TYPE_DIR:
$pps = new PHPExcel_Shared_OLE_PPS(null, null, null, null, null,
null, null, null, null, array());
break;
case self::OLE_PPS_TYPE_FILE:
$pps = new PHPExcel_Shared_OLE_PPS_File($name);
break;
default:
continue; //<== continue 2; 로 변경하라.
}
실전 예제(?) 걍 내 소스... 중복 처리 위하여...
if ( get_magic_quotes_gpc() )
$value = htmlspecialchars( stripslashes((string)$value) );
else
$value = htmlspecialchars( (string)$value );
--------------------------------------------------------------------------
if ( version_compare(phpversion(), '7.0.0', '>=') )
$value = htmlspecialchars( stripslashes((string)$value) );
else
if ( get_magic_quotes_gpc() )
$value = stripslashes($value);
else
$value = htmlspecialchars( (string)$value );
==========================================================================
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
--------------------------------------------------------------------------
if ( version_compare(phpversion(), '7.0.0', '>=') )
$value = stripslashes((string)$value);
else
if (get_magic_quotes_gpc())
$value = stripslashes($value);
==========================================================================
if( !get_magic_quotes_gpc() )
--------------------------------------------------------------------------
if ( function_exists('get_magic_quotes_gpc') && !get_magic_quotes_gpc() )
==========================================================================
parent::ResetError(); // 에러 셋팅
if (! parent::IsConnected()) { // DB 연결 여부 확인
parent::SetError("No connection");
return false;
} else {
$sql = parent::BuildSQLSelect($tableName, $whereArray,
$columns, $sortColumns, $sortAscending, $limit);
// Execute the UPDATE
if (! parent::Query($sql)) {
return parent::last_result;
} else {
return true;
}
}
--------------------------------------------------------------------------
$this->ResetError(); // 에러 셋팅
if (! $this::IsConnected()) { // DB 연결 여부 확인
$this->SetError("No connection");
return false;
} else {
$sql = $this->BuildSQLSelect($tableName, $whereArray,
$columns, $sortColumns, $sortAscending, $limit);
// Execute the UPDATE
if (! $this->Query($sql)) {
return $this->last_result;
} else {
return true;
}
}
==========================================================================
// 한글 한글자(2byte, 유니코드 3byte)는 길이 2, 공란.영숫자.특수문자는 길이 1
// 유니코드는 http://g4uni.winnwe.net/bbs/board.php?bo_table=g4uni_faq&wr_id=7 의 Mr.Learn님의 글을 참고하였습니다.
function cutString($str, $len, $suffix="…")
{
$c = substr(str_pad(decbin(ord($str{$len})),8,'0',STR_PAD_LEFT),0,2);
if ($c == '10')
for (;$c != '11' && $c{0} == 1;$c = substr(str_pad(decbin(ord($str{--$len})),8,'0',STR_PAD_LEFT),0,2));
return substr($str,0,$len).(strlen($str)-strlen($suffix) >= $len ? $suffix : '');
}
function cutStringHangul ($str, $len, $suffix="…") {
$c = substr(str_pad(decbin(ord($str{$len})),8,'0',STR_PAD_LEFT),0,2);
if ($c == '10')
for (;$c != '11' && $c{0} == 1;$c = substr(str_pad(decbin(ord($str{--$len})),8,'0',STR_PAD_LEFT),0,2));
$tmp = substr($str,0,$len).(strlen($str)-strlen($suffix) >= $len ? $suffix : '');
return cutHangulLast($tmp);
}
--------------------------------------------------------------------------
// 한글 한글자(2byte, 유니코드 3byte)는 길이 2, 공란.영숫자.특수문자는 길이 1
// 유니코드는 http://g4uni.winnwe.net/bbs/board.php?bo_table=g4uni_faq&wr_id=7 의 Mr.Learn님의 글을 참고하였습니다.
function cutString($str, $len, $suffix="…")
{
$c = substr(str_pad(decbin(ord($str[$len])),8,'0',STR_PAD_LEFT),0,2);
if ($c == '10')
for (;$c != '11' && $c[0] == 1;$c = substr(str_pad(decbin(ord($str[--$len])),8,'0',STR_PAD_LEFT),0,2));
return substr($str,0,$len).(strlen($str)-strlen($suffix) >= $len ? $suffix : '');
}
function cutStringHangul ($str, $len, $suffix="…") {
$c = substr(str_pad(decbin(ord($str[$len])),8,'0',STR_PAD_LEFT),0,2);
if ($c == '10')
for (;$c != '11' && $c[0] == 1;$c = substr(str_pad(decbin(ord($str[--$len])),8,'0',STR_PAD_LEFT),0,2));
$tmp = substr($str,0,$len).(strlen($str)-strlen($suffix) >= $len ? $suffix : '');
return cutHangulLast($tmp);
}
==========================================================================
for ($i=0; $i<count($authResult); $i++){
--------------------------------------------------------------------------
for ($i=0; is_countable($authResult) && $i<count($authResult); $i++){
==========================================================================
if (!$url) $url = T_URL; //미리 선언 되지 않은 상수.
--------------------------------------------------------------------------
if (!$url) $url = "/index.php";
==========================================================================
$uploaded_bytes = $this->fix_integer_overflow((int)$content_range[1]);
--------------------------------------------------------------------------
$crTmp = isset($cOTLdata['char_data']) ? (int)$content_range[1] : 0;
$uploaded_bytes = $this->fix_integer_overflow($crTmp);
==========================================================================
function get_config_bytes($val) {
$val = trim($val);
$last = strtolower($val[strlen($val)-1]);
switch($last) {
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $this->fix_integer_overflow($val);
}
--------------------------------------------------------------------------
function get_config_bytes($val) {
$val = trim($val);
$last = strtolower($val[strlen($val)-1]);
$val = (int)$val; //숫자 연산시 형을 명확히 지졍하지 않으면 Notice 에러 발생함. by tank. at 200726.
switch($last) {
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $this->fix_integer_overflow($val);
}
==========================================================================
public static function utf16_decode($str, $bom_be = TRUE) {
if( strlen($str) < 2 ) return $str;
$c0 = ord($str{0});
$c1 = ord($str{1});
if( $c0 == 0xfe && $c1 == 0xff ) { $str = substr($str,2); }
elseif( $c0 == 0xff && $c1 == 0xfe ) { $str = substr($str,2); $bom_be = false; }
$len = strlen($str);
$newstr = '';
for($i=0;$i<$len;$i+=2) {
if( $bom_be ) { $val = ord($str{$i}) << 4; $val += ord($str{$i+1}); }
else { $val = ord($str{$i+1}) << 4; $val += ord($str{$i}); }
$newstr .= ($val == 0x228) ? "\n" : chr($val);
}
return $newstr;
}
--------------------------------------------------------------------------
public static function utf16_decode($str, $bom_be = TRUE) {
if( strlen($str) < 2 ) return $str;
$c0 = ord($str[0]);
$c1 = ord($str[1]);
if( $c0 == 0xfe && $c1 == 0xff ) { $str = substr($str,2); }
elseif( $c0 == 0xff && $c1 == 0xfe ) { $str = substr($str,2); $bom_be = false; }
$len = strlen($str);
$newstr = '';
for($i=0;$i<$len;$i+=2) {
if( $bom_be ) { $val = ord($str[$i]) << 4; $val += ord($str[$i+1]); }
else { $val = ord($str[$i+1]) << 4; $val += ord($str[$i]); }
$newstr .= ($val == 0x228) ? "\n" : chr($val);
}
return $newstr;
}
==========================================================================
--------------------------------------------------------------------------
==========================================================================
--------------------------------------------------------------------------
==========================================================================
--------------------------------------------------------------------------
==========================================================================
--------------------------------------------------------------------------
==========================================================================
--------------------------------------------------------------------------
==========================================================================
--------------------------------------------------------------------------
==========================================================================
--------------------------------------------------------------------------
==========================================================================
--------------------------------------------------------------------------
==========================================================================
--------------------------------------------------------------------------
==========================================================================
'재밌는 IT 개발 > 프로그래밍 자료 모음' 카테고리의 다른 글
MySQL 자주 쓰는 명령어 모음 (0) | 2020.07.29 |
---|---|
리눅스 명령어 모음 (0) | 2020.07.28 |
PLC 프로그래밍 관련 자료 모음 (0) | 2020.05.12 |
댓글