2016년 7월 28일 목요일

아파치 mod_rewrite 서브도메인 자동 생성시 document_root 고정 해결

Apache mode_rewrite를 활요한 서브도메인 자동 생성시 php의 $_SERVER['DOCUMENT_ROOT']가 모두 고정되는 현상이 발생한다.

해결방법으로 httpd.conf 또는 httpd-vhosts.conf 수정하는 방법이 있다.
<Directory "/web/">
     php_admin_value auto_prepend_file /web/setdocroot.php
</Directory>


detdocroot.php
<?php
$_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'],'',$_SERVER['SCRIPT_FILENAME']);
?>


구동 방법은 간단하다. auto_prepend_file 을 사용해서 php구동 전 setdocroot.php를 include시켜 $_SERVER['DOCUMENT_ROOT'] 환경변수를 변경한다.

URL 재작성 지침서 : https://httpd.apache.org/docs/2.2/ko/misc/rewriteguide.html

2015년 12월 22일 화요일

iconv 지원 인코딩

ANSI_X3.4-1968 ANSI_X3.4-1986 ASCII CP367 IBM367 ISO-IR-6 ISO646-US ISO_646.IRV:1991 US US-ASCII CSASCII
UTF-8
ISO-10646-UCS-2 UCS-2 CSUNICODE
UCS-2BE UNICODE-1-1 UNICODEBIG CSUNICODE11
UCS-2LE UNICODELITTLE
ISO-10646-UCS-4 UCS-4 CSUCS4
UCS-4BE
UCS-4LE
UTF-16
UTF-16BE
UTF-16LE
UTF-32
UTF-32BE
UTF-32LE
UNICODE-1-1-UTF-7 UTF-7 CSUNICODE11UTF7
UCS-2-INTERNAL
UCS-2-SWAPPED
UCS-4-INTERNAL
UCS-4-SWAPPED
C99
JAVA
CP819 IBM819 ISO-8859-1 ISO-IR-100 ISO8859-1 ISO_8859-1 ISO_8859-1:1987 L1 LATIN1 CSISOLATIN1
ISO-8859-2 ISO-IR-101 ISO8859-2 ISO_8859-2 ISO_8859-2:1987 L2 LATIN2 CSISOLATIN2
ISO-8859-3 ISO-IR-109 ISO8859-3 ISO_8859-3 ISO_8859-3:1988 L3 LATIN3 CSISOLATIN3
ISO-8859-4 ISO-IR-110 ISO8859-4 ISO_8859-4 ISO_8859-4:1988 L4 LATIN4 CSISOLATIN4
CYRILLIC ISO-8859-5 ISO-IR-144 ISO8859-5 ISO_8859-5 ISO_8859-5:1988 CSISOLATINCYRILLIC
ARABIC ASMO-708 ECMA-114 ISO-8859-6 ISO-IR-127 ISO8859-6 ISO_8859-6 ISO_8859-6:1987 CSISOLATINARABIC
ECMA-118 ELOT_928 GREEK GREEK8 ISO-8859-7 ISO-IR-126 ISO8859-7 ISO_8859-7 ISO_8859-7:1987 ISO_8859-7:2003 CSISOLATINGREEK
HEBREW ISO-8859-8 ISO-IR-138 ISO8859-8 ISO_8859-8 ISO_8859-8:1988 CSISOLATINHEBREW
ISO-8859-9 ISO-IR-148 ISO8859-9 ISO_8859-9 ISO_8859-9:1989 L5 LATIN5 CSISOLATIN5
ISO-8859-10 ISO-IR-157 ISO8859-10 ISO_8859-10 ISO_8859-10:1992 L6 LATIN6 CSISOLATIN6
ISO-8859-11 ISO8859-11 ISO_8859-11
ISO-8859-13 ISO-IR-179 ISO8859-13 ISO_8859-13 L7 LATIN7
ISO-8859-14 ISO-CELTIC ISO-IR-199 ISO8859-14 ISO_8859-14 ISO_8859-14:1998 L8 LATIN8
ISO-8859-15 ISO-IR-203 ISO8859-15 ISO_8859-15 ISO_8859-15:1998 LATIN-9
ISO-8859-16 ISO-IR-226 ISO8859-16 ISO_8859-16 ISO_8859-16:2001 L10 LATIN10
KOI8-R CSKOI8R
KOI8-U
KOI8-RU
CP1250 MS-EE WINDOWS-1250
CP1251 MS-CYRL WINDOWS-1251
CP1252 MS-ANSI WINDOWS-1252
CP1253 MS-GREEK WINDOWS-1253
CP1254 MS-TURK WINDOWS-1254
CP1255 MS-HEBR WINDOWS-1255
CP1256 MS-ARAB WINDOWS-1256
CP1257 WINBALTRIM WINDOWS-1257
CP1258 WINDOWS-1258
850 CP850 IBM850 CSPC850MULTILINGUAL
862 CP862 IBM862 CSPC862LATINHEBREW
866 CP866 IBM866 CSIBM866
MAC MACINTOSH MACROMAN CSMACINTOSH
MACCENTRALEUROPE
MACICELAND
MACCROATIAN
MACROMANIA
MACCYRILLIC
MACUKRAINE
MACGREEK
MACTURKISH
MACHEBREW
MACARABIC
MACTHAI
HP-ROMAN8 R8 ROMAN8 CSHPROMAN8
NEXTSTEP
ARMSCII-8
GEORGIAN-ACADEMY
GEORGIAN-PS
KOI8-T
CP154 CYRILLIC-ASIAN PT154 PTCP154 CSPTCP154
KZ-1048 RK1048 STRK1048-2002 CSKZ1048
MULELAO-1
CP1133 IBM-CP1133
ISO-IR-166 TIS-620 TIS620 TIS620-0 TIS620.2529-1 TIS620.2533-0 TIS620.2533-1
CP874 WINDOWS-874
VISCII VISCII1.1-1 CSVISCII
TCVN TCVN-5712 TCVN5712-1 TCVN5712-1:1993
ISO-IR-14 ISO646-JP JIS_C6220-1969-RO JP CSISO14JISC6220RO
JISX0201-1976 JIS_X0201 X0201 CSHALFWIDTHKATAKANA
ISO-IR-87 JIS0208 JIS_C6226-1983 JIS_X0208 JIS_X0208-1983 JIS_X0208-1990 X0208 CSISO87JISX0208
ISO-IR-159 JIS_X0212 JIS_X0212-1990 JIS_X0212.1990-0 X0212 CSISO159JISX02121990
CN GB_1988-80 ISO-IR-57 ISO646-CN CSISO57GB1988
CHINESE GB_2312-80 ISO-IR-58 CSISO58GB231280
CN-GB-ISOIR165 ISO-IR-165
ISO-IR-149 KOREAN KSC_5601 KS_C_5601-1987 KS_C_5601-1989 CSKSC56011987
EUC-JP EUCJP EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE CSEUCPKDFMTJAPANESE
MS_KANJI SHIFT-JIS SHIFT_JIS SJIS CSSHIFTJIS
CP932
ISO-2022-JP CSISO2022JP
ISO-2022-JP-1
ISO-2022-JP-2 CSISO2022JP2
CN-GB EUC-CN EUCCN GB2312 CSGB2312
GBK
CP936 MS936 WINDOWS-936
GB18030
ISO-2022-CN CSISO2022CN
ISO-2022-CN-EXT
HZ HZ-GB-2312
EUC-TW EUCTW CSEUCTW
BIG-5 BIG-FIVE BIG5 BIGFIVE CN-BIG5 CSBIG5
CP950
BIG5-HKSCS:1999
BIG5-HKSCS:2001
BIG5-HKSCS BIG5-HKSCS:2004 BIG5HKSCS
EUC-KR EUCKR CSEUCKR
CP949 UHC
CP1361 JOHAB
ISO-2022-KR CSISO2022KR
CP856
CP922
CP943
CP1046
CP1124
CP1129
CP1161 IBM-1161 IBM1161 CSIBM1161
CP1162 IBM-1162 IBM1162 CSIBM1162
CP1163 IBM-1163 IBM1163 CSIBM1163
DEC-KANJI
DEC-HANYU
437 CP437 IBM437 CSPC8CODEPAGE437
CP737
CP775 IBM775 CSPC775BALTIC
852 CP852 IBM852 CSPCP852
CP853
855 CP855 IBM855 CSIBM855
857 CP857 IBM857 CSIBM857
CP858
860 CP860 IBM860 CSIBM860
861 CP-IS CP861 IBM861 CSIBM861
863 CP863 IBM863 CSIBM863
CP864 IBM864 CSIBM864
865 CP865 IBM865 CSIBM865
869 CP-GR CP869 IBM869 CSIBM869
CP1125
EUC-JISX0213
SHIFT_JISX0213
ISO-2022-JP-3
BIG5-2003
ISO-IR-230 TDS565
ATARI ATARIST
RISCOS-LATIN1

참고 : https://gist.github.com/hakre/4188459

2015년 8월 24일 월요일

페이스북 캐시 삭제 방법(PHP API)

페이스북의 경우 최초 공유시(공유버튼, 타임라인에 URL입력등) 대상 웹사이트에 방문하여 결과값을 서버에 저장해 두고 일정기간 보관하며 이용하게 된다.

그러므로 웹사이트의 콘텐츠 내용(이미지,내용,제목)을 변경해도 페이스북의 캐시가 업데이트 되지 않는한 이미 저장되어 있던 내용을 보여준다.

일반적으로는 Open Graph Debugger 페이지에서 공개된 URL을 입력한 후 Fetch new scrape information 버튼을 클릭해서 캐시를 갱신 할 수있다. (페이스북 로그인)


이 경우 페이지가 수정될때 마다 위 페이지에 접근해서 갱신 시켜줘야 하는 단점있다.

두번째 방법으로는 페이스북 API를 사용해서 즉시 캐쉬를 갱신 할 수 있다.
https://developers.facebook.com/docs/sharing/opengraph/using-objects

간단하게 POST 방식으로 
https://graph.facebook.com 로 id와 scrape 값만 보내주면 된다.

예) PHP 의 curl 사용 예제
$url = 'https://graph.facebook.com';
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POST, true );
$params = array(
'id' => 'http://domain.com/page-url/',
'scrape' => true
);
$data = http_build_query($params);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
curl_exec( $ch );
$httpCode = curl_getinfo( $ch, CURLINFO_HTTP_CODE );

조금만 응용하면 자바스크립트로도 가능하다.(이건 안해봄)

2015년 8월 21일 금요일

본문에 포함된 scrtip 태그 제거하기(정규식)

본문 내용안에 포함된 자바스크립트 삭제 정규식

preg_replace("/<script(.*?)>(.*?)<\/script>/is","",$input);

입맛에 따라 style 태그 제거등으로 활용 가능

2015년 5월 6일 수요일

twitteroauth 0.5.3 설치 및 사용 방법(twitter api)

트위터 php libray인 twitteroauth를 선택하고 사용하려 하지만 간략한 설명과 검색해도 국내 문서가 잘 나오지 않아 간략하게 한번 정리 하고자 한다.

사용전 https://apps.twitter.com/ 이곳에서 application 생성 후 CONSUMER_KEY와 CONSUMER_SECRET 값을 사용할 수 있다..



다운로드 : https://github.com/abraham/twitteroauth/releases

버전 : PHP 5.4 이상
설치방법 :  https://twitteroauth.com/
※ 압축해제 후 전체 업로드 후 간단하게 아래와 같이 코딩하면 바로 사용가능..

<?php
require "twitteroauth/autoload.php"; use Abraham\TwitterOAuth\TwitterOAuth; $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token, $access_token_secret); $content = $connection->get("account/verify_credentials");
?>


$access_token 과 $access_token_secret 를 생략하면 app auth으로 허용된다.
※콜제한 :  https://dev.twitter.com/rest/public/rate-limits

추가
//x_rate_limit_remaining(15분동안 요청가능한 횟수)등 헤더값을 배열로 리턴
print_r($connection->getLastXHeaders());

//HTTP코드를 리턴해준다(정상:200)
print_r($connection->getLastHttpCode());

twitter API v1.1 개발 참고 사이트

처음 트위터 API를 사용해서 개발시 참고 사이트

Exploring the twitter API
https://dev.twitter.com/rest/tools/console

Application Management
https://apps.twitter.com/

Rate Limits: Chart(콜제한)
https://dev.twitter.com/rest/public/rate-limits

twitter PHP libray (OAuth REST API)
- https://dev.twitter.com/oauth/overview/single-user
- https://github.com/abraham/twitteroauth
- https://twitteroauth.com/

Application-only authentication
https://dev.twitter.com/oauth/application-only


2015년 4월 30일 목요일

curl 도메인 사용시 속도 문제

curl 이나 socket 을 사용시, IP로 접근하는 경우 문제가 없으나 도메인으로 접근시 속도가 느려지는 현상이 있었다. 결론적으로 IPV6 disable 하면 해결 가능하다.

curl 사용시 curl_getinfo 함수로 네트워크 지체된 부분을 확인 한다.
namelookup_time 시간이 IP로 접근했을때와 다르게 과도하게 발생된다면 의심해 볼만하다.

이 문제 때문에 호스트네임을 gethostbyname 으로 IP로 변경한 후 사용했다.
메뉴얼에 다음과 같은 설명이 있었음을 이제야 확인한다.(Returns the IPv4 address of the Internet host specified by hostname. )

참고가 될만한 링크..


curl force IPv4 - disable IPv6 in curl and PHP

Linux ETC - ipv6 비활성화 하기