$haystack_en = 'Hello, world!';
var_dump(str_ends_with($haystack_en, 'world!')); // bool(true)
var_dump(str_ends_with($haystack_en, 'World!')); // bool(false) => 대소문자를 구분
var_dump(str_ends_with($haystack_en, 'world')); // bool(false)

$haystack_ko = '환영합니다!';
var_dump(str_ends_with($haystack_ko, '!')); // bool(true)
var_dump(str_ends_with($haystack_ko, '환영합니다!')); // bool(true)
var_dump(str_ends_with($haystack_ko, 'xxx환영합니다!')); // bool(false)
str_ends_with(string $haystack, string $needle): bool
$haystack_1 = 'Hello, world!';
var_dump(str_ends_with($haystack_1, '')); // bool(true)

$haystack_2 = '';
var_dump(str_ends_with($haystack_2, '')); // bool(true)
if ( ! function_exists( 'str_ends_with' ) ) {
	/**
	 * PHP 8.0에서 추가된 `str_ends_with()` 함수의 폴리필.
	 *
	 * 대소문자를 구분하여 주어진 문자열(haystack)이
	 * 특정 부분 문자열(needle)로 끝나는지 확인합니다.
	 *

	 * @param string $haystack 검색할 문자열.
	 * @param string $needle   `$haystack`에서 검색할 부분 문자열.
	 * @return bool `$haystack`가 `$needle`로 시작하면 true를, 그렇지 않으면 false를 반환.
	 */
	function str_ends_with( $haystack, $needle ) {
		if ( '' === $haystack ) {
			return '' === $needle;
		}

		$len = strlen( $needle );

		return mb_substr( $haystack, -$len, $len ) === $needle;
	}
}
/* 파일 확장자를 확인하는 함수 */
function check_image_file($file_path) {
    // 지원되는 이미지 파일 확장자 배열 목록(소문자로 작성)
    $allowed_extensions = ['.jpg', '.jpeg', '.png', '.gif'];

    // 파일 경로를 소문자로 변환하여 비교
    // str_ends_with() 함수는 대소문자를 구분하기 때문에
    // 확장자가 소문자여도 대문자 확장자를 처리하지 못할 수 있기 때문임
    $lower_case_file_path = strtolower($file_path);

    // 파일 확장자가 목록 중 하나로 끝나는지 확인하는 부분
    $is_image = false;
    foreach ($allowed_extensions as $extension) {
        if (str_ends_with($lower_case_file_path, $extension)) {
            $is_image = true;
            break;
        }
    }

    // 검사 결과에 따라 메시지를 출력
    if ($is_image) {
        echo '지원되는 이미지 파일입니다.';
    } else {
        echo '지원되지 않는 파일 형식입니다.';
    }
}

// 함수 호출 예시
check_image_file('picture.jpg');  // 지원되는 이미지 파일입니다.
check_image_file('document.pdf');  // 지원되지 않는 파일 형식입니다.