동영상을 스트리밍 할 수 있는 방법론은 다양하다.
구글을 검색하고 정리하고 다시 찾고 시도하고 해왔지만 결론은 동영상을 HLS로 인코딩하고 그 파일을 AWS의 S3에 업로드하여 cloud front에 배포되고 Javascript를 이용해서 사용자의 웹브라우져에서 스트리밍 하는 것이다.

이제부터 설명하는 플랫폼들의 UI와 기능은 2020년 12월 10일 기준으로 작성되어 차후 버전이 업데이트들 되면 다르게 작업해야할 수 있다는 점 주의해야 한다.
자세한 설명은 생략하고 실제 진행 과정만 작성한다.
- AWS S3 : 파일 저장 공간이다.
- AWS CloudFront : CDN 이다.
- HLS : 스트리밍용 영상 파일이다. 애플이 만들었음.
- video.js : 애플기기 외에 플레이 안되는 기기들이 있어서 이 비디오 플레이어 프레임워크를 써야한다.

1. S3 구성하기 하고 영상 업로드 하기

  • 버킷 이름 입력, 모든 퍼블릭 액세스 차단 해제 (공개용 영상으로 할 예정이다) 하고 하단의 '버킷 만들기' 클릭

  • 버킷 목록에서 생성한 버킷으로 들어가서 '업로드'를 클릭한다.

  • 파일들을 선택하고 모든 사람 객체 '읽기'에 체크한다.
    (HLS 영상은 .ts 파일과 인덱스 파일인 .m3u 파일로 존재하며 이 부분 AWS에서 인코딩하거나 여러 인코더들로 변환하면 된다.
    다음 장에서 aws trans coder를 이용해서 변환하는 방법을 기술할 예정이다.)

  • 업로드 성공하면 위와 같은 모습으로 나오며 종료를 누른다.

2. CloudFront 구성하고 배포 설정하기

  • Web 의 'Get Started' 버튼을 누른다.
  • RTMP 는 2021년부터 배포를 지원하지 않는다. 그리고 HLS는 Web 방식이다.

  • Origin Domain Name : 셀렉트 박스이며 아까 S3에서 만든 버킷을 선택하면 된다.
  • Restrict Bucket Access : yes 선택
  • Origin Access Identity : Create a New Identity 선택
    (Restrict Bucket Access - yes 선택하면 보임)
  • Comment : 자동 입력된 값 그냥 두면 됨
    (Restrict Bucket Access - yes 선택하면 보임)
  • Grant Read Permissions on Bucket : Yes, Update Bucket Policy 선택
  • Cache and origin request settings : Use legacy cache settings 선택
  • Cache Based on Selected Request Headers : Whitelist 선택
    (Cache and origin request settings - Use legacy cache settings 선택하면 보임)
  • Whitelist Headers 왼쪽 박스에서
    'Access-Control-Request-Headers,
    Access-Control-Request-Method,
    Origin'
    을 선택하고 'Add >>' 를 눌러 우측 박스로 이동 시킨다.
  • 그 외에는 기본값으로 두고 맨 밑에 'Create Distribution' 을 누른다.

  • 정상적으로 생성되었다.
  • 다시 왼쪽의 메뉴의 'Distributions'을 눌러 이동하자

  • 이제 CDN으로 배포될 준비가 되었다.
  • Domain Name이라고 있는 곳의 주소를 기억했다가 나중에 영상 주소 넣을 때 사용한다. (ex, d2aqi1xc06ycq4.cloudfront.net)
  • 스크롤을 우측으로 더 밀어보자.

  • 아까 생성한 S3의 영상 파일들을 배포하고 있는 중이다.
  • 완료되면 'In Progress'가 'Deployed'라고 바뀐다.

3. 영상 재생 웹페이지 생성

이제 HLS 재생을 시킬 웹페이지를 만들 차례인데 다음과 같이 우선 정리한다.

<!doctype html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport"

content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>lab.naminsik.com</title>

<link href="https://vjs.zencdn.net/7.10.2/video-js.css" rel="stylesheet" />

<style>

body{

margin: 0;

padding: 0;

}

#video{

width: 100%;

height: 100vh;

}

</style>

</head>

<body>

<video id=video width=100% class="video-js" controls>

<source src="https://d2aqi1xc06ycq4.cloudfront.net/파일명.m3u8" type="application/x-mpegURL">

</video>

<script src="https://vjs.zencdn.net/7.8.2/video.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.15.0/videojs-contrib-hls.min.js"></script>

<script>

var player = videojs('video');

// player.play();

</script>

</body>

</html>

  • html을 위 처럼 작성한다.
  • source src에만 아까 만든 cloudFront 페이지의 도메인 네임 + 파일명을 조합해서 영상 파일의 인덱스 파일인 m3u8을 수정해서 넣으면 된다.

우선 사파리로 해당 파일을 열어본다.

  • 정상적으로 재생되는 것을 확인 할 수 있다.

하지만 크롬에서는 재생이 되지 않고 아래처럼 console 에서 오류 로그를 확인할 수 있다.

  • S3와 cloudFront에 CORS 셋팅이 안되어 있어서 그렇다.

4. CORS 설정하기

  • S3로 돌아가서 만든 버킷으로 들어가서 '권한'탭을 선택 후 밑에 'CORS(Cross-origin 리소스 공유)' 를 찾아 '편집' 버튼을 누른다.

  • 텍스트 입력란에 아래 코드를 복붙한 뒤 '변경 사항 저장'을 누른다.

[

{

"AllowedHeaders": [

"*"

],

"AllowedMethods": [

"PUT",

"POST",

"GET"

],

"AllowedOrigins": [

"*"

],

"ExposeHeaders": [],

"MaxAgeSeconds": 3000

}

]

  • 그리고 다시 돌아온 버킷의 '권한'탭에서 '버킷 정책'을 보면 위 진행 과정 중에 Discribution 만들 때 " Comment : 자동 입력된 값 그냥 두면 됨 " 라고 했었기 때문에 자동으로 입력된 값이 보일 것이다.

  • 버킷 정책값이 없거나 바뀌었다고 생각하면 다시 수정하면 된다.
  • 일단 수정 과정을 진행해본다.

  • cloudFront 의 Origin access identity 로 이동한다.
    (https://console.aws.amazon.com/cloudfront/home?region=ap-northeast-2#oai:)
  • 아까 Discribution 만들 때 " Comment : 자동 입력된 값 그냥 두면 됨 " 라고 한 곳에 들어있던 자동 입력 Comment 값이 목록에 보일 것이다.
  • 그 Comment 의 Amazon S3 Canonical User ID 값을 복사한다.
  • 다시 S3 의 버킷으로 돌아가서 '권한'탭의 '버킷 정책'을 '편집'을 눌러 아래 내용으로 수정한다.

{

"Version": "2008-10-17",

"Id": "PolicyForCloudFrontPrivateContent",

"Statement": [

{

"Sid": "1",

"Effect": "Allow",

"Principal": {

"CanonicalUser": "바로 위에서 복사한 Amazon S3 Canonical User ID"

},

"Action": "s3:GetObject",

"Resource": "arn:aws:s3:::testuploadvod/*"

}

]

}

  • '변경 사항 저장'을 누르면 "CanonicalUser" 의 키와 값이 저장되고 나면 "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E16TH420ZUON0B" 이런 식으로 변경되어 반영되어 진다.

이제 cloudFront의 Distributions 으로 이동한다.

  • 체크 박스를 선택하고 'Distribution Settings' 를 누르거나 바로 Distribusion의 ID를 클릭해서 해당 Distribution 상세 페이지로 이동한다.

  • 상단의 'Behaviors' 탭을 클릭하고 체크박스로 선택 후 'Edit'를 눌러 수정 페이지로 진입한다.

  • Allowed HTTP Methods : GET, HEAD, OPTIONS
  • Cached HTTP Methods : GET, HEAD (Cached by default) OPTIONS 에 체크
  • 다 완료하였으면 우측 하단에 있는 'Yes, Edit' 을 눌러 완료한다.

  • 수정이 완료되면 다시 배포를 시작한다.
  • 배포가 완료되면 Status에 'In Progress'가 'Deployed'라고 바뀐다.

  • 다시 크롬에서 확인해보면 정상적으로 재생되는 것을 확인 할 수 있다.

 

출처 : lab.naminsik.com/3960

Posted by 꼬장e
,

<Files *>
order deny,allow
deny from all
Allow from 아이피
</Files>

Posted by 꼬장e
,

$_SERVER['REMOTE_ADDR']

 

function get_client_ip()
{
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
        $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

 

출처 : gocoder.tistory.com/664

Posted by 꼬장e
,

apache 에서 특정 ip 접속 제어를 하기위해 httpd.conf 또는 httpd-vhosts.conf 수정

<VirtualHost *:80>

    ServerName xxx.xxx.xxx.xxx  ##자신의 IP주소

    <Location>

        Order deny, allow

        Deny from all

    </Location>

</VirtualHost>

Posted by 꼬장e
,

CMD실행

 

setx GOOGLE_API_KEY "no"
setx GOOGLE_DEFAULT_CLIENT_ID "no"
setx GOOGLE_DEFAULT_CLIENT_SECRET "no"

 

입력

Posted by 꼬장e
,

for( var b in window )
  if( window.hasOwnProperty(b)) console.log(b);

 

이러면 끝~

Posted by 꼬장e
,

var e = document.getElementById( id );


for(var cnt = 0 ; cmt < e.options.length; cnt++ )
{
  if( '원하는값' == e.options[cnt].value)
    e.options[cnt].selected = 1;
}

Posted by 꼬장e
,

[php] CURL 사용법

WEB 2018. 10. 25. 11:32

출처 : http://ogogago.kr/bbs/board.php?bo_table=tiptech_etc&wr_id=2192

cURL (Client URL Library Functions)

  • 제작자 Daniel Stenberg 의 설명을 그대로 변역하면
    curl is a comand line tool for transferring files with URL syntax
    커맨드라인에서 URL 문법을 사용하여 파일을 전송 프로그램
  • 내가 원하는 주소의 페이지에서 내가 임의의 값을 넣고 그 넣은 값으로 페이지에서 리턴되는 값을 받아오는 역할을 한다.
  • PHP에서 cURL을 사용하려는 사람들 대부분이 아마도 HTTPS 접속 때문일 것이다.
    소켓 또는 그 외 여러가지 접속방법이 있는데 굳이 cURL을 사용하는 건 속도면에서도 빠르고 HTTPS도 쉽게 접속할 수 있기 때문이다.
  • cURL 모듈을 서버에 설치해야 합니다.(리눅스 - curl.so, 윈도우 - php_curl.dll 확장모듈 필요)

 

cURL로 가능한 일

  • HTTPS certificates
  • HTTP POST
  • HTTP PUT
  • FTP upload
  • HTTP Form
  • cookie
  • authentication

 

cURL, Client URL Library Functions

  1. curl_init : 세션 초기화, 핸들값 리턴
  2. curl_setopt : 옵션 세팅
  3. curl_exec : curl을 실행
  4. curl_errno : 에러번호를 가져온다.
  5. curl_error : 에러 메시지를 가져온다.
  6. curl_getinfo : 상태 정보를 리턴한다.
  7. curl_close : curl 세션을 닫는다

 

[예제1 : POST방식으로 데이터 전송(simple)]

<?
$post_data = array(
"name" => "홍길동",
"birthday" => "1980-08-20"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, http://www.example.com);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_exec($ch);
?>

 

[예제2: POST방식으로 데이터 전송(function)]

<?
function fetch_page($url,$param,$cookies,$referer_url){
if(strlen(trim($referer_url)) == 0) $referer_url= $url;
$curlsession = curl_init ();
curl_setopt ($curlsession, CURLOPT_URL, \"$url\");
curl_setopt ($curlsession, CURLOPT_POST, 1);
curl_setopt ($curlsession, CURLOPT_POSTFIELDS, \"$param\");
curl_setopt ($curlsession, CURLOPT_POSTFIELDSIZE, 0);
curl_setopt ($curlsession, CURLOPT_TIMEOUT, 60);
if($cookies && $cookies!=\"\"){
curl_setopt ($curlsession, CURLOPT_COOKIE, \"$cookies\");
}
curl_setopt ($curlsession, CURLOPT_HEADER, 1); //헤더값을 가져오기위해 사용합니다. 쿠키를 가져오려고요.
curl_setopt ($curlsession, CURLOPT_USERAGENT, \"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\");
curl_setopt ($curlsession, CURLOPT_REFERER, \"$referer_url\");
ob_start();
$res = curl_exec ($curlsession);
$buffer = ob_get_contents();
ob_end_clean();
if (!$buffer) {
$returnVal = \"Curl Fetch Error : \".curl_error($curlsession);
}else{
$returnVal = $buffer;
}
curl_close($curlsession);
return $returnVal;
}
?>

 

[예제3 : 파일 전송]

<?
$post_data['data[0]'] = "@image/img_01.jpg";
$post_data['data[0]'] = "@image/img_02.jpg";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, http://www.example.com/upload.php);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$postResult = curl_exec($ch);
?>

[예제4 : https 접속]

<?
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,"https://www.test.com"); //접속할 URL 주소
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 인증서 체크같은데 true 시 안되는 경우가 많다.
// default 값이 true 이기때문에 이부분을 조심 (https 접속시에 필요)
curl_setopt ($ch, CURLOPT_SSLVERSION,3); // SSL 버젼 (https 접속시에 필요)
curl_setopt ($ch, CURLOPT_HEADER, 0); // 헤더 출력 여부
curl_setopt ($ch, CURLOPT_POST, 1); // Post Get 접속 여부
curl_setopt ($ch, CURLOPT_POSTFIELDS, "var1=str1&var2=str2"); // Post 값 Get 방식처럼적는다.
curl_setopt ($ch, CURLOPT_TIMEOUT, 30); // TimeOut 값
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // 결과값을 받을것인지
$result = curl_exec ($ch);
curl_close ($ch);
echo $result;
?>

 

[예제5 : curl을 이용한 Gmail 로그인]

$src = "https://".$gmailId.":".$gmailPw."@mail.google.com/mail/feed/atom";
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, 'My Agent Name');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$res = curl_exec($ch);
curl_close($ch);
/** 결과는 Atom xml 형식이다. DOM 또는 xml 파싱 function을 이용해서 파싱하면 됩니다. **/
echo $res;
?>

 

[예제6 : cURL을 이용한 웹페이지 가져오기]

<?php
function get_content($url) {
$agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)';
$curlsession = curl_init ();
curl_setopt ($curlsession, CURLOPT_URL, $url);
curl_setopt ($curlsession, CURLOPT_HEADER, 0);
curl_setopt ($curlsession, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curlsession, CURLOPT_POST, 0);
curl_setopt ($curlsession, CURLOPT_USERAGENT, $agent);
curl_setopt ($curlsession, CURLOPT_REFERER, "");
curl_setopt ($curlsession, CURLOPT_TIMEOUT, 3);
$buffer = curl_exec ($curlsession);
$cinfo = curl_getinfo($curlsession);
curl_close($curlsession);
if ($cinfo['http_code'] != 200)
{
return "";
}
return $buffer;
}
?>

 
curl_close
  • 기능 : cURL 세션을 닫는다.
  • 구문 : curl_close(resource ch)
  • cURL 세션을 닫고, 리소스를 비워준다. 또한 cURL 핸들은 삭제된다.
 
  • 기능 : 마지막 에러 번호를 리턴해 준다.
  • 구문 : curl_errno(resource ch)
  • 만일 연산 후 어떠한 에러도 발행하지 않았다면 0(zero)을 리턴한다.

 

Error Code

There exists a bunch of different error codes and their corresponding error messages that may appear during bad conditions. At the time of this writing, the exit codes are:

  • 1 - Unsupported protocol. This build of curl has no support for this protocol.

  • 2 - Failed to initialize.

  • 3 - URL malformat. The syntax was not correct.
    잘못된 형식의 도메인

  • 5 - Couldn't resolve proxy. The given proxy host could not be resolved.

  • 6 - Couldn't resolve host. The given remote host was not resolved.
    해당 도메인을 못찾는다는 뜻
    네임서버가 제대로 등록되어 있는지 확인하고 도메인도 정확한지 확인할 것.

  • 7 - Failed to connect to host.

  • 8 - FTP weird server reply. The server sent data curl couldn't parse.

  • 9 - FTP access denied. The server denied login or denied access to the particular resource or directory you wanted to reach. Most often you tried to change to a directory that doesn't exist on the server.

  • 11 - FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request.

  • 13 - FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request.

  • 14 - FTP weird 227 format. Curl couldn't parse the 227-line the server sent.

  • 15 - FTP can't get host. Couldn't resolve the host IP we got in the 227-line.

  • 17 - FTP couldn't set binary. Couldn't change transfer method to binary.

  • 18 - Partial file. Only a part of the file was transferred.

  • 19 - FTP couldn't download/access the given file, the RETR (or similar) command failed.

  • 21 - FTP quote error. A quote command returned error from the server.

  • 22 - HTTP page not retrieved. The requested url was not found or returned another error with the HTTP error code being 400 or above. This return code only appears if -f/--fail is used.

  • 23 - Write error. Curl couldn't write data to a local filesystem or similar.

  • 25 - FTP couldn't STOR file. The server denied the STOR operation, used for FTP uploading.

  • 26 - Read error. Various reading problems.

  • 27 - Out of memory. A memory allocation request failed.

  • 28 - Operation timeout. The specified time-out period was reached according to the conditions.

  • 30 - FTP PORT failed. The PORT command failed. Not all FTP servers support the PORT command, try doing a transfer using PASV instead!

  • 31 - FTP couldn't use REST. The REST command failed. This command is used for resumed FTP transfers.

  • 33 - HTTP range error. The range "command" didn't work.

  • 34 - HTTP post error. Internal post-request generation error.

  • 35 - SSL connect error. The SSL handshaking failed.

  • 36 - FTP bad download resume. Couldn't continue an earlier aborted download.

  • 37 - FILE couldn't read file. Failed to open the file. Permissions?

  • 38 - LDAP cannot bind. LDAP bind operation failed.

  • 39 - LDAP search failed.

  • 41 - Function not found. A required LDAP function was not found.

  • 42 - Aborted by callback. An application told curl to abort the operation.

  • 43 - Internal error. A function was called with a bad parameter.

  • 45 - Interface error. A specified outgoing interface could not be used.

  • 47 - Too many redirects. When following redirects, curl hit the maximum amount.

  • 48 - Unknown TELNET option specified.

  • 49 - Malformed telnet option.

  • 51 - The peer's SSL certificate or SSH MD5 fingerprint was not ok
    에러 메시지) SSL: certificate subject name 'www.test.co.kr' does not match target host name 'test.co.kr'
    해결1) 인증서 발급받은 주소로 호출하거나
    해결2) 설정으로 제어

    $soapClient->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0);

  • 52 - The server didn't reply anything, which here is considered an error.

  • 53 - SSL crypto engine not found

  • 54 - Cannot set SSL crypto engine as default

  • 55 - Failed sending network data

  • 56 - Failure in receiving network data

  • 58 - Problem with the local certificate

  • 59 - Couldn't use specified SSL cipher

  • 60 - Peer certificate cannot be authenticated with known CA certificates
    인증서 신뢰 검증에 실패한 경우다. (통합인증서, 번들과 관련 있는 듯)
    에러 메시지) SSL certificate problem, verify that the CA cert is OK. Details:
    error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
    해결) 신뢰 검증을 하지 않도록 설정.
    상호 서버가 신뢰된다면 굳이 신뢰성을 검증하지 않아도 된다.

    $soapClient->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0);

  • 61 - Unrecognized transfer encoding

  • 62 - Invalid LDAP URL

  • 63 - Maximum file size exceeded

  • 64 - Requested FTP SSL level failed

  • 65 - Sending the data requires a rewind that failed

  • 66 - Failed to initialise SSL Engine

  • 67 - User, password or similar was not accepted and curl failed to login

  • 68 - File not found on TFTP server

  • 69 - Permission problem on TFTP server

  • 70 - Out of disk space on TFTP server

  • 71 - Illegal TFTP operation

  • 72 - Unknown TFTP transfer ID

  • 73 - File already exists (TFTP)

  • 74 - No such user (TFTP)

  • 75 - Character conversion failed

  • 76 - Character conversion functions required

  • 77 - Problem with reading the SSL CA cert (path? access rights?)

  • 78 - The resource referenced in the URL does not exist

  • 79 - An unspecified error occurred during the SSH session

  • 80 - Failed to shut down the SSL connection

  • XX - There will appear more error codes here in future releases. The existing ones are meant to never change

 

curl_error

  • 기능 : 그 현재의 세션에 대한 마지막 에러 메시지를 되돌려 준다.
  • 구문 : curl_error(resource ch)
  • 만일 cURL 연산 후 에러를 발생하면 에러메시지를 되돌려 주며, 에러가 발생하지 않으면 빈문자열을 되돌려 준다.

 

 

curl_init

  • 기능 : 세션을 초기화하고 curl_setopt(), curl_exec() 그리고 curl_close 함수들과 함께 사용하기 위해 CURL 핸들값을 리턴해준다.
  • 구문 : resource curl_init([string $url])
  • 옵션 Url 매개변수가 포함되어 있다면 CURLOPT_URL 옵션은 매개변수의 값을 셋팅할 것이다.
    curl_setopt()를 이용하여 셋팅할 수 있다.
  • 리턴 : 핸들값 or False
  • 예제 : 새로운 curl세션을 초기화하고 웹페이지를 페칭한다.
    < ?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);
    ?>

 

curl_exec

  • 기능 : 세션을 싱행한다.
  • 구문 : curl_exec(resource ch)
  • 이 함수는 cURL 세션을 초기화하고 세션의 옵션들을 셋팅한 후에 불려져야만 한다.
    본 함수의 목적은 단순히 미리 정의된 cURL 세션을 실행하기 위한 것이기 때문이다.

 

 

curl_getinfo

  • 기능 : 특정 전송에 대한 정보를 받는다.
  • 구문 : crul_getinfo(resource ch [, int opt])

 

 

 

curl_setopt

CURLOPT_FOLLOWLOCATION

TRUE to follow any "Location: " header that the server sends as part of the HTTP header (note this is recursive, PHP will follow as many "Location: " headers that it is sent, unless CURLOPT_MAXREDIRS is set).
FOLLOWLOCATION 옵션 설정. 위치 헤더가 존재하면 따라간다.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, tru

 

CURLOPT_HEADER

TRUE to include the header in the output.
헤더 정보를 받기 원한다면 이 옵션을 추가한다.
VALUE : 1 OR true
curl_setopt($ch, CURLOPT_HEADER, false);

 

CURLOPT_NOBODY
TRUE to exclude the body from the output.
본문의 정보를 받기 원하지 않는다면 이 옵션을 추가한다.


CURLOPT_POST
TRUE to do a regular HTTP POST. This POST is the normal application/x-www-form-urlencoded kind, most commonly used by HTML forms.
전송 메소드를 설정한다.
VALUE : 1-POST, 0-GET
curl_setopt($ch, CURLOPT_POST,1);


CURLOPT_RETURNTRANSFER
TRUE to return the transfer as a string of the return value of curl_exec() instead of outputting it out directly.
REQUEST 에 대한 결과값을 받을 건지 체크
(WRITERUNCTION 콜백을 사용하는 대신, curl_exec 함수을 위한 반환 값으로 원격지 내용을 받는다.)
#Resource ID 형태로 넘어옴 :: 내장 함수 curl_errno 로 체크
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);


CURLOPT_SSL_VERIFYPEER
FALSE to stop cURL from verifying the peer's certificate. Alternate certificates to verify against can be specified with the CURLOPT_CAINFO option or a certificate directory can be specified with the CURLOPT_CAPATH option. CURLOPT_SSL_VERIFYHOST may also need to be TRUE or FALSE if CURLOPT_SSL_VERIFYPEER is disabled (it defaults to 2).
인증서 체크같은데 true 시 안되는 경우가 많다.
default 값이 true 이기때문에 이 부분을 조심 (https 접속시에 필요)
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);


CURLOPT_PORT
An alternative port number to connect to.


CURLOPT_SSLVERSION
The SSL version (2 or 3) to use. By default PHP will try to determine this itself, although in some cases this must be set manually.
SSL 버젼 (https 접속시에 필요)
curl_setopt ($ch, CURLOPT_SSLVERSION,3);

 

CURLOPT_TIMEOUT
The maximum number of seconds to allow cURL functions to execute.
REQUEST 에 대한 결과값을 받는 시간타임 설정한다.
curl_setopt($ch, CURLOPT_TIMEOUT,100);


CURLOPT_POSTFIELDS
The full data to post in a HTTP "POST" operation. To post a file, prepend a filename with @ and use the full path.
POST 메소드라면 파라미터 값들을 이 옵션에 정의하면 된다.
curl_setopt($cu, CURLOPT_POSTFIELDS,$vars); // 보낼 데이타 형식은 GET 방식으로 설정
ex) $vars = "arg=$arg1&arg2=$arg2&arg3=$arg3";


CURLOPT_REFERER
The contents of the "Referer: " header to be used in a HTTP request.
리퍼러 정보를 설정


CURLOPT_URL
The URL to fetch. This can also be set when initializing a session with curl_init().
접속할 url정보를 설정
curl_init()에서 url를 설정하면 별도 설정이 필요없다.
curl_setopt($ch, CURLOPT_URL, 'http://www.exsample.com');


CURLOPT_USERAGENT
The contents of the "User-Agent: " header to be used in a HTTP request.
에이전트 정보를 설정
curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
 

Posted by 꼬장e
,

thems/base/ui.datepicker.css 수정

 

.ui-datepicker  에 z-index 추가 혹은 수정

Posted by 꼬장e
,

[PHP] 날짜 함수

WEB 2018. 6. 29. 06:10

date("Y-m-d H:i:s")

현재 날짜/시간을 포맷(fotmat)에 맞게 date형식으로 출력 (24시간 형식 출력)

결과 : 2013-06-13 12:00:00 


date("Ymd") 현재 날짜/시간이 출력됨

결과 : 20070801


date("Y-m-d h:i:s");

현재 날짜/시간을 포맷(fotmat)에 맞게 date형식으로 출력합니다.

(12시간 형식 출력)


date("h:i:s");

현재 시간 출력


date("Y-m-d H:i:s",time());

현재 두번째 매개변수을 timestamp형식으로 읽어 날짜/시간을 포맷(fotmat)에 맞게 date형식으로 출력


date("Y-m-d",strtotime ("-1 months"));

현재의 날짜인 time형식에서 strtotime에 의해 한달을 뺀 time을 date형식으로 변환


date("Y-m-d",strtotime ("+1 days"));

현재의 날짜인 time형식에서 strtotime에 의해 하루를 더한 time을 date형식으로 변환


date("Y-m-d",strtotime ("+1 years"));

현재의 날짜인 time형식에서 strtotime에 의해 1년을 더한 time을 date형식으로 변환


date("Y-m-d",strtotime ("+24 hours"));

현재의 날짜인 time형식에서 strtotime에 의해 24시간을 더한 time을 date형식으로 변환


date("Y-m-d",strtotime ("+1500 minutes"));

현재의 날짜인 time형식에서 strtotime에 의해 1500분을 더한 time을 date형식으로 변환


date("Y-m-d",strtotime ("+1 week"));

현재의 날짜인 time형식에서 strtotime에 의해 1주일을 더한 time을 date형식으로 변환


date("Ymd",strtotime ("-1 days", strtotime('20070819')));

date("Ymd",strtotime ("-1 days", strtotime('2007-08-19')));

20070819의 날짜를 timestamp형식으로 변환후 1일을 빼고 다시 timestamp형식으로 변환후

Ymd 형식의 문자열로 출력


※ 날짜 형식은 -을 넣거나 빼야 한다. 다른 특수문자는 안됨(2007:08:12)

date("Ymd",strtotime ("+1 days",  strtotime('20070819')));

date("Ymd",strtotime ("+1 days",  strtotime('2007-08-19')));

20070819의 날짜를 timestamp형식으로 변환후 1일을 더한후 다시 timestamp형식으로 변환후

Ymd 형식의 문자열로 출력


※ date 함수의 2번째 인자는 timestamp 형입니다.


※ strtotime 함수의 2번째 인자는 timestamp 형입니다.


date( "Y-m-d\TH:i:s", strtotime('20070101040404') );

정상적으로 처리안됨


date( "Y-m-d\TH:i:s", strtotime('2007-01-01 04:04:04') );

정상적으로 처리됨(제트센스 rss에서 사용)


$timestamp=strtotime('+1 years +1 months +1 days');

현재 날짜/시간에 years months days hours minutes seconds 단위로 더하여

timestamp형식으로 리턴합니다.(매개변수 없이 사용불가)


출처: http://jhrun.tistory.com/137

Posted by 꼬장e
,