템플릿 문법 어디에 오류가 있나요?
CMS/프레임워크 | Rhymix 1.9 |
---|---|
개발 언어 | PHP 7.0 |
{@
$ref = false;
$referrer = $_SERVER['HTTP_REFERER'];
if ( strpos($referrer, '/index.php?') === false ) :
$url = preg_replace('/^(http|https):\/\//', '', $referrer);
$arr = explode('/', $url);
if ( !in_array('category', $arr) && array_key_exists(2, $arr) ) $ref = true;
if ( in_array('category', $arr) && array_key_exists(4, $arr) ) $ref = true;
else :
if ( strpos($referrer, 'document_srl') !== false ) $ref = true;
endif;
}
$ref = false;
$referrer = $_SERVER['HTTP_REFERER'];
if ( strpos($referrer, '/index.php?') === false ) :
$url = preg_replace('/^(http|https):\/\//', '', $referrer);
$arr = explode('/', $url);
if ( !in_array('category', $arr) && array_key_exists(2, $arr) ) $ref = true;
if ( in_array('category', $arr) && array_key_exists(4, $arr) ) $ref = true;
else :
if ( strpos($referrer, 'document_srl') !== false ) $ref = true;
endif;
}
html 템플릿 파일에서 이렇게 하고 페이지 로드하면 오류를 뿜습니다;;
그치만 php 문법 오류 테스트를 해보면 문제 없이 통과합니다.
실제로 아래처럼 php문법으로 바꿔서 페이지 로드하면 잘 작동하구요;;;
<?php
$ref = false;
$referrer = $_SERVER['HTTP_REFERER'];
if ( strpos($referrer, '/index.php?') === false )
{
$url = preg_replace('/^(http|https):\/\//', '', $referrer);
$arr = explode('/', $url);
if ( !in_array('category', $arr) && array_key_exists(2, $arr) ) $ref = true;
if ( in_array('category', $arr) && array_key_exists(4, $arr) ) $ref = true;
}
else
{
if ( strpos($referrer, 'document_srl') !== false ) $ref = true;
}
?>
$ref = false;
$referrer = $_SERVER['HTTP_REFERER'];
if ( strpos($referrer, '/index.php?') === false )
{
$url = preg_replace('/^(http|https):\/\//', '', $referrer);
$arr = explode('/', $url);
if ( !in_array('category', $arr) && array_key_exists(2, $arr) ) $ref = true;
if ( in_array('category', $arr) && array_key_exists(4, $arr) ) $ref = true;
}
else
{
if ( strpos($referrer, 'document_srl') !== false ) $ref = true;
}
?>
이게 어인 일인가요;;;

윤삼
Lv. 19
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
댓글 6
위의 것은 원본 그대로 돌려도 PHP 문법 오류가 발생합니다.
아래의 것은 중괄호로 바꾸셨으니 무효고요.
if (조건): 코드; else: 코드; endif; 문법 안에서는 if (조건) 코드; 문법을 사용할 수 없습니다.
안쪽에 있는 조건문들도 모두 if (조건): 코드; endif; 형식으로 바꿔주셔야 합니다.
else: endif; 문법은 일반적인 중괄호 문법보다 좀더 까다롭게 구는 면이 있습니다.
그 문법을 쓰는 순간 PHP가 파이썬이 되어 버린다고 생각하세요. ㅋㅋㅋ
아까는 if (조건): 코드; endif; 형태로도 안 됐던 것 같은데,
제 기억이 잘못된 거겠죠? 코드는 거짓말을 할 리가 없겠죠...
오늘은 지쳐서 더는 안 되겠네요ㅡㅜ
아, 그리고 정규식에서 (http|https)는 https?로 줄여서 쓸 수 있습니다. s가 있거나 말거나~ 라는 뜻입니다.
https://github.com/rhymix/rhymix/pull/727 적용 후 파이프 문자(|)도 가끔 충돌을 일으키곤 하니
정규식 사용하실 때 웬만하면 이 문자가 나오지 않도록 해 주시는 것이 안전합니다.