안녕하세요. 린치핀소프트 한광희입니다.

 

우리가 워드프레스를 이용하며 업로드하는 파일들은 어느 위치에 저장될까요? 플러그인과 테마마다 상이할수 있지만 대부분 워드프레스 설치 디렉토리/wp-content/uploads 하위 디렉토리에 저장이 됩니다. 즉, 워드프레스 코어, 테마,플러그인 파일들이 아닌 이용자가 업로드한 파일들은 대부분 위의 디렉토리 하위에 저장된다고 보시면 됩니다. 워드프레스를 백업하거나 관리할때 그래서 이 디렉토리에 대해서 꼭 인지하고 있어야 합니다.

 

그러면 워드프레스 테마 ,플러그인을 개발할때 이렇게 이용자가 업로드한 파일은 uploads 디렉토리의 하위 디렉토리에 저장하게끔 하고 싶으면 어떻게 해야 할까요?

 

1.현재 워드프레스 시스템의 uploads 절대 경로를 파악해야 한다.

2.uploads 하위 디렉토리로 새로운 디렉토리를 생성한다.

3.생성한 디렉토리의 권한을 바꾸어 준다.

4.브라우저에서 디렉토리로 접근시 파일의 리스트가 보이지 않도록 ” index.php ” 파일을 생성한다.

5.이후 이용자가 업로드한 파일은 생성한 디렉토리에 저장되도록 소스코드를 수정한다.

 

위 5가지 순서대로 이용하여 테마나 플러그인에서 이용자가 업로드할 파일이 저장될 새로운 디렉토리를 생성할 수 있습니다. 오늘 소개하는 워드프레스 함수는 2가지입니다.

 

1.wp_upload_dir()

이 함수는 워드프레스에서 제공하는 함수로 uploads 디렉토리의 위치를 절대경로 , URL 경로가 담긴 배열(Array)를 반환해줍니다.

2.wp_mkdir_p()

이 함수는 워드프레스에서 제공하는 함수로 새로운 디렉토리를 생성하는 함수입니다.

 

function custom_upload_dir_linchpin(){

  $upload_dir = wp_upload_dir();
  $cusotm_dir = $upload_dir['basedir'] . '/' . 'upload_custom_attachment';
  if ( ! file_exists($cusotm_dir ) )
  {
    wp_mkdir_p($cusotm_dir);
    chmod($cusotm_dir , 0750);
  touch($cusotm_dir . '/index.php');
  }
}

위 소스코드는 wp-content/uploads/ 의 경로를 인식하고 upload_custom_attachment 라는 새로운 디렉토리를 하위 디렉토리로 생성하는 예제입니다.

wp_mkdir_p() 함수를 이용해 새 디렉토리르 생성합니다. PHP에서 제공하는 함수인 chmod를 이용하여 생성한 디렉토리의 접근권한을 알맞게 부여합니다.

(여기서 0750의 설정은 디렉토리 소유자에게는 모든 권한을, 디렉토리 소유자와 같은 그룹의 유저는 읽기 및 실행 권한을 부여합니다. 이외의 이용자에게는 접근권한을 주지 않습니다.)

여기까지 정상적으로 실행되었다면 디렉토리는 생성되었지만 웹 서버의 환경설정에 따라 해당 디렉토리를 브라우저로 진입하면 디렉토리내의 모든 파일이 리스트되어 보여질 수 있습니다.

그래서 PHP 의 touch 함수로 index.php 파일을 생성하여 브라우저에서 디렉토리로 접근하더라도 파일의 리스트가 보여지지 않고 빈 화면이 보여지도록 설정하였습니다.