컨트롤러 파일 내용이다.
public function uploads() {
$config['upload_path'] = './example/';
$config['allowed_types'] = 'gif|jpg|png|jpeg|mp4|avi|mov';
$config['max_size'] = 512000;
$this->load->library('upload', $config);
$제목 = $this->input->post('제목');
$내용 = $this->input->post('내용');
$upload_success = $this->upload->do_upload('userfile');
$file_data = $this->upload->data();
$file_path = $upload_success ? 'uploads/' . $file_data['file_name'] : '';
if (!$title) {
$error = array('error' => '제목은 필수입니다.');
$this->load->view('write_view', $error);
} elseif (empty($content) && empty($file_path)) {
$error = array('error' => '내용 또는 첨부 파일 중 하나는 필수입니다.');
$this->load->view('view', $error);
} else {
$data = array(
'title' => $title,
'content' => $content,
'file_path' => $file_path
);
$this->post_model->create_post($data);
redirect('your_post');
}
}
첨부파일을 올리면 /var/www/html/example에 업로드 후 db 저장, 파일 타입과 최대용량 설정해 줬고 코드이그나이터에서 업로드할 때 upload 라이브러리 쓴다고 한다.
포스트 방식으로 클라이언트에서 서버로 제목과 내용을 보내주고 userfile는 코드이그나이터에서쓰는 입력 요소를 받는 필드 그리고 조건문을 써 내용 첨부파일 둘 중 하나는 입력을 받도록 함
배열로 받아서 모델로 전송 모델에서 db에 입력하고 db에서 뷰로 출력하면 첨부파일 업로드가 된다.
그리고 영상의 경우 크기가 큼으로 php.ini에서 upload_max_filesize, post_max_size 용량 수정해 줬다.
수정해 주고
첨부파일 업로드 오류가 계속 나서 하루가 날아갔다.
이걸 해줬다.
sudo systemctl restart php-fpm
쉬운 걸 하루 종일 했다.
오류 해결 과정은
config 파일에서
$config['log_threshold'] = 4;로 해놓고 로그 기록해 보았다.
/var/www/html/application/logs 여기 안에 기록된다.
The uploaded file exceeds the maximum allowed size in your PHP configuration file. 이런 문구가 떴다.
분명 수정했고 아파치 재시작했는데 계속 나왔다.
그래서 브라우저에서 확인해 보았다.
https://docs.aws.amazon.com/ko_kr/linux/al2023/ug/ec2-lamp-amazon-linux-2023.html 공식 문서에도 있다.
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
http://my.example.com/phpinfo.php 여기 들어가면 브라우저에서 php 설정을 볼 수 있다.
근데 웹 브라우저(클라이언트)와 서버와 설정이 달랐다.
이것저것해 보다가 php-fpm 재시작을 해야 한다는 것을 깨달았다.
sudo systemctl restart php-fpm
재시작해야 클라이언트에도 적용이 된다.
뿌듯했다.
첨부파일 기능을 포기해도 되는 상황에서 이것저것 해보았던 이유는
트위터 api 사용할 때도 잘 안되었고 그누보드에서 페이지마다 메타태그 생성할 때도 안되었지만
되었을 때 다음 프로젝트 자신감이 다르다.