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 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; $ifix_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; } ==========================================================================