ftp.php 는 FTP 사용에 도움되기 위한 기본 설명서입니다.

    주요 특징

  • 원격 파일 업로드 및 다운로드
  • 원격 파일 수정
  • 원격 이미지 미리 보기
  • Zip 압축 파일 생성 및 수정, 삭제
  • Zip 압축 다운로드
 

ftp 에서 필요한 library 는 다음과 같습니다.

  1. ftp.php
    FTP 를 제어합니다.
  2. zip.php
    Zip 을 제어합니다.
  3. charset.php
    charset 목록을 얻거나 변경합니다.
  4. uploader.php
    로컬에 파일을 업로드하거나 다운로드 합니다.
  5. download.php
    로컬 파일을 다운로드 합니다.
  6. mime_types.php
    파일 Mime-Type 을 출력합니다.
  7. globals_filter.php
    _SERVER 전역 변수를 필터링합니다.

사용 가능한 목록.

ftp 클래스에서 사용할 수 있는 메소드 목록을 설명합니다.

  • ftp( inputhost, inputuser, inputpass, inputport, time, inputpasv, inputssl )

    ftp 사용 전에 초기화합니다.

    • inputhost: FTP 서버 주소. 기본 값 localhost
    • inputuser: FTP 사용자 이름. 기본 값 anonymous
    • inputpass: FTP 비밀번호. 기본 값 admin@habonyphp.com
    • inputport: FTP 포트 번호. 기본 값 21
    • time: FTP 연결 시간 제한. 기본 값 90(초)
    • inputpasv: 수돔 모드 설정. 설정 필요시 'y' 입력. 기본 값 false
    • inputssl: SSL 접속시 필요. SSL 접속 시 'y' 입력. 기본 값 false
    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
  • ftp_rawlist( list )

    FTP 파일(또는 폴더) 목록 배열

    • list: 파일(또는 폴더) 정보 배열
    • 반환 값:
      
      Array(
        att => 권한 문자, ex.) drwxrwxrwx, -rw-r--r--
        perms => 권한 숫자. ex.) 707, 777, 644
        mdtm => 파일 업데이트 시간 타임스탬프, ex.) 1444431798, date("Y-m-d", 1444431798)
        num => 파일 번호,
        user => 소유자, ex.) 12229, paspot
        group => 그룹, ex.) 500, paspot
        size => 파일 크기, ex.) 4 KB, 124 B
        date => 파일 생성 날짜, ex.) Jul 27 2013
        name => 파일 이름,
        dir => 디렉터리이면 true 아니면 null,
        link	=> 링크이면 true 아니면 null,
        target => 링크이면 대상 주소. ex.) /usr/local/apache/domlogs/paspot
      );

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    $pwd = $ftp->ftp_pwd();
    $list = $ftp->ftp_list($pwd);
    $nlist = $ftp->ftp_rawlist($list));
    $ftp->ftp_close();
    
    print_r($nlist);
  • ftp_perms( item )

    FTP 파일 권한 문자를 숫자로 변경합니다.

    • item: 문자열

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    		
    print_r($ftp->ftp_perms('lrwxrwxrwx'));
    // 결과: 777
  • ftp_mcopy( local, remote )

    FTP 파일(또는 폴더) 를 재귀적으로 복사합니다.

    • local: 파일(또는 폴더) 문자열.
    • remote: 복사할 폴더 경로.

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    		
    // 복사할 파일(또는 폴더) 배열
    $local = array('main', 'temp', 'test.php', 'index.php');
    foreach($local as $w)
    {
    	$ftp->ftp_mcopy($w, './user');
    }
    $ftp->ftp_close();
  • ftp_copy( local, remote )

    FTP 파일를 복사합니다.

    • local: 복사할 파일.
    • remote: 복사할 폴더 경로.

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    		
    // 복사할 파일 배열
    $local = array('main.php', 'temp.php', 'test.php', 'index.php');
    foreach($local as $w)
    {
    	$ftp->ftp_copy($w, './user');
    }
    $ftp->ftp_close();
  • ftp_zip_compress( zip, local )

    FTP 원격 파일(또는 폴더) 를 재귀적으로 압축하여 파일을 만듭니다.

    • zip: zip 객체
    • local: 압축할 파일(또는 폴더) 문자열

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    $zip = new zip();
    $zip->zip_open(($zip_file = tempnam(sys_get_temp_dir(), 'zip')), true);
    
    // Zip 압축할 파일(또는 폴더) 배열
    $local = array('main', 'temp', 'test.php', 'index.php');
    foreach($local as $w)
    {
    	$ftp->ftp_zip_compress($zip, $w);
    }
    $zip->zip_close();
    $ftp->ftp_close();
    
    @copy($zip_file, './username/habony.zip');
  • ftp_permission( dir, mode, lower )

    FTP 파일(또는 폴더) 를 재귀적으로 권한을 변경합니다.

    • dir: 권한 설정할 파일(또는 폴더).
    • mode: 권한. ex.) 777, 757, 644
    • lower: a, f, d 중 하나.
      a 는 폴더, 파일 변경.
      f 는 파일만 변경.
      d 는 폴더만 변경.

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    // 권한 변경할 파일(또는 폴더) 배열
    $local = array('main', 'temp', 'test.php', 'index.php');
    foreach($local as $w)
    {
    	$ftp->ftp_permission($w, '777', 'a');
    }
    $ftp->ftp_close();
  • ftp_rmdir( dir )

    FTP 파일(또는 폴더) 를 재귀적으로 삭제합니다.

    • dir: 삭제할 파일(또는 폴더).

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    // 삭제할 파일(또는 폴더) 배열
    $local = array('main', 'temp', 'test.php', 'index.php');
    foreach($local as $w)
    {
    	$ftp->ftp_rmdir($w);
    }
    $ftp->ftp_close();
  • ftp_delete( file )

    FTP 파일(또는 폴더) 를 삭제합니다.

    • file: 삭제할 파일(또는 폴더).
      빈 폴더와 파일만 삭제합니다.

    									
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    // 삭제할 파일(또는 폴더) 배열
    $local = array('main', 'temp', 'test.php', 'index.php');
    foreach($local as $w)
    {
    	$ftp->ftp_delete($w);
    }
    $ftp->ftp_close();
  • ftp_new_file( original, content, reverse )

    새로운 파일을 만듭니다.

    • original: 파일 이름
    • content: 파일 내용
    • reverse: true or false.
      true 이면 UTF-8 문자열을 주어진 Charset 으로 저장.

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    $dir = 'public_html/test.php';
    $contents = 'Hello Habony';
    
    // 파일 내용을 UTF-8 에서 EUC-KR 로 저장합니다.
    $ftp->ftp_change_multibyte('EUC-KR');
    $ftp->ftp_new_file($dir, $contents, true);
    $ftp->ftp_close();
  • ftp_get_file( get )

    파일의 내용을 가져 옵니다.

    • get: 가져 올 파일 이름.

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    $get = 'public_html/test.php';
    if($fpath = $ftp->ftp_get_file($get))
    {
    	// 파일 내용을 EUC-KR 에서 UTF-8 로 가져 옵니다.
    	$ftp->ftp_change_multibyte('EUC-KR');
    	$buf = $ftp->ftp_multibyte(file_get_contents($fpath));
    	@unlink($fpath);
    
    	$contents = str_replace(array('<', '>', '"', '\''), array('<', '>', '"', '''), $buf);
    }
    $ftp->ftp_close();
    
    print_r($contents);
  • ftp_rename( original, new )

    파일의 이름을 변경합니다.

    • original: 대상 파일(또는 폴더).
    • new: Parse 새로운 이름을 입력합니다.

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    // test.php 파일을 test.php.bak 파일로 변경합니다.
    $original = array('test.php', 'index.php');
    $new = array('test.php.bak', 'index.php.bak');
    
    $i = 0;
    foreach($original as $w)
    {
    	$ftp->ftp_rename($w, $new[$i]);
    	$i++;
    }
    $ftp->ftp_close();
  • ftp_mdtm( name )

    지정된 파일의 마지막 수정 시간을 반환합니다.

    • name: 파일(또는 폴더) 이름

  • ftp_chdir( dir )

    현재 디렉터리를 다른 디렉터리로 변경합니다.

    • dir: 변경할 디렉터리 이름.

  • ftp_cdup()

    현재 디렉터리에서 상위 디렉터리로 이동합니다.

  • ftp_systype()

    시스템 유형을 반환합니다. ex.) UNIX

  • ftp_exec( command )

    FTP 서버에서 명령의 실행 요청합니다.

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    $command = 'ls -al >test.txt';
    $ftp->ftp_exec($command);
    $ftp->ftp_close();
  • ftp_mkdir( dir )

    만들 디렉터리 이름

    • dir: 만들 디렉터리 이름.

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    // public_html 에 test 폴더를 만듬니다.
    $ftp->ftp_mkdir('public_html/test');
    $ftp->ftp_close();
  • ftp_get( local, remote )

    원격 파일을 로컬로 다운로드 합니다.

    • local: 로컬 파일 이름.
    • remote: 원격 파일 이름.

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    // 원격 public_html/test.php 파일을 test.php 로 다운로드 합니다.
    $ftp->ftp_get('test.php', 'public_html/test.php');
    $ftp->ftp_close();
  • ftp_put( remote, local )

    로컬 파일을 원격으로 업로드 합니다.

    • remote: 원격 파일 이름.
    • local: 로컬 파일 이름.

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    // 로컬 test.php 파일을 public_html/test.php 로 업로드 합니다.
    $ftp->ftp_put('public_html/test.php', 'test.php');
    $ftp->ftp_close();
  • ftp_fput( destination, resource )

    열려 있는 파일을 원격으로 업로드 합니다.

    • destination: 원격 파일 이름.
    • resource: 열려 있는 파일 포인터.

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    $fp = fopen('test.php', 'r');
    $ftp->ftp_fput('public_html/test.php', $fp);
    fclose($fp);
    $ftp->ftp_close();
  • ftp_chmod( file, mode )

    파일의 이름을 변경합니다.

    • file: 대상 파일 이름.
    • mode: 권한 숫자. ex.) 777

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    $ftp->ftp_chmod('public_html/test.php', '777');
    $ftp->ftp_close();
  • ftp_mode( uploadedtype )

    파일의 ASCII 나 BINARY 를 설정.
    파일의 업로드, 다운로드의 속성을 설정합니다.

    • uploadedtype: true or false
      true 이면 ASCII 로 전송합니다.

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    // test.php 파일을 ASCII 로 업로드 합니다.
    $ftp->ftp_mode( true ); 
    $ftp->ftp_put('public_html/test.php', 'test.php');
    $ftp->ftp_close();
  • ftp_multibyte( str, to )

    파일의 이름을 변경합니다.

    • str: 변경할 문자열.
    • to: true or null. 기본 값 UTF-8
      true 이면 UTF-8 을 주어진 Charset 으로 변경합니다.

    							
    ex.1) EUC-KR 문자열을 UTF-8 로 변환합니다.
    $ftp->ftp_change_multibyte('EUC-KR');
    $ftp->ftp_multibyte('Hello Habony');
    
    ex.2) UTF-8 문자열을 EUC-KR 로 변환합니다.
    $ftp->ftp_change_multibyte('EUC-KR');
    $ftp->ftp_multibyte('Hello Habony', true);
    $ftp->ftp_close();
  • ftp_download( ndir )

    원격 파일을 다운로드합니다.

    • ndir: 다운로드할 파일 이름.

    							
    $ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
    
    $ftp->ftp_download('public_html/test.php');

반환되는 에러 목록

FTP 제어에서 에러가 발생하면 $this->ftp_err 에 저장될 에러 목록을 설명합니다.

  • FTP SSL 연결에 실패하였을 때 출력되는 에러입니다.
    					
    array(
    	'code' => 100,
    	'name' => "호스트 이름",
    	'message' => "FTP SSL connection has failed."
    );
  • FTP 연결에 실패하였을 때 출력하는 에러입니다.
    					
    array(
    	'code' => 101,
    	'name' => "호스트 이름",
    	'message' => "FTP connection has failed."
    );
  • FTP 로그인에 실패하였을 때 출력하는 에러입니다.
    					
    array(
    	'code' => 102,
    	'name' => "사용자 이름, 비밀 번호",
    	'message' => "Failed to login to the FTP server."
    );
  • Passive Mode 접속에 실패하였을 때 출력되는 에러입니다.
    					
    array(
    	'code' => 103,
    	'name' => "호스트 이름",
    	'message' => "An error has occurred in Passive Mode."
    );
  • 파일(또는 디렉토리) 이름에 문제있는 문자를 포함하고 있을 때 출력되는 에러입니다.
    					
    array(
    	'code' => 104,
    	'name' => "파일 이름",
    	'message' => "There is a problem with the file or path that character."
    );
  • 파일 다운로드 중 오류가 발생하였을 때 출력되는 에러입니다.
    					
    array(
    	'code' => 105,
    	'name' => "파일 이름",
    	'message' => "File Not Found."
    );

FTP 디렉터리의 목록 출력

형식: ftp_rawlist( list );

Example #1

						
<?php
define("HABONYPHP_DIRNAME", "../");

include ( HABONYPHP_DIRNAME . 'library/ftp.php' );
include ( HABONYPHP_DIRNAME . 'library/globals_filter.php' );
include ( HABONYPHP_DIRNAME . 'library/charset.php' );
include ( HABONYPHP_DIRNAME . 'library/uploader.php' );
include ( HABONYPHP_DIRNAME . 'library/zip.php' );

$ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');

$pwd = $ftp->ftp_pwd();
$list = $ftp->ftp_list($pwd);
$nlist = $ftp->ftp_rawlist($list));
$ftp->ftp_close();

print_r($nlist);

?>

FTP 파일(또는 폴더)를 재귀적으로 복사

형식: ftp_mcopy( local, remote );

Example #1

						
<?php

define("HABONYPHP_DIRNAME", "../");

include ( HABONYPHP_DIRNAME . 'library/ftp.php' );
include ( HABONYPHP_DIRNAME . 'library/globals_filter.php' );
include ( HABONYPHP_DIRNAME . 'library/charset.php' );
include ( HABONYPHP_DIRNAME . 'library/uploader.php' );
include ( HABONYPHP_DIRNAME . 'library/zip.php' );

$ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');
		
// 복사할 파일(또는 폴더) 배열
$local = array('main', 'temp', 'test.php', 'index.php');
foreach($local as $w)
{
	$ftp->ftp_mcopy($w, './user');
}
$ftp->ftp_close();

?>

FTP 파일(또는 폴더) 를 재귀적으로 압축하여 파일 만들기

형식: ftp_zip_compress( zip, local );

Example #1

						
<?php

define("HABONYPHP_DIRNAME", "../");

include ( HABONYPHP_DIRNAME . 'library/ftp.php' );
include ( HABONYPHP_DIRNAME . 'library/globals_filter.php' );
include ( HABONYPHP_DIRNAME . 'library/charset.php' );
include ( HABONYPHP_DIRNAME . 'library/uploader.php' );
include ( HABONYPHP_DIRNAME . 'library/zip.php' );

$ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');

$zip = new zip();
$zip->zip_open(($zip_file = tempnam(sys_get_temp_dir(), 'zip')), true);

// Zip 압축할 파일(또는 폴더) 배열
$local = array('main', 'temp', 'test.php', 'index.php');
foreach($local as $w)
{
	$ftp->ftp_zip_compress($zip, $w);
}
$zip->zip_close();
$ftp->ftp_close();

@copy($zip_file, './username/habony.zip');

?>

FTP 파일(또는 폴더) 를 재귀적으로 권한 변경하기

형식: ftp_permission( dir, mode, lower );

Example #1

						
<?php

define("HABONYPHP_DIRNAME", "../");

include ( HABONYPHP_DIRNAME . 'library/ftp.php' );
include ( HABONYPHP_DIRNAME . 'library/globals_filter.php' );
include ( HABONYPHP_DIRNAME . 'library/charset.php' );
include ( HABONYPHP_DIRNAME . 'library/uploader.php' );
include ( HABONYPHP_DIRNAME . 'library/zip.php' );

$ftp = new ftp('localhost', 'username', 'password', 'port', 'timeout', 'passive', 'ssl connect');

// 권한 변경할 파일(또는 폴더) 배열
$local = array('main', 'temp', 'test.php', 'index.php');
foreach($local as $w)
{
	$ftp->ftp_permission($w, '777', 'a');
}
$ftp->ftp_close();

?>