반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함


지금 회사에서 사용하고 있는 Kurogo 가 PHP 로 돼 있거든요.


그래서 그 시스템을 커스터마이징을 하려면 PHP 코딩을 해야되서...

거의 10여년만에 PHP를 다시 보고 있습니다.


중간 중간 기억하고 싶은 팁들이 생기면 여기다 저장해 놓으려구요.


일단 지금은 원격 서버의 이미지 파일을 저희 팀 웹페이지에 display 하는 로직을 만들고 있는데요.


우선 그 이미지가 있는지 없는지부터 확인해서 있으면 표시하고 없으면 다른 메세지나 디폴트 이미지를 하기로 했습니다.


이미지 파일이 있는지 없는지를 확인할 수 있는 방법으로는 첫번째로 이미지의 크기를 구하는 함수를 사용할 수 있습니다.


//// check Image size       
        function checkIMG($IMGPath) {
            $fileCheck = getImagesize($IMGPath);
            if($fileCheck) { $isExist = "OK"; } else { $isExist = "NO"; }
            return $isExist;
        }


함수에 원격 이미지 파일의 경로와 파일이름을 담은 $IMGPath 를 넘겨주면 됩니다.





두번째로는 이미지이외에도 다른 경우에도 사용할 수 있는 건데요. 헤더 정보를 얻는 겁니다.

//// get header info
        function checkHeader($filePath) {
            $AgetHeaders = get_headers($filePath);
            if(!$AgetHeaders) {
                echo "Network Problem. Too slow or No Network.<p>";
                $isExist = "Net";
            } else {
                if (preg_match("|200|", $AgetHeaders[0])) {
                        // file exists
                    $isExiset = "OK";
                } else {
                        // file doesn't exists
                    $isExiset = "NO";
                }
            }
            return $isExiset;
        }


여기선 중간에 살짝 정보를 얻어오지 못할 경우 Network 문제가 있다고 뿌려주는 로직도 있습니다.


그 다음으로는 cURL을 사용하는 건데 이건 정확히 get_headers()와 뭐가 다른지 모르겠네요.

cURL로는 파라미터 정보를 넘길수도 있다고 하는데...

하여간 사용법은 아래와 같습니다.


////////
        function curl1($filePath) {
            $curl = curl_init();
            curl_setopt_array( $curl, array(
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_URL => $filePath ) );
            curl_exec( $curl );
            $response_code = curl_getinfo( $curl, CURLINFO_HTTP_CODE );
            curl_close( $curl );
            return $response_code;
        }       
       
        function curl2($filePath){
            //To get the whole header you can issue a HEAD request, like this:

            $curl = curl_init();
            curl_setopt_array( $curl, array(
                CURLOPT_HEADER => true,
                CURLOPT_NOBODY => true,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_URL => $filePath ) );
            $headers = explode( "\n", curl_exec( $curl ) );
            curl_close( $curl );
           
            return $headers[0];
        }


그런데 위 4가지 방법 모두 다 문제가 있었습니다.

왜냐하면 회사 서버에 Proxy 가 있는데 이걸 통해서는 아무 값도 못 받아오더라구요.


회사 내부 서버끼리 테스트 할 때는 잘 됐는데 회사 네트워크 밖에 있는 이미지(파일)을 가지고 하려니까 안되더라구요.


이럴 경우 Proxy 를 거쳐서 정보를 가져오도록 해야 되는데요.

stream_context_create() 함수와 file_get_contents() 함수를 사용했습니다.


/////// get contents via proxy               
        function getViaProxy($filePath){
                                // Define a context for HTTP.
                    $aContext = array(
                        'http' => array(
                        'proxy' => '프락시 정보', // This needs to be the server and the port of the NTLM Authentication Proxy Server.
                        'request_fulluri' => True,
                    ),
                    );
                    $cxContext = stream_context_create($aContext);

                    // Now all file stream functions can use this context.
                    $sFile = file_get_contents($filePath, False, $cxContext);
                    if($sFile){
                        $result = "Y";
                    }else{   
                        $result = "N";
                    }
                    return $result;
        }


이렇게 해서 어렵게 어렵게 문제를 해결했습니다.


반응형

Comment