FTP 클래스
CodeIgniter의 FTP 클래스를 이용하면 원격서버에 파일을 전송할 수 있습니다. 원격지 파일들을 이동하거나, 이름변경 혹은 삭제도 가능하구요 . FTP 클래스는 미러링(mirroring) 함수도 제공합니다. 미러링 함수는 FTP를 이용하여 로컬 폴더의 복사본을 원격지에 만듦니다.
주의: SFTP 와 SSL FTP 은 지원하지 않습니다. 표준FTP만 지원 합니다.
클래스 초기화 Initializing the Class
CodeIgniter에서 제공하는 다른 클래스들과 같이 , FTP 클래스도 컨트롤러에서 $this->load->library 함수를 이용하여 초기화 합니다:
$this->load->library('ftp');
한번 로드되면 , FTP객체는 $this->ftp 와 같이 사용합니다.
사용예제 Usage Examples
본 예제에서는 FTP 연결을 열고 로컬파일을 읽은다음 ASCII 모드로 업로드 합니다. 이때 파일 퍼미션은 755로 설정합니다.
$this->load->library('ftp');
$config['hostname'] = 'ftp.example.com';
$config['username'] = 'your-username';
$config['password'] = 'your-password';
$config['debug'] = TRUE;
$this->ftp->connect($config);
$this->ftp->upload('/local/path/to/myfile.html', '/public_html/myfile.html', 'ascii', 0775);
$this->ftp->close();
본 예제에서는 서버에서 파일목록을 추출해 냅니다.
$this->load->library('ftp');
$config['hostname'] = 'ftp.example.com';
$config['username'] = 'your-username';
$config['password'] = 'your-password';
$config['debug'] = TRUE;
$this->ftp->connect($config);
$list = $this->ftp->list_files('/public_html/');
print_r($list);
$this->ftp->close();
본 예제에서는 로컬 디렉토리를 서버에 미러링(똑같이 생성)합니다.
$this->load->library('ftp');
$config['hostname'] = 'ftp.example.com';
$config['username'] = 'your-username';
$config['password'] = 'your-password';
$config['debug'] = TRUE;
$this->ftp->connect($config);
$this->ftp->mirror('/path/to/myfolder/', '/public_html/myfolder/');
$this->ftp->close();
함수 레퍼런스 Function Reference
$this->ftp->connect()
FTP에 연결하여 로그온합니다. 연결정보는 배열로 함수에 전달하거나, 설정파일에 저장할 수 있습니다.
아래 예제는 연결정보를 직접 설정하는법을 보여줍니다:
$this->load->library('ftp');
$config['hostname'] = 'ftp.example.com';
$config['username'] = 'your-username';
$config['password'] = 'your-password';
$config['port'] = 21;
$config['passive'] = FALSE;
$config['debug'] = TRUE;
$this->ftp->connect($config);
FTP 연결정보를 설정파일에 저장하기 Setting FTP Preferences in a Config File
ftp.php파일을 만든후 $config 배열을 그 파일안에 추가합니다. 그 다음에 config/ftp.php 로 저장하면 자동으로 설정을 읽어오게 됩니다.
사용가능한 연결 옵션:
- hostname - FTP 호스트 이름. 일반적으로 ftp.example.com 등과 같습니다.
- username - 사용자 명.
- password - 암호.
- port - 접속포트. 21 이 기본값 입니다.
- debug - TRUE/FALSE (불린). 에러메세지를 표시하기 위해 디버깅을 활성화 시킬지 안시킬지 설정.
- passive - TRUE/FALSE (불린). 패시브모드(passive mode)로 할것인지 여부설정. 기본값은 패시브모드 활성상태 입니다.
$this->ftp->upload()
파일을 서버에 업로드 합니다. 이때 반드시 로컬경로와 서버경로를 넘겨주어야합니다. 필요하다면 모드 및 퍼미션을 설정할수도 있습니다. 예 :
$this->ftp->upload('/local/path/to/myfile.html', '/public_html/myfile.html', 'ascii', 0775);
모드옵션은 : ascii, binary, 그리고 auto (기본값). 만약 auto 로 설정되어있다면 업로드할 파일의 확장자를 기준으로 모드를 설정합니다.
퍼미션 설정은 8진수를 이용하여 4번째 파라미터로 설정하면 됩니다.
$this->ftp->download()
서버에서 파일을 다운로드합니다. 원격 및 로컬 경로를 지정해야합니다. 옵션으로 모드를 지정할 수도 있습니다. 예 :
$this->ftp->download('/public_html/myfile.html', '/local/path/to/myfile.html', 'ascii');
옵션으로 지정할 수 있는 모드: ascii, binary, auto (기본값). auto 는 소스파일의 확장자를 통해 모드를 자동설정합니다.
다운로드에 실패한 경우 FALSE를 반환합니다. (로컬 파일에 쓰기 권한이없는 경우 포함)
$this->ftp->rename()
파일이름을 바꿉니다. 원래 파일경로 및 새로운파일 경로를 파라미터로 넘겨야 합니다.
// Renames green.html to blue.html
$this->ftp->rename('/public_html/foo/green.html', '/public_html/foo/blue.html');
$this->ftp->move()
파일을 이동합니다. 소스(source)와 목적지경로(destination)를 넘겨줍니다.:
// Moves blog.html from "joe" to "fred"
$this->ftp->move('/public_html/joe/blog.html', '/public_html/fred/blog.html');
참고: 만약 목적지 경로에서 넘겨지는 파일이름이 소스와 다르다면 파일명 변경도 같이 이루어 집니다.
$this->ftp->delete_file()
파일을 삭제합니다. 지울 파일의 경로를 넘겨줍니다.
$this->ftp->delete_file('/public_html/joe/blog.html');
$this->ftp->delete_dir()
디렉토리를 지웁니다. 이때 디렉토리가 포함하고있는 모든것을 같이 지웁니다. 지울 디렉토리를 넘겨줍니다. 이때 마지막에 / 를 붙여야합니다.
중요 : 이함수를 사용하실때는 매우 주의하셔야 합니다. 디렉토리를 삭제할때 하위디렉토리까지 모두 재귀적으로 삭제합니다.그러므로 넘겨주는 경로가 잘못된 경로가 아닌지 확실하게 확인해야 합니다.list_files() 함수를 통해서 경로가 옳은지 먼저 확인하시는것이 좋습니다.
$this->ftp->delete_dir('/public_html/path/to/folder/');
$this->ftp->list_files()
서버에서 파일목록을 추출하여 배열로 리턴합니다. 원하는 디렉토리의 경로를 넘겨줍니다.
$list = $this->ftp->list_files('/public_html/');
print_r($list);
$this->ftp->mirror()
로컬 폴더의 포함내용 전부를 재귀적으로 읽은후 서버에 동일한 폴더를 생성합니다. 어떤 디렉토리 구조라도 서버에서 다시 생성됩니다. 파라미터로 소스경로와 목적지 경로를 넘겨줍니다:
$this->ftp->mirror('/path/to/myfolder/', '/public_html/myfolder/');
$this->ftp->mkdir()
서버에 디렉토리를 생성합니다 . 생성하고자하는 폴더의 경로를 넘겨줍니다. 이때 마지막에 / 를 붙여줍니다.퍼미션은 8진수를 사용할수도 있으며 두번째 파라미터로 넘겨줍니다
// Creates a folder named "bar"
$this->ftp->mkdir('/public_html/foo/bar/', DIR_WRITE_MODE);
$this->ftp->chmod()
파일 퍼미션을 설정합니다. 퍼미션을 적용하고자하는 파일이나 폴더경로를 넘겨줍니다:
// Chmod "bar" to 777
$this->ftp->chmod('/public_html/foo/bar/', DIR_WRITE_MODE);
$this->ftp->close();
연결을 끊습니다. 업로드가 끝났을때 이 함수를 사용하는것이 좋습니다.