[문의전문] 문의드립니다,
본문
전에는 문제되지 않았는데 php8에서 아래 코드가 뭔가 문제가 있는 거 같습니다,
말하자면 따옴표없는
$list[$i][wr_xx]
즉 <?php echo $list[$i]['wr_'.$o]?> 이게 문제가 없었으나 지금은 문제되는것 아닌가 싶습니다,
$list[$i][''wr_'.$o'] 도 아니고
$list[$i]["'wr_'.$o"] 도 아니고
ㅜㅜ
<?php echo sprintf('%02d',$k+1)."\n".substr($list[$i]['num']);?> 도 문제가 있는거 아닌가 그렇습니다,
안되니까 뭐든 의심스러워집니다,
<?php
for($k=0; $k<5; $k++){
$m = 61+$k;
$n = 86+$k;
$o = 111+$k;
?>
<span class="btn btn2">
<?php echo sprintf('%02d',$k+1)."\n".substr($list[$i]['num']);?>
</span>
<a id="modal_re_<?php echo $wr_id; ?>_<?php echo $k?>" data-bo_table="<?php echo $bo_table; ?>" data-wr_id="<?php echo $wr_id; ?>" data-mb_id="<?php echo $list[$i]['mb_id']; ?>" data-wr_name="<?php echo $list[$i]['wr_name']?>" data-wr_subject="<?php echo $list[$i]['wr_subject']?>" data-bra="<?php echo $list[$i]['wr_'.$o]?>" >
<?php echo (trim($ext25_00)!='')?date("m.d", strtotime($ext25_00)):''?> <?php echo (trim($list[$i]['wr_'.$m])!='')?date("m.d", strtotime($list[$i]['wr_'.$m])):''?> <?php echo $list[$i]['wr_'.$o]?> </a>
<?php } ?>
!-->
답변 3
다음과 같이 해보시는건 어떨까 합니다.
<?php
for($k=0; $k<5; $k++){
$m = 61+$k;
$n = 86+$k;
$o = 111+$k;
?>
<span class="btn btn2">
<?php echo sprintf('%02d',$k+1)."\n".substr($list[$i]['num']);?>
</span>
<a id="modal_re_<?php echo $wr_id; ?>_<?php echo $k?>" data-bo_table="<?php echo $bo_table; ?>" data-wr_id="<?php echo $wr_id; ?>" data-mb_id="<?php echo $list[$i]['mb_id']; ?>" data-wr_name="<?php echo $list[$i]['wr_name']?>" data-wr_subject="<?php echo $list[$i]['wr_subject']?>" data-bra="<?php echo $list[$i]['wr_'.$o]?>" >
<?php echo (trim($ext25_00)!='')?date("m.d", strtotime($ext25_00)):''?> <?php echo (trim($list[$i]['wr_'.$m])!='')?date("m.d", strtotime($list[$i]['wr_'.$m])):''?> <?php echo $list[$i]["wr_{$o}"]?> </a>
<?php } ?>
수정된 부분
<?php echo $list[$i]['wr_'.$o]?>를 <?php echo $list[$i]["wr_{$o}"]?>이렇게 수정
!-->PHP 8에서 코드가 예상대로 동작하지 않는 문제를 겪고 계시는 것으로 보입니다. PHP 8에서는 여러 가지 변경 사항이 도입되었으며, 이 중 일부는 이전 버전의 코드와 호환되지 않을 수 있습니다. 귀하의 코드를 살펴보고 PHP 8에서 발생할 수 있는 몇 가지 문제점을 지적해 드리겠습니다.
-
문자열 접근 변경: PHP 8에서는 문자열에 대한 배열과 비슷한 접근 방식이 더 엄격해졌습니다. 예를 들어,
$list[$i]['wr_'.$o]
와 같은 동적 필드 이름 접근은 문제가 없어 보입니다. 하지만, 코드의 다른 부분에서 비슷한 접근 방식이 문제를 일으킬 수 있습니다. PHP 8 이전 버전에서는 경고 없이 허용되던 일부 접근 방식이 에러를 발생시킬 수 있습니다. -
substr()
함수의 사용:substr($list[$i]['num'])
에서substr()
함수가 예상대로 동작하지 않을 수 있습니다. 예를 들어,substr()
에 필요한 길이 인자가 누락되었습니다. PHP 7에서는 이것이 경고 없이 허용되었을 수 있지만, PHP 8에서는 경고나 에러를 발생시킬 수 있습니다. -
타입 체킹 강화: PHP 8은 타입 체킹이 강화되었습니다. 예를 들어, 함수 인자나 반환 값에 대한 타입이 엄격해졌습니다. 코드 내에서 이러한 변경 사항에 맞지 않는 부분이 있다면 문제가 발생할 수 있습니다.
-
에러 처리 변경: PHP 8은 에러 처리 방식이 변경되었습니다. 일부 경고가 이제
Error
예외로 처리됩니다. 이전에는 경고로 무시되었던 문제들이 이제 스크립트 실행을 중단시킬 수 있습니다.
해결책:
- 에러 로깅 활성화: 개발 환경에서
error_reporting(E_ALL)
과ini_set('display_errors', 1)
을 사용하여 모든 에러와 경고를 활성화하면 문제의 원인을 좀 더 쉽게 찾을 수 있습니다. - 코드 리뷰 및 테스트: PHP 8에 맞게 코드를 검토하고 필요한 경우 수정하세요. 동적 필드 이름 접근 방식(
$list[$i]['wr_'.$o]
)이 문제를 일으키지 않는지 확인하세요. - 공식 문서 참조: PHP 8의 변경 사항과 호환성 문제에 대한 공식 문서를 참조하여 코드를 업데이트하세요.
PHP 8로의 전환은 기존 코드에 상당한 수정을 필요로 할 수 있습니다. 코드의 다른 부분에서도 비슷한 문제가 발생할 수 있으므로, 전체적으로 코드를 검토하고 테스트하는 것이 좋습니다
감사합니다, 잘됩니다,
<?php echo sprintf('%02d',$k+1)."\n".substr($list[$i]['num']);?> 이건 빨간부분에 뭔가 문제가 있는가 했는데,,,
substr($list[$i]['num'], 3)이런식으로 안했다고 때려잡는거군요ㅡㅡ