config.php 에서 G5_SMTP 부분 수정해줍니다.

define('G5_SMTP',        'smtp.worksmobile.com');

define('G5_SMTP_PORT',   '587'); // 웍스모바일의 경우 pop3/smtp 설정이 아닌 imap/smtp 설정 사용

define('G5_SMTP_SECURE', 'TLS');

define('G5_SMTP_ID',     '아이디'); // 웍스에서 사용하는 계정. 이메일주소

define('G5_SMTP_PW',     '비번'); // 비번은 가급적 암/복호화 모듈을 이용해서 암호화 해줄것

define('G5_SMTP_DEBUG',  0); // 1~4. 확인을 원할때는 1이나 2정도로 수정해서 테스트해보세요.


lib/mailer.lib.php 중 일부 수정

    $mail = new PHPMailer(); // defaults to using php "mail()"


    $mail->Encoding = 'base64'; // 기본값이 8bit 이므로, base64로 변경함.

    $mail->SMTPDebug = (@constant('G5_SMTP_DEBUG') ? G5_SMTP_DEBUG : 0);

    $mail->Debugoutput = 'html';

    //$mail->Timeout = 3; // 타임아웃 3초로 변경(기본값 10초)


    if (defined('G5_SMTP') && G5_SMTP) {

        $mail->IsSMTP(); // telling the class to use SMTP

        $mail->Host = G5_SMTP; // SMTP server

        if(defined('G5_SMTP_PORT') && G5_SMTP_PORT)

            $mail->Port = G5_SMTP_PORT;


        if(@constant('G5_SMTP_SECURE')) $mail->SMTPSecure = G5_SMTP_SECURE;

        if(@constant('G5_SMTP_ID') && @constant('G5_SMTP_PW')) {

            $mail->SMTPAuth = true; // enable SMTP authentication

            $mail->Username = G5_SMTP_ID;

            $mail->Password = G5_SMTP_PW; // 비번은 가급적 암/복호화 모듈을 이용해서 암호화 해줄것


            // 웍스의 경우 발송메일주소가 로그인아이디와 같아야 함

            //$mail->SetFrom(G5_SMTP_ID, $fname);

            //$mail->AddReplyTo(G5_SMTP_ID, $fname);

            $fmail = G5_SMTP_ID;

        }

    }


    $mail->CharSet = 'UTF-8';


블로그 이미지

먼지손

,

언젠가부터 로컬환경에서 에디터를 통한 이미지업로드시 항상 에러가 났다. 그런데 정작 파일은 업로드디렉토리에 정상적으로 들어가 있다. 으잉?

뭐 서버쪽에서는 잘 돌아가니까 크게 신경을 안쓰다가 좀 찜찜해서 살펴봤다.


업로드시 에러가 나면 기본적으로는 일반 파일업로드와 마찬가지로 두가지를 중점으로 살펴본다.

1. 업로드 디렉토리의 권한 (data/editor: 707 또는 777)

2. 호스팅용량초과 여부 (관리자에서 캐시,캡챠,썸네일파일들을 삭제하고나서 업로드가 되면 거의 이 이유)


그러나 윈도의 로컬환경에서는 저 두가지 다 해당사항이 없다.

분명 php쪽 에러가 나서 처리가 안됐을 것이다는 짐작하에 이래저래 뒤적거려가며 찍어보다가 찾았다.

smarteditor2/photo_uploader/js/basic.js 에 .on('fileuploadfail', function (e, data) {}) 에서

data.errorThrown.message 찍어보니 'Unexpected token < in JSON at position 0' 이런게 찍힌다.

json데이터로 리턴받는다고 했는데 json형식이 아니었던것다. 그럴만한 이유는 역시나 에러가 나서 일반텍스트가 찍혔겠지.

다시 data.jqXHR.responseText 이걸 찍어봤더니만

<br />?<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1 in <b>www\plugin\editor\smarteditor2\photo_uploader\popup\php\UploadHandler.php</b> on line <b>298</b><br />?<br />?<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1 in <b>www\plugin\editor\smarteditor2\photo_uploader\popup\php\UploadHandler.php</b> on line <b>764</b><br />?<br />?<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1 in <b>www\plugin\editor\smarteditor2\photo_uploader\popup\php\UploadHandler.php</b> on line <b>788</b><br />?<br />?<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1 in <b>www\plugin\editor\smarteditor2\photo_uploader\popup\php\UploadHandler.php</b> on line <b>790</b><br />?

...

이런것들이 잔뜩 찍힌다.

UploadHandler.php 파일을 열어보니

$file = new \stdClass();

요런 녀석들이다.

응? 이거 네임스페이스 아닌가?

전에도 Browscap 때문에 문제가 됐었는데 php버전문제다.

네임스페이스는 php 5.3 이상에서 지원되므로 5.3미만에서는 저런 경고가 뜬다.


내 로컬환경이 워낙에 오래전부터 유지되어온 관계로 apmsetup 2009년도 버전인가 그럴거다. 아하하 -_-;

php버전차이를 극뽁하기 위해 xampp도 병행사용하긴 하는데 익숙하다보니 apmsetup을 주로 쓴다;


여튼. 그누보드5.2.0 기준으로..

smarteditor2/photo_uploader/popup/php/UploadHandler.php 파일을 UploadHandler52.php로 복사하고 52파일을 열어 \stdClass(), \Imagick(), \ImagickPixel, \imagick, \Imagick() 들을 찾아 앞에 \를 지워준다.


같은 위치의 index.php 파일을 열어서 require문을 바꿔준다.

변경전

    require('UploadHandler.php');

변경후

    if (version_compare(phpversion(), '5.3', '<')) // namespace는 5.3.0 이상부터 지원
        require('UploadHandler52.php');
    else
        require('UploadHandler.php');



사실.. 이거 눈에 걸린지는 일년쯤 된거 같은데.. 딱히 일하는데 지장도 없고 해서 신경안쓰고 있었다;

그래도 찜찜한거 하나 없애놔서 살짝 좀 유쾌상쾌통쾌~!


블로그 이미지

먼지손

,

로컬에서 테스트할 때는 같은 데이터로도 이상없이 잘 되는데

묘하게도 서버에서는 POST값이 잘려서 넘어간다.

이미 post_max_size 등의 환경설정은 체크해봤다.

POST받은 페이지에서 $_POST를 통채로 출력해봐도 잘려있다.

혹시나 해서 input 항목을 앞쪽에 추가해보니 추가된 갯수만큼 잘린다.

이거슨 갯수와 관계있다! 라고 생각되서 뒤적뒤적..

http://blog.naver.com/romeoyo/120151844343

오호라!! 이거구나!

값을 확인해보니 로컬은 설정이 아예 없고, 서버에는 max_input_vars 값이 1000으로 잡혀있다.

근데 ini_set()으로도 변경이 안되고.. 이를 어찌한다.. 좀 더 뒤적뒤적

http://alittlemore.tistory.com/15

다행히도 카페24 호스팅이 htaccess를 지원하고 있다.

루트에 넣기는 좀 찜찜하니 해당디렉토리(관리자 디렉토리중 해당모듈의 디렉토리)에

.htaccess 에 넉넉하게 PHP_VALUE max_input_vars 50000 이렇게 넣어주고 저장, 업로드.

극~뽁~!!

블로그 이미지

먼지손

,

연계된 사이트로 넘겨주는 링크가 있다.

로그도 남겨야겠고 권한체크도 해야겠기에 점프해주는 파일을 만들고 거기서 document.location.replace()로 이동했다.

테스트할때는 몰랐는데 XP컴에서 오류가 난다는 보고를 받았다.

이동되는 사이트에서도 어디서 왔는지 리퍼러를 체크할텐데 거기서 에러가 나는걸로 보인다.

혹시나 해서 js로 되있는걸 header()로 넘겨봤더니만 바로 해결;

얼마전 같은 페이지에서 해당 점프페이지를 target을 잡아서 새창으로 열었었는데 같은 증상이 있었다.


리퍼러를 가져가야 하는 경우라면 새창(a:target이나 팝업) 사용을 자제하고 js보다는 header()로 이동시키자.


참고 : http://just4fun.tistory.com/206

블로그 이미지

먼지손

,

내 테스트서버에서 두개이상의 도메인을 물릴때는 설정을 아파치에서 ServerAlias로 추가해주는데

이때 $_SERVER['SERVER_NAME'] 과 $_SERVER['HTTP_HOST'] 값은 전부 접속하는 현재의 도메인으로 나온다.

하지만 카페24에서 여러 도메인을 물리면 묘하게도 $_SERVER['SERVER_NAME'] 값이 메인도메인으로 나온다.


php 설정에서 세션의 기본값은 쿠키사용이다.

그누보드의 config.php에서 쿠키도메인을 상황에 따라 입력할 수 있도록 해놨지만 매번 귀찮으니

$_SERVER['SERVER_NAME'] 값에서 앞에 www.만 뺀 도메인값 앞에 . 을 넣어서 www 여부와 관계없이 세션공유를 하게끔 해놨었다.

$_SERVER['HTTP_HOST'] 값은 SSL접속등 포트번호가 80이 아니어서 따로 붙는 경우 그 값까지 가져오기때문에 $_SERVER['SERVER_NAME'] 을 사용했던 것이다.


$g4['cookie_domain2'] = preg_replace('/^www\./i','',$_SERVER['SERVER_NAME']);

$g4['cookie_domain'] = '.'.$g4['cookie_domain2'];

그랬더니 앞서 말한 카페24의 상황에서는 메인도메인 외에는 로그인 및 세션이 문제가 생긴다.

해서 쿠키도메인 값을 $_SERVER['SERVER_NAME'] 에서 $_SERVER['HTTP_HOST'] 로 변경시켰다.


$tmp = explode(':',$_SERVER['HTTP_HOST']);
$g4['cookie_domain2'] = preg_replace('/^www\./i','',$tmp[0]);
$g4['cookie_domain'] = '.'.$g4['cookie_domain2'];

이렇게 해서 도메인이 어떤걸로 연결되던간에 세션(쿠키)문제는 해결됐다.

다만 도메인간 쿠키/세션 공유는 없다! 그걸 왜해! 안해!  -ㄴ-;


블로그 이미지

먼지손

,