질문/조언질답게시판
Extra Form
PHP PHP 7.0
CMS Rhymix
{@
    $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;
    }
?>

 

이게 어인 일인가요;;;

  • profile
    자! 이제 질문을 올리셨으니 답이 떠오르실 겁니다.
  • profile profile
    하루종일 모니터 앞에 있었더니 하나도 감이 안 잡힙니다ㅜㅜㅜ
  • profile

    위의 것은 원본 그대로 돌려도 PHP 문법 오류가 발생합니다.

    아래의 것은 중괄호로 바꾸셨으니 무효고요.

     

    if (조건): 코드; else: 코드; endif; 문법 안에서는 if (조건) 코드; 문법을 사용할 수 없습니다.

    안쪽에 있는 조건문들도 모두 if (조건): 코드; endif; 형식으로 바꿔주셔야 합니다.

     

    else: endif; 문법은 일반적인 중괄호 문법보다 좀더 까다롭게 구는 면이 있습니다.

    그 문법을 쓰는 순간 PHP가 파이썬이 되어 버린다고 생각하세요. ㅋㅋㅋ

  • profile profile
    그렇게 하니까 되네요. 다행입니다. 감사합니다!

    아까는 if (조건): 코드; endif; 형태로도 안 됐던 것 같은데,
    제 기억이 잘못된 거겠죠? 코드는 거짓말을 할 리가 없겠죠...
    오늘은 지쳐서 더는 안 되겠네요ㅡㅜ
  • profile

    아, 그리고 정규식에서 (http|https)는 https?로 줄여서 쓸 수 있습니다. s가 있거나 말거나~ 라는 뜻입니다.

    https://github.com/rhymix/rhymix/pull/727 적용 후 파이프 문자(|)도 가끔 충돌을 일으키곤 하니
    정규식 사용하실 때 웬만하면 이 문자가 나오지 않도록 해 주시는 것이 안전합니다.

  • profile profile
    아하, 충돌 가능성이 있군요. 바꾸겠습니다!