PHP 버전
5.2+
$str_filename = 'image.테스트.PNG'; // 한글과 같은 multi-byte 문자열이 섞어 있는 파일명
$extension = '.png'; // 대소문자 구분 없이 찾을 확장자(예:.PNG와 .png 같은 경우)

$extension_position = mb_strripos($str_filename, $extension, 0, 'UTF-8');

if ($extension_position !== false) {
    echo "찾은 위치: $extension_position";
} else {
    echo '확장자를 찾을 수 없습니다.';
}

// 출력: 찾은 위치: 9

/*
 * 주의하세요!
 * 문자열에서 인덱스는 0부터 시작합니다.
 * 첫 번째 문자의 인덱스는 0이고, 두 번째 문자의 인덱스는 1입니다.
*/
$str = '환영합니다. PHP입니다. 즐거운 php';
$substring = 'PHP';

$position = strripos($str, $substring);

if ($position !== false) {
    echo "부분 문자열이 발견된 위치: $position";
} else {
    echo '부분 문자열이 발견되지 않았습니다.';
}

// 출력: 부분 문자열이 발견된 위치: 41 <= 원하지 않는 결과가 발생합니다.
mb_strripos(
    string $haystack,
    string $needle,
    int $offset = 0,
    ?string $encoding = null
): int|false
$newstring = '가나다라 마바사';
$pos = mb_strripos($newstring, '가', 0, 'UTF-8');

var_dump($pos); // int(0)
$newstring = '가나다라 마바사';
$pos = mb_strripos($newstring, '가', 0, 'UTF-8');

var_dump($pos); // int(0)

if ($pos === false) {
    echo "문자열에 '가'를 찾을 수 없습니다.";
} else {
    echo "문자열에 '가'가 포함되어 있습니다.";
}

// 출력: "문자열에 '가'가 포함되어 있습니다."

/* 또는 */

if ($pos !== false) {
      echo "문자열에 '가'가 포함되어 있습니다.";
} else {
   echo "문자열에 '가'를 찾을 수 없습니다.";
}

// 출력: "문자열에 '가'가 포함되어 있습니다."