Posted
Filed under 분류없음
Round-Robin
 리얼서버별로 순차적 선택
 
Least-connection
 최소의 Connection을 가진 리얼 서버를 선택
 
Weighted
 리얼 서버의 가중치를 기준, 연산하여 리얼 서버를 선택
 
Enhanced-weighted
 Weighted와 방식은 같으나, 연산 방식에서 보다 정밀 분배
 
Response-time
 Response-Time이 가장 빠른 리얼 서버 선택
 
Least-local-connection
 최소 Local Connection 리얼 서버 선택
 
Least-local-session
 최소 Local Session 리얼 서버 선택
 
Persistent Hash
 클라이언트 IP주소를 기준 해쉬 값을 생성하여 항상 동일 리얼 서버 선택
2013/10/08 16:11 2013/10/08 16:11
Posted
Filed under 프로그래밍
ab 를 테스트 하다가 too many open files 오류가 떨어졌다.

이거슨....

동시에 파일을 열수 있는 제한이 있는데
ulimit -a 명령으로 볼수 있다.
항목중 open files 가 그것인데 기본이 1024이다

ulimit -n 4096

으로 일시적으로 open files를 변경하여 하용할수 있다.

영구적으로 적용하려면

vi /etc/security/limits.conf

*               soft    nofile          65536
*               hard    nofile          65536
*               soft    nproc           16384
*               hard    nproc           16384

추가해 주고 재부팅 한다.
2013/10/08 15:57 2013/10/08 15:57
Posted
Filed under 프로그래밍/PHP

PHP 5.5에서부터는 Zend Opcache가 내장되어있다.
설정도 기본으로 사용이다.

이 판넬은 opcache의 상태를 보여준다.

https://gist.github.com/ck-on/4959032


간단하게 opcache 성능을 비교해봤는데

non opcache
- Requests per second:    98.23 [#/sec]

use opcache
- Requests per second:    190.80 [#/sec]

확실히 차이 난다.




사용자 삽입 이미지

2013/10/07 17:58 2013/10/07 17:58
Posted
Filed under 프로그래밍

Site Up Since Server Platform Programming Language

  • Google.com – Linux C, Java, C++, PHP & MySQL, Python for search
  • Facebook.com – Linux, PHP, MySQL and C++
  • YouTube.com – Linux, C, Java and MySQL
  • Yahoo.com – Linux, C++, C, Java, PHP & MySQL
  • MSN.com – Windows, ASP.net
  • Live.com Windows, ASP.net
  • stackoverflow.com Windows, ASP.net
  • MySpace.com Windows, ASP.net (one of few giants who converted their core technology, from ColdFusion to ASP.NET. I dont remember where was that post, but i remember that MySpace gain about 50% of server resources reduction with ASP.NET)
  • Wikipedia Linux, PHP & MySQL
  • Amazon.com – Linux, Solaris, C++, Java, J2EE
  • WordPress.com – Linux, PHP & MySQL
  • Twitter - JAVA,RUBY,Scala
  • Flickr - PHP
  • Amazon - C++, Perl and Java
  • eBay - Java,Python
2013/10/07 17:11 2013/10/07 17:11
Posted
Filed under 프로그래밍
msvcr71.dll 파일 없다고 나올때 이 파일 복사해 넣으면 된다.
어디로?

난 윈도우8이니까 c:\Windows\SysWOW64 에~

2013/09/26 10:11 2013/09/26 10:11
Posted
Filed under 프로그래밍/PHP
프로젝트도 거의 끝나가고 있다.

Slim은 사용방법이 너무 쉬워서 뭐라 설명할것이 없지만 한가지만 소개해본다.

Slim의 최대 강점은 손쉬운 Routing method 처리다


<?php
$app = new \Slim\Slim();
$app->get('/books/:id', function ($id) {
    //Show book identified by $id
});


여기서 $app->get, $app->post, $app->put, $app->delete 처럼 바꿔주는것만으로 method 지원이 해결된다.

동시에 여러가지 method를 지원하게 할수도 있다.

<?php
$app = new \Slim\Slim();
$app->map('/foo/bar', function() {
    echo "I respond to multiple HTTP methods!";
})->via('GET', 'POST');
$app->run();



물론 나만의 커스텀 method도 지원한다.

<?php
$app = new \Slim\Slim();
$app->map('/hello', function() {
    echo "Hello";
})->via('FOO');
$app->run();


2013/09/18 08:49 2013/09/18 08:49
Posted
Filed under 프로그래밍/PHP

요즘 API개발이 한창이다
많이들 사용하는 방식이 헤더에 Authorization 항목을 넣어서 인증하는 방법이다.

사용자는 해더에 아래와 같이 전송한다.

Authorization: Basic 인증코드

인증코드는 아이디와 패스워드를 :로 구분하여 base64로 인코딩후 넣는다.

Authorization: Basic bWl5dTpkbHN3bGR 이런식?

base64_encode("id:pass") 이렇게 인코딩하면 된다.

그럼 서버쪽에서는?

_SERVER["HTTP_AUTHORIZATION"] : Basic bWl5dTpkbHN3bGR
_SERVER["PHP_AUTH_USER"] : id  (자동으로 디코딩 된다)
_SERVER["PHP_AUTH_PW"] : pass (자동으로 디코딩 된다)

이렇게 사용할수 있다.

한차원 높은 보안을 원한다면
base64인코딩 하기전에 token을 사용하여 openssl으로 한번 감싸서 보내도록하자

특정키로 암호화 (AES-256)
base64_encode(openssl_encrypt("id:pass", "aes-256-cbc", $key, true, str_repeat(chr(0), 16)));

복호화 
openssl_decrypt(base64_decode("isZXs9diEm43k6uRBtJJRQ=="), "aes-256-cbc", $key, true, str_repeat(chr(0), 16));

2013/08/31 16:06 2013/08/31 16:06
Posted
Filed under 프로그래밍/PHP


원본 : http://blog.evendanan.net/2012/03/In-App-Purchase-Verification-using-PHP-OR-Making-sure-you-ain-t-getting-ripped-off-PHP-style


Google

function verify_market_in_app($signed_data, $signature, $public_key_base64) 
{
 $key = "-----BEGIN PUBLIC KEY-----\n".
  chunk_split($public_key_base64, 64,"\n").
  '-----END PUBLIC KEY-----';   
 //using PHP to create an RSA key
 $key = openssl_get_publickey($key);
 //$signature should be in binary format, but it comes as BASE64. 
 //So, I'll convert it.
 $signature = base64_decode($signature);   
 //using PHP's native support to verify the signature
 $result = openssl_verify(
   $signed_data,
   $signature,
   $key,
   OPENSSL_ALGO_SHA1);
 if (0 === $result) 
 {
  return false;
 }
 else if (1 !== $result)
 {
  return false;
 }
 else 
 {
  return true;
 }
} 




Apple
애플의 경우는 프로덕션에 한번 던지고 21007 코드가 나오면 샌드박스로 다시 던져야 한다.
function verify_app_store_in_app($receipt, $is_sandbox) 
{
 //$sandbox should be TRUE if you want to test against itunes sandbox servers
 if ($is_sandbox)
  $verify_host = "ssl://sandbox.itunes.apple.com";
 else
  $verify_host = "ssl://buy.itunes.apple.com";
 
 $json='{"receipt-data" : "'.$receipt.' }';
 //opening socket to itunes
 $fp = fsockopen ($verify_host, 443, $errno, $errstr, 30);
 if (!$fp) 
 {
  // HTTP ERROR
  return false;
 } 
 else
 { 
  //iTune's request url is /verifyReceipt     
  $header = "POST /verifyReceipt HTTP/1.0\r\n";
  $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
  $header .= "Content-Length: " . strlen($json) . "\r\n\r\n";
  fputs ($fp, $header . $json);
  $res = '';
  while (!feof($fp)) 
  {
   $step_res = fgets ($fp, 1024);
   $res = $res . $step_res;
  }
  fclose ($fp);
  //taking the JSON response
  $json_source = substr($res, stripos($res, "\r\n\r\n{") + 4);
  //decoding
  $app_store_response_map = json_decode($json_source);
  $app_store_response_status = $app_store_response_map->{'status'};
  if ($app_store_response_status == 0)//eithr OK or expired and needs to synch
  {
   //here are some fields from the json, btw.
   $json_receipt = $app_store_response_map->{'receipt'};
   $transaction_id = $json_receipt->{'transaction_id'};
   $original_transaction_id = $json_receipt->{'original_transaction_id'};
   $json_latest_receipt = $app_store_response_map->{'latest_receipt_info'};
   return true;
  }
  else
  {
   return false;
  }
 }
}





원본 : https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/RenewableSubscriptions/RenewableSubscriptions.html

Table 7-1  Status codes for auto-renewable subscriptions

Status Code

Description

21000

The App Store could not read the JSON object you provided.

21002

The data in the receipt-data property was malformed.

21003

The receipt could not be authenticated.

21004

The shared secret you provided does not match the shared secret on file for your account.

21005

The receipt server is not currently available.

21006

This receipt is valid but the subscription has expired. When this status code is returned to your server, the receipt data is also decoded and returned as part of the response.

21007

This receipt is a sandbox receipt, but it was sent to the production service for verification.

21008

This receipt is a production receipt, but it was sent to the sandbox service for verification.

표 7-1   자동 재생 구독에 대한 상태 코드

상태 코드

기술

21000

앱 스토어가 제공 한 JSON 객체를 읽을 수 없습니다.

21002

수신 데이터 속성의 데이터 형식이 잘못되었습니다.

21003

영수증 인증 할 수 없습니다.

21004

당신이 제공하는 공유 비밀은 귀하의 계정에 대한 파일의 공유 비밀과 일치하지 않습니다.

21005

수신 서버는 현재 사용할 수 없습니다.

21006

이 영수증은 유효하지만 구독이 만료되었습니다. 이 상태 코드는 서버에 반환 될 때, 수신 데이터는 디코딩과 응답의 일부로 반환됩니다.

21007

이 영수증은 샌드 박스 영수증이지만 확인을 위해 생산 서비스로 전송되었습니다.

21008

이 영수증은 제품 수령이지만 확인을 위해 샌드 박스 서비스로 전송되었습니다.



2013/08/29 11:38 2013/08/29 11:38