curl.php 는 cURL-Transfer 사용에 도움되기 위한 기본 설명서입니다.

cURL-Transfer 에서 필요한 library 는 다음과 같습니다.

  1. curl.php
    원격으로 파일을 업로드하거나 다운로드 합니다.
  2. uploader.php
    로컬에 파일을 업로드하거나 다운로드 합니다.
  3. download.php
    로컬 파일을 다운로드 합니다.
  4. mime_types.php
    파일 Mime-Type 을 출력합니다.
  5. globals_filter.php
    _SERVER 전역 변수를 필터링합니다.

환경 설정

공통 상수

  • HABONYPHP_DIRNAME
    						
    cURL-Transfer 가 설치된 경로. 끝에 반드시 / 를 입력해 주세요.
    
    기본값: ./

사용 가능한 상수

  • X_PARAM_TOKEN
    						
    사용자 토큰
    
    기본 값: hash("sha512", $_SERVER['SERVER_NAME'] . 'habony php')

사용 가능한 목록.

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

  • set_curl( settings )

    cURL-Transfer 를 시작하기 전에 설정을 구성합니다.

    • settings: 배열.
      • url: 요청할 URL. 기본 값: localhost
      • port: 요청할 PORT. 기본 값: 80
      • connect: 연결 시도 최대 시간. 기본 값: 10 (초)
      • timeout: 대기 지연 시간. 기본 값: 30 (초)
      • upload_dir: 업로드 폴더. 기본 값: ./data
    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    $array = array(
    	'url' => 'http://example.com/upload',
    	'port' => 80,
    	'connect' => 10,
    	'timeout' => 30,
    	'upload_dir' => './data'
    );
    $c->set_curl( $array );
  • set_url( url, port, upload_dir )

    cURL URL 를 설정합니다.

    • url: 요청할 URL.
    • port: 요청할 PORT
    • upload_dir: 업로드 폴더

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    $c->set_url( 'http://example.com/upload', 80, './data' );
  • set_cookie( key, value )

    다른 서버로 전송할 쿠키를 설정합니다.
    ex.) $_COOKIE['key'] = value;

    • key: 전송할 쿠키 키의 이름.
    • value: 전송할 쿠키 키의 값.

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    $c->set_url( 'http://example.com/upload', 80, './data' );
    $c->set_cookie( 'name', 'habony' );
  • set_auth( user, pass )

    다른 서버에서 HTTP 인증을 요구할 경우 설정합니다.

    • user: 사용자 정보
    • pass: 사용자 비밀번호

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    $c->set_url('http://example.com/upload', 80, './data');
    $c->set_auth( 'habony', '123456' );
  • set_proxy( address, port, user, pass )

    cURL 프록시 설정이 필요한 경우 설정합니다.

    • address: ip 주소. 기본 값: 127.0.0.1
    • port: 요청할 PORT. 기본 값: 80
    • user: 사용자 정보. 선택 사항.
    • pass: 사용자 비밀번호. 선택 사항.

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    $c->set_url('http://example.com/upload', 80, './data');
    
    $c->set_proxy( '127.0.0.1', 80, 'habony', '123456' );
  • set_ssl( verify_peer, verify_host, ssl_version, capath_file, capath_path, certificate, certificate_password )

    cURL SSL 설정이 필요한 경우 설정합니다.

    • verify_peer: 모든 웹 서버의 인증서를 신뢰하지 않으므로 false 가 기본 설정입니다. 기본 값: false
    • verify_host: 0 - 3 중 하나.
      0 : 인증서 이름을 확인하지 않습니다.
      1 : 인증서 이름을 확인합니다.
      2 : 인증서 이름을 확인하고, 서버의 호스트 이름과 일치하는지 확인합니다.
    • ssl_version: SSL 버전 1 ~ 3 중 택.
    • capath_file:
    • capath_path:
    • certificate:
    • certificate_password:

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    $c->set_url('http://example.com/upload', 80, './data');
    
    $capath_file = '/vhosts/BuiltinObjectToken-EquifaxSecureCA.crt';
    $capath_path = '/usr/local/www/vhosts/example.com/httpdocs/cacert.pem';
    $certificate = '/etc/pki/tls/private/test.crt';
    $certificate_password = '123456789';
    
    $c->set_ssl( true, 2, 3, '123456', $capath_file, $capath_path, $certificate, $certificate_password );
  • set_timeout( timeout, connect_timeout )

    cURL 접속 시간을 설정합니다.

    • timeout: 대기 지연 시간.
    • connect_timeout: 연결 시도 최대 시간.

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    $c->set_url('http://example.com/upload', 80, './data');
    
    $c->set_timeout(30, 10);
  • set_header( key, value )

    cURL 해더의 배열을 설정합니다.

    • key: 헤더 키의 이름(또는 배열)의 목록.
    • value: 헤더 키의 값.

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    ex.1)
    $c = new curl();
    $c->set_header( 'name', 'habony' );
    
    
    ex.2)
    $c = new curl();
    $c->set_header(
    	array(
    		'name' => 'habony',
    		'age' => 15
    	)
    );
  • set_user_agent( user_agent )

    USER AGENT 를 설정합니다.

    • user_agent:

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    $c->set_url('http://example.com/upload', 80, './data');
    
    $c->set_user_agent( 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36' );
  • set_referer( referer )

    REFERER 를 설정합니다.

    • referer:

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    $c->set_url('http://example.com/upload', 80, './data');
    
    $c->set_referer( 'http://example.com/index.php?user=name' );
  • curl_post( url, data )

    cURL 로 POST 를 전송합니다.

    • url: 요청할 URL. http(또는 https) 의 전체 URL
    • data: POST 배열

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    $c->curl_post(
    	'http://example.com/upload',
    	array(
    		'name' => 'habony',
    		'age' => 15
    	)
    );
  • curl_download( filepath, filename, download, speed, sleep )

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

    • filepath: 실제 파일 경로
    • filename: 파일 이름. filepath 파일 이름으로 설정됩니다.
    • download: true or fale
      false : remote 에 저장합니다.
      true : 파일을 다운로드 합니다.
    • speed: 다운로드 전송 속도. 기본 값: 10
    • sleep: 다운로드 지연 시간. 1 이하로 설정하면 지연 시간이 무시됩니다.

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    
    // 다운로드 받은 파일을 저장할 폴더를 지정합니다.
    $c->set_curl(
    	array('upload_dir' => './data')
    );
    
    $c->curl_download( 'http://example.com/download/image.png', 'habonyphp.png', true, 100, 0 );
  • curl_get_browser( URL, POST )

    cURL 브라우저로 출력된 데이터를 remote 에 파일로 저장합니다.

    • URL: 요청할 URL
    • POST: 다운로드할 배열.
      #real_file;filename 형식으로 문자열 앞에 # 을 붙여 파일로 구분합니다.

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    
    // 다운로드 받은 파일을 저장할 폴더를 지정합니다.
    $c->set_curl(
    	array('upload_dir' => './data')
    );
    
    $c->curl_get_browser(
    	'http://example.com/download',
    	array(
    		// 다운로드 받을 파일은 '#real_file;filename' 형식.
    		'#2015-08-09.tmp;habony.zip',
    		'#2015-08-10.tmp;example.php',
    
    		// 폼 전송 구성
    		'name'=>'habony',
    		'zudy'=>'teg'
    	)
    );
  • curl_success_list( )

    업로드 성공한 파일 목록을 출력합니다.

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    $array = array( 'url' => 'http://example.com/upload', 'port' => 80 );
    $c->set_curl($array);
    $c->curl_post(
    	null,
    	array(
    		'name' => 'habony',
    		'age' => 15
    	)
    );
    print_r($c->curl_success_list());
  • curl_err_list()

    파일 업로드 중 에러가 발생한 목록을 출력합니다.

    							
    define("HABONYPHP_DIRNAME", "../../");
    require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
    require_once(HABONYPHP_DIRNAME . 'library/curl.php');
    
    $c = new curl();
    $array = array( 'url' => 'http://example.com/upload', 'port' => 80 );
    $c->set_curl($array);
    $c->curl_post(
    	null,
    	array(
    		'name' => 'habony',
    		'age' => 15
    	)
    );
    print_r($f->curl_err_list());


원격 파일 업로드

형식: curl_post( URL, POST );

Example #1

						
define("HABONYPHP_DIRNAME", "../../");
require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
require_once(HABONYPHP_DIRNAME . 'library/curl.php');

$c = new curl();

// 임시 폴더로 파일을 업로드합니다.
$c->upload_transfer( );

$c->curl_post(
	'http://example.com/upload',
	array(
		'name' => 'habony',
		'age' => 15
	)
);

/*
	# target server : http://example.com/upload


	require_once('../../library/uploader.php');
	
	$f = new file_transfer();

	// 파일을 저장할 폴더 경로를 설정합니다.
	$f->set_upload(
		array( 'upload_dir' => './data' )
	);

	$f->upload_transfer( );
	$f->upload_move_file();
*/

Example #2

인증을 통한 원격 파일 업로드

							
define("HABONYPHP_DIRNAME", "../../");
require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
require_once(HABONYPHP_DIRNAME . 'library/curl.php');

$c = new curl();

// 임시 폴더로 파일을 업로드합니다.
$c->upload_transfer( );

$c->curl_post(
	'http://example.com/upload',
	array(
		'username' => 'habony',
		'password' => 123456789a
	)
);

/*
	# target server : http://example.com/upload


	require_once('../../library/uploader.php');
	
	$f = new file_transfer();

	// 파일을 업로드 하기 전에 인증을 설정합니다.
	$user = 'habony';
	$pass = '123456';
	$f->set_upload_auth($user, $pass);


	// 설정된 사용자 아이디와 비밀번호가 _POST 값과 일치하는지 검증합니다.
	$upload_user_auth = array(
		'user' => $_POST['username'],
		'pass' => $_POST['password']
	);
	$f->upload_transfer( null, $upload_user_auth );
	$f->upload_move_file();

	$e = $f->upload_err_list();
	if(empty($e))
	{
		$e = null;
	}

	print_r($f->upload_json_encode($e));
*/

Example #3

전역 변수 토큰을 이용해 원격으로 파일을 업로드하는 방법입니다.

							
define("HABONYPHP_DIRNAME", "../../");
require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
require_once(HABONYPHP_DIRNAME . 'library/curl.php');

$c = new curl();

// 임시 폴더로 파일을 업로드합니다.
$c->upload_transfer( );

$c->curl_post(
	'http://example.com/upload'
);

/*
	# target server : http://example.com/upload


	require_once('../../library/uploader.php');
	
	$f = new file_transfer();

	// 파일을 업로드 하기 전에 인증을 설정합니다.
	$user = 'token';
	$pass = '123456789a';
	$f->set_upload_auth($user, $pass);


	// 설정된 사용자 아이디와 비밀번호가 _SERVER 값과 일치하는지 검증합니다.
	$upload_user_auth = array(
		'user' => 'token',
		'pass' => $_SERVER['HTTP_X_PARAM_TOKEN']
	);
	$f->upload_transfer( null, $upload_user_auth );
	$f->upload_move_file();

	$e = $f->upload_err_list();
	if(empty($e))
	{
		$e = null;
	}
	print_r($f->upload_json_encode($e));
*/


원격 파일 다운로드

형식: curl_download( filepath, filename, download, speed, sleep );

Example #1

						
define("HABONYPHP_DIRNAME", "../../");
require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
require_once(HABONYPHP_DIRNAME . 'library/curl.php');

$c = new curl();

// 다운로드 받은 파일을 저장할 폴더를 지정합니다.
$c->set_curl(
	array('upload_dir' => './data')
);

$c->curl_download( 'https://php.net/images/logos/php-med-trans.png', 'php_logo.png' );

Example #2

						
define("HABONYPHP_DIRNAME", "../../");
require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
require_once(HABONYPHP_DIRNAME . 'library/curl.php');

$c = new curl();

$c->curl_download( 'https://example.com/download/2015-04-05.zip', 'habony.zip', true );

원격 파일 브라우저 다운로드

형식: curl_get_browser( URL, POST );

Example #1

						
define("HABONYPHP_DIRNAME", "../../");
require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
require_once(HABONYPHP_DIRNAME . 'library/curl.php');

$c = new curl();

// 다운로드 받은 파일을 저장할 폴더를 지정합니다.
$c->set_curl(
	array('upload_dir'=>'./data')
);

$c->curl_get_browser(
	'http://example.com/download',
	array(
		// 다운로드 받을 파일은 '#real_file;filename' 형식.
		'#2015-08-09.tmp;habony.zip',
		'#2015-08-10.tmp;example.php',

		// 폼 요소 구성
		'name' => 'habony',
		'age' => 15
	)
);

/*
	# target server : http://example.com/download


	require_once('../../library/uploader.php');
	
	$f = new file_transfer();

	// 저장되어 있는 경로를 설정합니다.
	$f->set_upload(
		'upload_dir' => './data'
	);

	$f->file_browser( $_POST );
*/

원격 파일 삭제

형식: curl_post( URL, POST );

Example #1

						
define("HABONYPHP_DIRNAME", "../../");
require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
require_once(HABONYPHP_DIRNAME . 'library/curl.php');

$c = new curl();

$c->set_curl(
	array('upload_dir'=>'./data')
);

// .bmp 로 끝나는 모든 파일, habony.png 파일을 삭제합니다.
$c->curl_post(
	'http://example.com/download',
	array(
		'fname1' => 'habony.png'
		'fname2' => '*.bmp'
	)
);

/*
	# target server : http://example.com/download


	require_once('../../library/uploader.php');
	
	$f = new file_transfer();

	$f->set_upload(
		'upload_dir' => './data'
	);

	$f->upload_delete_file( array($_POST['fname1'], $_POST['fname2']) );
*/

Example #2

						
define("HABONYPHP_DIRNAME", "../../");
require_once(HABONYPHP_DIRNAME . 'library/uploader.php');
require_once(HABONYPHP_DIRNAME . 'library/curl.php');

$c = new curl();

$c->set_curl(
	array('upload_dir'=>'./data')
);

$c->curl_post(
	'http://example.com/download',
	array(
		'file' => 'habony.png',
		'name' => 'habony',
		'board' => 15,
		'subject' => '안녕하세요. 하보니입니다.',
		'mode' => 'write'
	)
);

/*
	# target server : http://example.com/download


	require_once('../../library/uploader.php');
	
	$f = new file_transfer();

	$f->set_upload(
		'upload_dir' => './data'
	);

	// 하나의 파일을 삭제합니다.
	$f->upload_delete_file( $_POST['file'] );

	print_r($_POST);
*/