CI 묻고 답하기

제목 CI3 서버 이관 후 upload 라이브러리로 파일 업로드 및 에디터 사진 업로드 오류
카테고리 CI 2, 3
글쓴이 도토리 작성시각 2021/01/25 11:32:42
댓글 : 6 추천 : 0 스크랩 : 1 조회수 : 9170   RSS

회사에서 사용중인 웹호스팅 서버에서 php school의 가상서버호스팅으로 소스를 이관 후 기존 웹호스팅에서 정상 작동하던 파일 업로드기능이 작동하지 않습니다.

1. 두 서버의 환경

웹호스팅 환경 서버호스팅 환경

 

apache 2.0

php 5.5.30

mysql 5.5.47

ubuntu 18.04.1

apache 2.4.29

php 5.6.40

mysql 5.7.32

 

2. 문제 현상

  1) Ci의 upload 라이브러리로 파일 업로드 시 파일 값 없음

    아래는 테스트 용도로 간단히 찍어본 코드입니다.

    --- 파일 업로드 HTML ---

<form method="post" enctype="multipart/form-data" action="/">
    <input type="file" name="file" value="">
    <input type="submit" value="submit">
</form>

    --- 파일 처리 PHP ---

$config['upload_path'] = './uploads/';
$config['allowed_types'] = '*';
$config['overwrite'] = TRUE;
$config['max_size'] = 30720;
$config['encrypt_name'] = TRUE;

$this->load->library('upload', $config);
$this->upload->initialize($config);

// $this->upload->do_upload('file_input'); // 20210125 12:21 수정
$this->upload->do_upload('file');

// 업로드 파일 정보
$file = $this->upload->data();

var_dump($_FILES);
var_dump($file);

    --- 결과 ---

array ( // $_FILES 내용
  'file' => 
  array (
    'name' => 'dog.jpg',
    'type' => 'image/jpeg',
    'tmp_name' => '/tmp/phpc4Uc3y',
    'error' => 0,
    'size' => 208100,
  ),
)
array ( // $file 내용(upload 라이브러리를 통한 파일 내용)
  'file_name' => '',
  'file_type' => '',
  'file_path' => './uploads/',
  'full_path' => './uploads/',
  'raw_name' => false,
  'orig_name' => '',
  'client_name' => '',
  'file_ext' => '',
  'file_size' => NULL,
  'is_image' => false,
  'image_width' => NULL,
  'image_height' => NULL,
  'image_type' => '',
  'image_size_str' => '',
)

 

    결과 내용을 보면, $_FILES에는 정상적으로 파일값이 전달되었음을 확인할 수 있는데,

    upload 라이브러리로는 파일이 전달되지 않습니다.

 

  2) 네이버스마트에디터(smarteditor2)에서 사진 업로드 사용 시 업로드용 새 창에서 사진 목록까지는 표시되는데, 이후 확인 버튼 클릭 시 반응 없음(서버에 파일 업로드 되지 않음)

    : 에디터의 경우 CI와 관계가 없긴 하지만, 현재 CI의 파일 업로드도 안 되는 상황이라 혹시 비슷한 원인 때문이 아닐까 하여 함께 글을 작성합니다.

  

 

3. 시도

 1) 파일 용량 설정 : php.ini의 upload_max_filesize, post_max_size 값을 각각 2M에서 20M로 변경

 2) 권한 : 관련된 모든 디렉토리의 권한을 확인해봤지만 모두 644로 적용되어 있음

 

 

아무리 인터넷을 검색해봐도 원하는 답을 얻지 못했고, 어디서 무엇을 어떻게 건드려야 할지 막막해서 이렇게 글을 작성합니다.

 다음글 sess_time_to_update 관련 질문 드립니다... (6)
 이전글 파일 업로드 클래스를 통해서 동영상 업로드 (5)

댓글

변종원(웅파) / 2021/01/25 12:11:09 / 추천 0

$this->upload->do_upload('file_input'); 선언된 파일명이랑 html의 파일명이랑 다릅니다.

 

도토리 / 2021/01/25 12:24:26 / 추천 0

변종원(웅파)

그렇네요! 위 코드는 제가 테스트를 위해 임시로 작성하면서, 잘못 작성한 것이 맞고, 위 내용 수정했습니다!

다만 위 내용대로 수정해도 증상 해결은 여전히 되지 않네요...ㅠ

도토리 / 2021/01/25 12:58:57 / 추천 0

** 자답 겸 문의 **

이것 저것 건드려보다가 혹시나 해서 권한 설정을 다시 건드려봤는데요!

해당 디렉토리의 other의 쓰기 권한을 허용하니 업로드가 되네요!(라이브러리, 에디터 모두 해당되네요...ㅠ)

그런데, other의 쓰기 권한을 허용하는게 맞는 걸까요?

당장 서비스는 되니, 허용하겠지만, 한 번도 other에 읽기 권한 말고 다른 권한을 허용한 적이 없어 걱정되네요...ㅠ

변종원(웅파) / 2021/01/25 13:01:14 / 추천 0
웹서버는 나도 아니고 그룹도 아니기 때문에 other가 맞습니다
도토리 / 2021/01/25 13:02:51 / 추천 0

변종원(웅파)

친절하게 계속 답변 해주셔서 감사합니다!^^

황소 / 2021/08/20 14:50:52 / 추천 0

저도 찾아보다가 찾았네요.

리눅스 Apache php-fpm 을 사용할 경우에 설정을 해줘야 한다네요.

/etc/selinux/config  파일의 

SELINUX=enforcing ==> SELINUX=permissive 로 변경 저장 후에

setenforce  0 

해주니까 됩니다.