• composer.json
"require":{
  "google/apiclient" : "^2.0"
}
  • routes/web.php
Route::get('googleLoginPage',['as'=>'googleLoginPage', 'uses'=> 'GoogleController@googleLoginPage'])
Route::get('callbackGoogle',['as'=>'callbackGoogle', 'uses'=> 'GoogleController@callbackGoogle'])
  • GoogleController
use Google/Client as Google_Client;

# 구글 로그인 페이지
public function googleLoginPage(){
  $this->getGoogleOauthClient("login");
}

# 구글 유저 정보 가져오기
public function callbackGoogle(){
  $client = $this->getGoogleOauthClient("auth");
  $plus = new \Google_Service_Oauth2($client);
  
  $userData = $plus->userinfo->get();
  
  # 유저 정보
  $social_id    = $userData->id; 
  $social_email = $userData->email;
  $social_name  = $userData->name;  
  
}

private function getGoogleOauthClient($type){
  $client_id = $this->client_id;
  $client_secret = $this->client_secret;
  $authCode = $_GET['code'];
  $redirectURI = '도메인/callbacokGoogle';
  
  $client = new Google_Client();
  $client->setScopse(
    array(
      \Google_service_Oauth2::USERINFO_PRIFILE,
      \Google_service_Oauth2::USERINFO_EMAIL
    )
  );
  
  $client->setClientId($client_id);
  $client->setRedirectUri($redirectURI);
  $client->setAccessType('offline');
  $client->setPrompt('select_account consent');
  
  if(!empty($authCode) && $type == 'auth'){
    # 로그인 페이지가 아닌, 인증 받은 후 유저 정보를 가져올때 $client_secret 필요
    $client->setClientSecret($client_secret);
  }
  
  if($client->isAccessTokenExpired()){
    if($client->getRefreshToken()){
      $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
    }else{
       if(!empty($authCode) && $type == 'auth'){
          $accessToken = $client->fetchAccessTokenWithAuthCode($authCode);
          $client->setAccessToken($accessToken);
          if(array_ket_exists('error', $accessToken)){
            throw new Exception(join(',',$accessToken));
          }
       }elseif($type =='login'){
         # 구글 로그인 페이지로 리다이렉트
         header("location".$client->createAuthUrl());
       }
    }
  }  
  if($type != "login"){
    return $client;
  }  
}
test.html

1
2
3
4
    <form id="uploadForm" method="post" enctype="multipart/form-data" action="excel_upload.php">
        <input name="uploadFile" id="uploadFile" type="file" />
        <input type="submit" name="action" value="Upload" />
    </form>
cs
 
excel_upload.php

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
?php
include $_SERVER["DOCUMENT_ROOT"]."/func/PHPExcel/PHPExcel.php";
 
//-- 읽을 범위 필터 설정
$rangeArr = range('A','L');
class MyReadFilter implements PHPExcel_Reader_IReadFilter
{
    public function readCell($column$row$worksheetName = '') {
        global $rangeArr;
        // Read rows 1 to 7 and columns A to E only
        if (in_array($column,$rangeArr)) {
            return true;
        }
        return false;
    }
}
$filterSubset = new MyReadFilter();
 
$filename = 'test.xlsx';
$upfile_path = './' . $filename;
$path = pathinfo($filename);
$UpFileExt = strtolower($path['extension']);
$inputFileType = '';
 
//파일 타입 설정 (확자자에 따른 구분)
if($UpFileExt == "xls") {
    $inputFileType = 'Excel5';    
}elseif( $UpFileExt == 'xlsx' ){
    $inputFileType = 'Excel2007';
}
 
 
if( file_exists ($upfile_path&& $inputFileType ) {
 
 
    //엑셀리더 초기화
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
 
    //데이터만 읽기(서식을 모두 무시해서 속도 증가 시킴)
    $objReader->setReadDataOnly(false);    
 
    //범위 지정(위에 작성한 범위필터 적용)
    $objReader->setReadFilter($filterSubset);
 
    //업로드된 엑셀 파일 읽기
    $objPHPExcel = $objReader->load($upfile_path);
 
    //첫번째 시트로 고정
    $objPHPExcel->setActiveSheetIndex(0);
 
    //고정된 시트 로드
    $objWorksheet = $objPHPExcel->getActiveSheet();
 
    //시트의 지정된 범위 데이터를 모두 읽어 배열로 저장
    $sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
    $total_rows = count($sheetData);
 
//echo "<pre>";print_r($sheetData);echo "</pre>\n";
 
    $kk = 0;
    echo '<table border="1" cellpadding="0" cellspacing="0" width="100%">';
    foreach($sheetData as $rows) {
        if$kk ==0 ){
            echo '<tr>';
            foreach( $rangeArr as $key=>$val ){
                echo '<td>'.$rows[$val].'</td>';            }
            echo '</tr>';
        }else{
            echo '<tr>';
            foreach( $rangeArr as $key=>$val ){
                echo '<td>'.$rows[$val].'</td>';
            }
            echo '</tr>';
        }
 
        $kk++;
    }//end foreach
    echo '</table>';
 
}else{
    echo 'Error!!';
}
 
?>
 
 
 
cs




fopen

resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )

$filename

파일을 로드할 파일명 또는 파일이있는 주소 이다.


$mode


어떠한 모드로 파일을 열 것인지 설정하는 인자.

인자

모드 

포인터 위치 

파일이 존재 유무 

읽기 전용 

파일의 시작 

파일 내용 보존 

r+ 

읽고 쓰기 

파일의 시작 

파일 내용 보존 

쓰기 전용 

파일의 시작 

파일 내용 삭제, 없으면 새로 생성 

 w+

읽고 쓰기 

파일의 시작 

파일 내용 삭제, 없으면 새로 생성 

쓰기 전용 

파일의 끝 

파일 내용 보존, 없으면 새로 생성 

a+ 

읽고 쓰기 

파일의 끝 

파일 내용 보존, 없으면 새로 생성 

쓰기 전용 

새로운 파일 생성 

파일이 존재하면 flase 리턴  

x+ 

읽고 쓰기 

새로운 파일 생성 

파일이 존재하면 flase 리턴 


파일 읽고 쓰기 예제


$m ='수정할 text';

$dir ='파일 주소'

$file_handle = fopen($dir, "w+") or die("can't open file");

fputs($file_handle, $m);

fclose($file_handle);



date : 로컬 날짜/시간을 형식화 한다.


string date ( string $format [, int $timestamp ] )


정수형으로 주어지는 timestamp나, timestamp가 주어지지 않았을 경우에는 현재 로컬 시간을 사용하여, 주어진 포맷 문자열에 따라 형식화한 문자열을 반환합니다. 즉 timestamp는 선택적이고, 기본값은 time()의 값입니다.


 인수 

format

다음 문자들을 format 인수 문자열로 인식한다.

--- 일 ---
d  :  일, 앞에 0이 붙는 2 숫자  [ 01에서 31 ]
D  :  요일 글자 표현, 3 문자 [ Mon에서 Sun ]
j  :  앞에 0이 붙지 않는 일 [ 1에서 31 ]
l  :  (소문자 'L') 요일의 완전한 글자 표현 [ Sunday에서 Saturday ]
N  :  요일의 ISO-8601 숫자 표현 (PHP 5.1.0에서 추가) [ 1(월요일)에서 7(일요일) ]
S  :  일 영어 접미사, 2 문자 [ st, nd, rd, th. j와 같이 사용하기 좋음. ]
w  :  요일 숫자 표현 [ 0(일요일)에서 6(토요일) ]
z  :  해당 연도 일차 [ (0에서 시작) 0에서 365 ]


--- 주 ---
W  :  ISO-8601 주차, 주는 월요일에 시작 (PHP 4.1.0에서 추가) [ 예시: 42 (그 해의 42번째 주) ]


---월 ---
F  :  January나 March 같은 월의 완전한 글자 표현 [ January에서 December ]
m  :  0이 붙는 월 숫자 표현 [ 01에서 12 ]
M  :  월의 축약 글자 표현, 3 문자 [ Jan에서 Dec ]
n  :  0이 붙지 않는 월 숫자 표현 [ 1에서 12 ]
t  :  주어진 월의 일 수 [ 28에서 31 ]


--- 연 ---
L  :  윤년 여부 [ 윤년엔 1, 그 외엔 0 ]
o  :  ISO-8601 연도. Y와 같지만, ISO 주차(W)가 전해나 다음해에 해당하면, 그 연도를 사용합니다. (PHP 5.1.0에서 추가) [ 예시: 1999나 2003 ]
Y  :  연도의 완전한 숫자 표현, 4 숫자 [ 예시: 1999나 2003 ]
y  :  도의 두 숫자 표현 [ 예시: 99나 03 ]


--- 시간 ---
a  :  오전과 오후의 소문자 [ am 또는 pm ]
A  :  오전과 오후의 대문자 [ AM 또는 PM ]
B  :  스와치 인터넷 시간 [ 000에서 999 ]
g  :  0이 붙지 않는 12시간 형식 시 [ 1에서 12 ]
G  :  0이 붙지 않는 24시간 형식 시 [ 0에서 23 ]
h  :  0이 붙는 12시간 형식 시 [ 01에서 12 ]
H  :  0이 붙는 24시간 형식 시 [ 00에서 23 ]
i  :  0이 붙는 분 [ 00에서 59 ]
s  :  초, 0이 붙음 [ 00에서 59 ]
u  :  마이크로초 (PHP 5.2.2에서 추가) [ 예시: 54321 ]


--- 시간대 ---
e  :  시간대 식별자 (PHP 5.1.0에서 추가) [ 예시: UTC, GMT, Atlantic/Azores ]
I  :  (대문자 i) 일광 절약 시간 여부  [ 일광 절약 시간이면 1, 아니면 0 ]
O  :  그리니치 시간(GMT)과 시차 [ 예시: +0200 ]
P  :  시와 분 사이에 콜론이 들어가는 그리니치 시간(GMT)과 차이 [ 예시: +02:00 ]
T  :  시간대 축약어 [ 예시: EST, MDT ... ]
Z  :  시간대 오프셋 초. UTC 서쪽은 항상 음수, UTC 동쪽은 항상 양수 [ -43200에서 50400 ]


--- 날짜/시간 표현 ---
c  :  ISO 8601 날짜 (PHP 5에서 추가) [ 2004-02-12T15:19:21+00:00 ]
r  :  ≫ RFC 2822 형식 날짜 [ 예시: Thu, 21 Dec 2000 16:01:07 +0200 ]
U  :  유닉스 에포치(January 1 1970 00:00:00 GMT)부터 초수 [ time() 참조 ]


timestamp

선택적인 timestamp 인수는 timestamp가 주어지지 않앗을 경우, 현재 로컬 시간을 기본값으로 가지는 integer 유닉스 타임스탬프이다. 

죽, 기본값은 time() 값이다.


'PHP' 카테고리의 다른 글

[PHP] php에서 파일 생성 및 수정하기  (0) 2017.08.25
[PHP] 간단한 이미지 다운로드 (수정)  (0) 2017.08.23
[PHP] str_replace  (0) 2017.08.14
[PHP] 반복문(while, do..while, for)  (0) 2017.07.17
[PHP] 조건문 Switch  (0) 2017.07.04

str_replace 발견한 모든 검색 문자열을 치환 문자열로 교체


str_replace($search, $replace, $subject[, int $count])


subject에서 발견한 모든 search를 주어진 replace 값으로 치환한 문자열이나 배열을 반환한다.


(정규표현식처럼) 복잡한 치환 규칙이 필요하지 않으면, ereg_replace()나 preg_replace() 대신 이 함수를 사용해야 된다.


search와 replace가 배열이면, str_replace()는 각가의 배열에서 취한 값을 사용해서 subject를 검색 치환한다.


replace가 search보다 적은 값을 가지고 있으면, 나머지 치환값으로 빈 문자열을 사용한다.


search가 배열이고 replace가 문자열이면, search의 모든 값에 이 치한 문자열을 사용한다.


search나 replace가 배열이면, 그 요소는 처음부터 마지막 순으로 처리된다.


subject가 배열이면, 검색 및 치환을 subject의 모든 원소에서 수행하고, 배열을 반환한다.


count 넘겨지면, 매치하여 교체하는 수를 가진다.


이 함수는 치환한 값을 가지는 문자열이나 배열을 반환한다.


예제


<?php

$bodytag = str_replace("%body%", "black", "<body text='%body%'>");

//결과 : <body text='black'>


$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");

$onlyconsonants = str_replace($vowels, "", "Hello World of PHP");


echo $onlyconsonants; 

//결과 : Hll Wold f PHP


$phrase  = "You should eat fruits, vegetables, and fiber every day.";

$healthy = array("fruits", "vegetables", "fiber");

$yummy   = array("pizza", "beer", "ice cream");


$newphrase = str_replace($healthy, $yummy, $phrase);


echo $newphrase."<br>"; 


//결과 : You should eat pizza, beer, and ice cream every day.


$str = str_replace("ll", "", "good golly miss molly!", $count);

echo $count."<br>"; // 2


$str     = "Line 1\nLine 2\rLine 3\r\nLine 4\n";

$order   = array("\r\n", "\n", "\r");

$replace = '<br />';


// \r\n을 먼처 처리해서 두번 변환되지 않도록 합니다.


$newstr = str_replace($order, $replace, $str);

echo $newstr."<br>";

/*

결과 : 

Line 1

Line 2

Line 3

Line 4

*/


$letters = array('a', 'p');

$fruit   = array('apple', 'pear');

$text    = 'a p';

$output  = str_replace($letters, $fruit, $text);

echo $output;

//결과 : apearpearle pear


?>

'PHP' 카테고리의 다른 글

[PHP] 간단한 이미지 다운로드 (수정)  (0) 2017.08.23
[PHP] Date 함수  (0) 2017.08.14
[PHP] 반복문(while, do..while, for)  (0) 2017.07.17
[PHP] 조건문 Switch  (0) 2017.07.04
[PHP] 조건문 - IF문  (0) 2017.07.03

+ Recent posts