질문/조언질답게시판
Extra Form
PHP PHP 7.2
CMS Rhymix 1.x

출석부 스킨에서 php로 조건을 걸 일이 있어 시도해보니 에러가 나서 문의 드립니다.

서버의 에러는 확인하지 못했고 에러출력 메시지에 서버에러가 났다는 정도만 표시되 다른 표시는 없어 자세히 확인은 못했습니다.

 

{@

$today = date("md");

}

 

 

<[email protected]($today == 0428)-->

코드진행

<[email protected]>

 

여기서 에러가 납니다.  

전 $today 값이 숫자로 인식될 것 같아서 위와 같이 했더니 서버에러가 나서 '0428' 이렇게 해주니 에러가 나지 않아서 질문을 올리게 되었습니다.

 

1.$today 에 문자로 담기는 건가요?

2.비교할 대상이 숫자 VS 문자 의 경우 그냥 false 가 나오는게 아니고 에러가 나오나요??

3.에러가 나는게 정상이고 에러를 방지하기 위해 변수를 담을때  int()로 지정하면 될까요?

 

 

  • profile

    $today가 숫자형이라면 0428이 아니라 428로 기록이 될 겁니다.
    그런 이유로 date 함수의 저장값은 문자열로 되는 것 같아요.
    2번은 저도 잘 모르겠네요.

    조건문 안에서 $today를 숫자형으로 전제하고 진행되는 코드가 있을지도 모르겠구요.

  • profile profile

    숫자로 전제 자체가 잘못된 거네요.
    0으로 시작하는 정수가 말이 안되는거였어요.

    조건문에 아무것도 없어도 에러가 나네요. 0428 이건 숫자가 아닌게 맞죠....  제가 이상한 생각을...

    문자로 취급하고 출발했어야 하는게 맞나 봅니다.

     

    변수에 담기는 것도 숫자가 아니지만 비교하는 대상도 0428 숫자가 아닌데 ''를 생략했으니 에러가 나는게 맞겠네요.

  • profile profile
    php 테스트 사이트에서 테스트해보니

    <?php
    $today = date("md");
    if($today == 428) echo $today;

    이렇게 하면 0428 출력이 되네요.

    <?php
    $today = date("md");
    if($today === 428) echo $today;

    이렇게 하면 false로 변수값이 출력되지 않구요.

    비교하려는 대상 자체가 0428 이 에러였네요. '0428' 이 너무나 당연한....
  • profile

    상당수의 프로그래밍 언어에서 0으로 시작하는 정수는 10진법이 아닌 8진법으로 인식합니다.

    대표적으로 chmod() 함수에서 퍼미션을 지정할 때 사용하는 0777, 0644 등이 있습니다.

    0777 = (7 × 82) + (7 × 8) + 7 = 511입니다. 777과는 전혀 다른 숫자입니다.

     

    그런데 8진법은 0~7까지의 숫자만으로 표현합니다.

    0428에는 8진법에 쓸 수 없는 숫자가 포함되어 있으므로, 애초에 해석을 못하고 에러를 뿜는 것입니다.

    만약 0427이었다면 (4 × 82) + (2 × 8) + 7 = 279로 해석해서, 에러는 안 뿜고 그냥 조용히 오작동했겠지요.

     

    마찬가지로, 0x로 시작하는 숫자는 16진법으로 인식합니다. 0xFF = 255

    NeM이라는 형태로 쓰면 N × 10M이라는 과학적 기수법으로 인식합니다. 1.5e4 = 1.5 × 104 = 15000

    이것 때문에 뭔가를 md5로 암호화했을 때 0e로 시작하면 0으로 인식하는 버그가 발생한 적도 있습니다.

    숫자가 아닌 것은 반드시 '따옴표'로 감싸주어야 이런 불상사가 일어나지 않습니다.

    따옴표로 감싸지 않은 것은 모두 해당 언어에서 특수한 의미를 가진 것으로 해석될 수 있으니까요.

  • profile profile
    8진수가 가능하군요.
    저는 0,4,2,8 모두 숫자군! 이러고 있었습니다. 잠시 멍청이가 되었.....