본글은 PHPSCHOOL 오랜만에 들어갔다가 Tip&Tech에 유용해 보이는 정보가 있어 일단 스크랩 목적으로 글을 가져와 봅니다.

자세한 글이나, 댓글들을 보실려면 출처로 들어가 확인해보시길 추천합니다.

 

 

 

출처 : 구글드라이브를 이용한 OCR 기능(PHP) (https://phpschool.com/link/tipntech/82695)

=====================================

 

 

<?php 
// 제가 사용하는 서버의 PHP가 구닥다리 5.2라서 
// https://github.com/alchemy-fr/google-plus-api-client 여기에서 가져왔음
include "libraries/google_api/Google_Client.php";
include "libraries/google_api/contrib/Google_DriveService.php";
 
$client = new Google_Client();
$client->setClientId('XXXXXXXXXX.apps.googleusercontent.com');
$client->setClientSecret('XXXXXXXXXXXX');
$client->setRedirectUri('https://XXXXXXXXX/google_drive/google_drive.php');
     
$scope = array(
    'https://www.googleapis.com/auth/drive',
    'https://www.googleapis.com/auth/drive.readonly.metadata',
    'https://www.googleapis.com/auth/drive.file',
    'https://www.googleapis.com/auth/drive.appdata',
    'https://www.googleapis.com/auth/drive.scripts',
    'https://www.googleapis.com/auth/drive.metadata',
    'https://www.googleapis.com/auth/spreadsheets',
);
 
$client->setScopes($scope);
$client->setAccessType('offline');
 
// auth 토큰 유지 로직 시작 - 토큰 가져오기 방법은 각자 알아서 하세요~
// (https://github.com/googleapis/google-api-php-client 예제가 있음)
$hostname = "XXXXX";
$username = "XXXX";
$userpass = "XXXXXXX";
$dbname = "XXXXX";
$connect = mysqli_connect($hostname, $username, $userpass, $dbname);
 
/**
CREATE TABLE token2 (
  seq INT(11) NOT NULL AUTO_INCREMENT,
  type VARCHAR(255) DEFAULT NULL,
  token TEXT DEFAULT NULL,
  PRIMARY KEY (seq)
)
*/
 
$tokenquery="SELECT * FROM token2 WHERE type='original'";
$tokenresult = mysqli_query($connect,$tokenquery);
$tokenrow=mysqli_fetch_assoc($tokenresult);
 
if($tokenrow) {
  extract($tokenrow);
}
$time_created = json_decode($token)->created;
$t=time();
$timediff=$t-$time_created;
$refreshToken = json_decode($token)->refresh_token;
 
if(($timediff>360)&&($token!=''))
{
  $refreshquery="SELECT * FROM token2 WHERE type='refresh'";
  $refreshresult = mysqli_query($connect,$refreshquery);
  $refreshrow=mysqli_fetch_assoc($refreshresult);
   
  if($refreshrow)
  {
    extract($refreshrow);
    $refresh_created = json_decode($token)->created;
    $refreshtimediff=$t-$refresh_created;
    if($refreshtimediff>3600)
    {
      $client->refreshToken($refreshToken);
      $newtoken=$client->getAccessToken();
      $tokenupdate="UPDATE token2 SET token='$newtoken' WHERE type='refresh'";
      mysqli_query($connect,$tokenupdate);
      $token=$newtoken;
    }
    else
    {
      $client->setAccessToken($token);
    }
  }
  else
  {
    $client->refreshToken($refreshToken);
    $newtoken=$client->getAccessToken();
    $tokenupdate="INSERT INTO token2 (type,token) VALUES ('refresh','$newtoken')";
    mysqli_query($connect,$tokenupdate);
    $token=$newtoken;
  }
}
 
//if token is still good.
if(($timediff<3600)&&($token!=''))
{
  $client->setAccessToken($token); 
}
 
mysqli_close($connect);
// 여기까지 auth 토큰 유지 로직
 
$drive = new Google_DriveService($client);
// 업로드할 파일명
$filename = './PICK.pdf_page_1.jpg';
 
// 업로드할 파일의 상세정보
$title = 'test'; // 파일명
$filedata = file_get_contents($filename);
$size = getimagesize($filename);
$mimeType = $size['mime'];
$imgfile = new Google_DriveFile();
$imgfile->setTitle($title);
$imgfile->setMimeType($mimeType);
 
// 드라이브에 올림
$createdFile = $drive->files->insert($imgfile, array(
    'ocr' => true,
    'ocrLanguage' => 'kr',
    'data' => $filedata,
    'mimeType' => $mimeType,
));
 
$req = new Google_HttpRequest($createdFile->exportLinks['text/plain']);
$val = $client->getIo()->authenticatedRequest($req);
$response = $val->getResponseBody(); 
// Temporary Redirect The document has moved here. 페이지이므로 href만 가져온다
preg_match('/href=(["\'])([^\1]*)\1/i', $response, $m);
 
$req = new Google_HttpRequest($m[2]);
$val = $client->getIo()->authenticatedRequest($req);
// html태그랑 스타일 모두 제거
$response = strip_tags(preg_replace('~\<style(.*)\>(.*)\<\/style\>~', '', $val->getResponseBody()),'<p>');
 
// 처리가 완료된 파일은 삭제. 삭제 안하면 계속 누적되어 보기에 안 좋음
$drive->files->delete($createdFile->id);
 
echo nl2br($response);
?>

※ PHPSCHOOL 및 작성글에 CC정보가 없어 복사는 해왔으나 문제가 될 경우 삭제하겠습니다.

[알고리즘] 날짜 - 이번주에 시작일과 마지막일 구하기
<?php
//기본 날짜 세팅 - 이 부분을 날짜를 바꿔가면서 테스트 하시면 됩니다.
$year = date("Y");
$month = date("m");
$day = date("d");

$nowday = mktime(0,0,0,$month, $day, $year);
//오늘
$today = date("Y.m.d", $nowday);
//일주일전
$prev_week = date("Y.m.d", mktime(0,0,0,$month, $day-7, $year));
//일주일후
$next_week = date("Y.m.d", mktime(0,0,0,$month, $day+7, $year));
//이번달 마지막 날짜?
$last_day = date("t",$nowday);
//이번달은 몇 주?
//$month_week1 = date('t', mktime());
$month_week = date("t", mktime());
$month_week = $month_week / 7;
//$month_week1 = ceil($month_week1 /7);
$month_week = ceil($month_week);
//현재 요일
$now_week_day = date("w", mktime(0,0,0, $month, $day, $year));
$w_d[0] = "일요일";
$w_d[1] = "월요일";
$w_d[2] = "화요일";
$w_d[3] = "수요일";
$w_d[4] = "목요일";
$w_d[5] = "금요일";
$w_d[6] = "토요일";

//마지막 날의 요일을 구한다.
$end_week_day = date("w", mktime(0,0,0, $month, $last_day, $year));

if($day >= 1 && $day <= $now_week_day+1){//현재주가 시작 주이면
    $start_day = date("Y.m.d", mktime(0,0,0, $month, 1, $year));
    $end_day = date("Y.m.d", mktime(0,0,0,$month, $day + (6-$now_week_day), $year));
}elseif($day >= ($last_day - ($end_week_day+1)) && $day <= $last_day){//현재주가 마지막 주이면
    $start_day = date("Y.m.d", mktime(0,0,0, $month, ($day - $now_week_day), $year));
    $end_day = date("Y.m.d", mktime(0,0,0,$month, $last_day, $year));
}else{
    $start_day = date("Y.m.d", mktime(0,0,0, $month,  $day - $now_week_day, $year));
    $end_day = date("Y.m.d", mktime(0,0,0,$month, $day + (6-$now_week_day), $year));
}


echo "
오늘  : $today <br>
일주일전 : $prev_week <br>
일주일후 : $next_week <br>
이번달 마지막 날짜? : $last_day <br>
이번달은 몇 주? : $month_week <br>
현재 요일? : $w_d[$now_week_day] <br>
이번주 시작일 날짜? : $start_day <br>
이번주 마지막 날짜? : $end_day <br>
";
?>

출처 : http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=58495&sca=&sfl=wr_subject%7C%7Cwr_content&stx=%BD%C3%C0%DB%C0%CF&sop=and

이 글은 스프링노트에서 작성되었습니다.

'Language > PHP' 카테고리의 다른 글

[PHP]구글드라이브를 이용한 OCR 기능  (0) 2021.09.09
array_walk를 이용한 배열 함수  (0) 2008.07.18

array_walk를 이용한 배열 함수


제가 사용하는 class로 만든 일부분 입니다. 그냥 봐보세요 ^^ 전 array_walk(php3,4,5지원/array_map는 php4.0.6이상)를 이용했습니다
아래 여기저기 조합한 것들이라 출처는 저도 기억이 나지 않습니다.
필요에 따라서는 수정한 부분도 있었던것 같고요 ^^

<?php
class Fun {
    /**
     * 배열값들의 앞뒤 공백 없애기
     * @Call $this->trimAll() : 재귀호출(자기자신 호출)
     * @Param &$array {array}
     * @Return $array {array} : &변수이므로 그값을 그대로 가짐(C의 포인터(?))
     */
    function trimAll(&$array) {
          if( is_array($array) ) {
              // class 일경우 array_walk ($array, array($this, 'trimAll'));
            array_walk ($array, array($this, 'trimAll'));
          } else {
            $array = trim($array);
          }
    }
    /**
     * 배열값 전체에 addslashes
     * @Call $this->addslashesAll() : 재귀호출(자기자신 호출)
     * @Param &$array {array}
     * @Return $array {array} : &변수이므로 그값을 그대로 가짐(C의 포인터(?))
     */
    function addslashesAll(&$array) {
        if (get_magic_quotes_gpc() == false){
            if(is_array($array)) {
                array_walk ($array, array($this, 'addslashesAll'));
            } else {
                $array = addslashes($array);
            }
        }
    }
     /**
     * 배열값 전체에 stripslashes
     * @Call $this->stripslashesAll() : 재귀호출(자기자신 호출)
     * @Param &$array {array}
     * @Return $array {array} : &변수이므로 그값을 그대로 가짐(C의 포인터(?))
     */
    function stripslashesAll(&$array) {
        if(is_array($array)) {
            array_walk ($array, array($this, 'stripslashesAll'));
        } else {
              $array = stripslashes($array);
        }
    }
    //EUC-KR(한글 코드페이지[949])을 UTF-8로
    function iconv_utf8All(&$array){
        if( is_array($array) ) {
              // class 일경우 array_walk ($array, array($this, 'trimAll'));
            array_walk ($array, array($this, 'iconv_utf8All'));
          } else {
            //$array = iconv($slang,$tlang,$array);
            if (iconv("UTF-8","UTF-8",$array) == $array) {
                $array = $array;
              } else {
                $array = iconv("CP949","UTF-8",$array);
              }

          }
    }
    //UTF-8을 EUC-KR(한글 코드페이지[949])로
    function iconv_CP949All(&$array){
        if( is_array($array) ) {
              // class 일경우 array_walk ($array, array($this, 'trimAll'));
            array_walk ($array, array($this, 'iconv_CP949All'));
          } else {
            //$array = iconv($slang,$tlang,$array);
            if (iconv("CP949","CP949",$array) == $array) {
                $array = $array;
              } else {
                $array = iconv("UTF-8","CP949",$array);
              }

          }
    }
}
?>

이 글은 스프링노트에서 작성되었습니다.

+ Recent posts