2015. 2. 4. 10:50

문자열에서 특정한 문자(열)이 있는지 여부와 시작 위치를 가져오는 함수(strpos, stripos등)를 사용하다 보면

Warning: strpos(): Offset not contained in string in ~ 라는 경고가 나올때가 있습니다.

위 경고문은 "offset인수는 문자를 포함할 수 없다." 라는 것인데 

이 인수를 숫자를 넣었는데도 이러한 경고가 발생할때가 있습니다.

 

따라서 오늘은 어떠한 상황에서 이러한 경고가 나오는지에 대해 포스팅을 하겠습니다.

 

아래의 코드는 정상적인 코드입니다.

(코드는 Syntax Highlighter가 적용되어 모바일에서는 안보일 수 있습니다.)

 

$search = "op";
$desc = "abcdefghijklmnopqrstuvwxyz";
$offset = 0;
$pos = strpos($desc, $search, $offset);
if($pos === false)
 echo"not found!";
else
 echo"found! pos : $pos";

 

위 코드를 실행시키면 "found! pos : 14"란 결과가 표시됩니다.

 

다음 코드는 실제로 offset인수에 문자열을 넣어봤습니다.

(코드는 Syntax Highlighter가 적용되어 모바일에서는 안보일 수 있습니다.)

 

$search = "op";
$desc = "abcdefghijklmnopqrstuvwxyz";
$offset = "a";
$pos = strpos($desc, $search, $offset);
if($pos === false)
 echo"not found!";
else
 echo"found! pos : $pos";

 

그런데 이 코드를 실행시면 다른 경고가 발생합니다.

"Warning: strpos() expects parameter 3 to be long, string given in ~"

 

다시 코드를 수정해 보겠습니다. 이번엔 offset값을 -1로 지정하였습니다.

(코드는 Syntax Highlighter가 적용되어 모바일에서는 안보일 수 있습니다.)

 

$search = "op";
$desc = "abcdefghijklmnopqrstuvwxyz";
$offset = -1;
$pos = strpos($desc, $search, $offset);
if($pos === false)
 echo"not found!";
else
 echo"found! pos : $pos";

 

이번엔 "Warning: strpos(): Offset not contained in string in ~ " 라는 경고가 발생합니다.

1. offset 인수에 음수를 사용하면 해당 메시지가 발생합니다.

 

이번에는 문자열을 찾는 대상인 $desc의 값을 변경해보겠습니다.

(코드는 Syntax Highlighter가 적용되어 모바일에서는 안보일 수 있습니다.)

 

$search = "op";
$desc = "";
$offset = 0;
$pos = strpos($desc, $search, $offset);
if($pos === false)
 echo"not found!";
else
 echo"found! pos : $pos";

 

특별한 경고없이 "not found!"가 표시됩니다.

 

다음 코드를 보시겠습니다.

(코드는 Syntax Highlighter가 적용되어 모바일에서는 안보일 수 있습니다.)

 

$search = "op";
$desc = "";
$offset = 2;
$pos = strpos($desc, $search, $offset);
if($pos === false)
 echo"not found!";
else
 echo"found! pos : $pos";

 

이번에도 "Warning: strpos(): Offset not contained in string in ~ " 라는 경고가 발생합니다.

2. 찾는 대상의 값이 NULL일때 offset값을 0이 아닌 다른값이 주어지면 해당 메시지가 발생합니다.

 

$search 의 값은 별도로 테스트 해보지 않았기 때문에 다른 경우가 추가로 있을 수도 있겠지만

위의 경우들을 살펴보시면 해당 메시지가 나왔을때 어디를 점검해봐야 하는지 어느정도는 알 수 있을것 입니다.

 

 

 

Posted by 작은0악마