개발/php

[php] Warning: Illegal string offset 'file' 오류수정

반응형

 

파일을 수정한 적도 없는데, 어느 날 갑자기 게시판 글 수정 페이지에서 파일 에러 문구가 떴다.

 

Warning: Illegal string offset 'file' in /web/home/xxx/html/skin/board/basic/write.skin.php on line 156
Warning: Illegal string offset 'source' in /web/home/xxx/html/skin/board/basic/write.skin.php on line 157 Warning: Illegal string offset 'size' in /web/home/mymoodae/html/skin/board/basic/write.skin.php on line 157

 

 

글 신규 등록시에는 뜨지 않는 에러인데, 첨부된 파일이 없는데도 위와 같은 에러 메세지가 떴다.

 

 

Warning: Illegal string offset ' '  in

이 에러는 변수를 string을 배열 형태로 사용해서 생기는 오류라고 한다. 즉, 배열 변수가 아닌데 배열처럼 사용해서 그렇다고 한다. 주로 php5.X 버전에서 나타나는 오류라고 한다.

 

 

[방법 1]  is_array() 를 통해 배열이 있는지 확인하기

if문에 is_array() 함수를 넣어 배열이 있는지 확인 후 값을 보여주면 된다.

 

Bad)

if($file[$i]['file']) {
  blah blah
}

 

Good)

if(is_array($file) && $file[$i]['file']) {
  blah blah
}

 

 

[방법2] isset() 를 통해 변수가 있는지 확인하기

isset () 은 변수가 설정되었는지 확인해주는 함수이다. 해당 변수가 있는지 확인 후, 변수가 있는 경우에만 값을 보여주도록 하면 경고문이 뜨지 않는다.

if(isset($file[$i]['file'])){
  blah blah
}

 

 

 

 

나의 경우에는 그누보드 기본 게시판 스킨에서 오류가 발생하였는데,

두번째 해결방법으로 isset()함수를 넣어주어 오류를 해결하였다.


<?php if($w == 'u' && $file[$i]['file']) { ?> => <?php if($w == 'u' && isset($file[$i]['file'])) { ?>

<?php for ($i=0; $is_file && $i<$file_count; $i++) { ?>
<tr>
    <th scope="row">파일 #<?php echo $i+1 ?></th>
    <td>
        <input type="file" name="bf_file[]" title="파일첨부 <?php echo $i+1 ?> : 용량 <?php echo $upload_max_filesize ?> 이하만 업로드 가능" class="frm_file frm_input">
        <?php if ($is_file_content) { ?>
        <input type="text" name="bf_content[]" value="<?php echo ($w == 'u') ? $file[$i]['bf_content'] : ''; ?>" title="파일 설명을 입력해주세요." class="frm_file frm_input" size="50">
        <?php } ?>
        <?php if($w == 'u' && isset($file[$i]['file'])) { ?>
        <input type="checkbox" id="bf_file_del<?php echo $i ?>" name="bf_file_del[<?php echo $i;  ?>]" value="1"> <label for="bf_file_del<?php echo $i ?>"><?php echo $file[$i]['source'].'('.$file[$i]['size'].')';  ?> 파일 삭제</label>
        <?php } ?>
    </td>
</tr>
<?php } ?>

 

 

 

반응형