[PHP] Laravel Database Seeding error


Laravel Framework 5.4.4

Database Seeding시에 다음과 같은 에러가 나면

 [InvalidArgumentException]
  Unable to locate factory with name [default] [App\xxxx].

ModelFactory.php 파일에 App\xxxx가 define 으로 설정돼 있는지 확인한다.

\database\factories\ModelFactory.php

Posted by incree

2017/01/27 22:42 2017/01/27 22:42
,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/376

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

페이스북용 챗봇 개발중에 php로 응답 보내는 부분 구현에 어려움을 겪어 정리 차원으로 올림

페이스북의 node.js 샘플 처럼 전체 파라미터를 json_encode해서 보내면 아래와 같은 에러가 리턴된다

{
  "error": {
    "message": "(#100) The parameter recipient is required",
    "type": "OAuthException",
    "code": 100,
    "fbtrace_id": "CdhFkKgAL19"
  }
}또는 형태에 따라

{
  "error": {
    "message": "(#100) param recipient must be non-empty.",
    "type": "OAuthException",
    "code": 100,
    "fbtrace_id": "BDoRMk2PNZU"
  }
}



아래 주석 부분 주의해서 다음과 같이 하면 정상 송신이 가능하다.
$messageData = array('recipient' => array('id' => $recipientId)
              , 'message' => array('text' => $messageText, 'metadata' => 'DEVELOPER_DEFINED_METADATA'));

$params = array(
        'recipient' => json_encode($messageData['recipient']),
        'message' => json_encode($messageData['message'])
    );

    $curl = curl_init('https://graph.facebook.com/v2.6/me/messages?access_token=your_token');
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);  // 이게 없으면 통신 자체가 안된다(에러 60)
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));  // 전체 json이 아니라 파라미터의 값만 json이어야 한다. node.js 예제에서는 content-type도 application/json이고 파라미터도 전체 json 데이타 이다. 그 코드가 정상 작동하는지 모르겠지만 php는 위와 같이 해야 정상작동

    $json_response = curl_exec($curl);
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

    curl_close($curl);

    $response = json_decode($json_response, true);




한글 메시지 전송을 위해서는 파일을 utf-8로 저장해야 한다  

Posted by incree

2016/11/11 21:53 2016/11/11 21:53
, , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/370

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

구글 캘린더 목록 가져오기

Google APIs Client Library for PHP download

<?php
require_once 'Google/Client.php';
require_once 'Google/Service/Calendar.php';

$client = new Google_Client(); 
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->setScopes(array('https://www.googleapis.com/auth/calendar.readonly', 'https://www.googleapis.com/auth/calendar'));

$cal = new Google_Service_Calendar($client);

$calList = $cal->calendarList->listCalendarList();
    $_SESSION['token'] = $client->getAccessToken();

    $items = $calList->getItems();
    $itemsLen = sizeof($items);

    for($i = 0; $i < $itemsLen; ++$i) {
        echo $items[$i]['id'], ' : ' . $items[$i]['summary'], '<br />';
    }
?>



$client_id = '<YOUR_CLIENT_ID>';
 $client_secret = '<YOUR_CLIENT_SECRET>';
 $redirect_uri = '<YOUR_REDIRECT_URI>';
/*
위 세 변수 값은 Google Developers Console에서 프로젝트 선택후
APIS & AUTH -> Credentials 에서 OAuth 의 Create New Client ID 클릭해서 생성하면 된다.
*/

사용자 삽입 이미지

Posted by incree

2014/07/07 15:02 2014/07/07 15:02
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/338

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

api 문서의 예제가 전부 옛날거라서

직접 라이브러리 분석해서 처리한 방법

정상적인 방법인지는 모르겠지만, 등록은 잘 된다.

구글 캘린더 일정 등록하기

Google APIs Client Library for PHP download

<?php
require_once 'Google/Client.php';
require_once 'Google/Service/Calendar.php';

$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->setScopes(array('https://www.googleapis.com/auth/calendar.readonly', 'https://www.googleapis.com/auth/calendar'));

$cal = new Google_Service_Calendar($client);

$calendarId = ''; //
$targetDate = '2014-07-07';
$tDate = new Google_Service_Calendar_EventDateTime();
$tDate->setDate($targetDate);
   
$body = new Google_Service_Calendar_Event();
$body->setSummary($cTitle);  // 일정 제목
$body->setStart($tDate); // 일정 시작
$body->setEnd($tDate); // 일정 종료
   
$cal->events->insert($calendarId, $body);
?>







$client_id = '<YOUR_CLIENT_ID>';
 $client_secret = '<YOUR_CLIENT_SECRET>';
 $redirect_uri = '<YOUR_REDIRECT_URI>';
/*
위 세 변수 값은 Google Developers Console에서 프로젝트 선택후
APIS & AUTH -> Credentials 에서 OAuth 의 Create New Client ID 클릭해서 생성하면 된다.
*/

사용자 삽입 이미지

Posted by incree

2014/07/07 14:54 2014/07/07 14:54
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/337

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

구글 캘린더가 처음 나왔을때 몇년 사용하다 아이폰 사면서 기본으로 제공되는 캘린더 앱을 사용했었는데,

요즘 다시 구글 캘린더를 사용하게 됐다.

구글 캘린더의 가장 아쉬운 점이 음력 일정을 입력할 수 없다는 건데,

이 부분은 api를 이용해서 구현해 놓은 곳이 있다.

http://googlelunar.cpueblo.com/

하지만 일정의 반복 설정등을 할 수 없어서 여전히 불편하기는 하다.

이 부분은 구글에서 제공해 주지 않으면 처리하기가 힘들지 않을까 싶다.

개인적으로 그 다음 있었으면 하는 기능이 D-day 기능인데,

이건 찾아봐도 구글 캘린더 기본 기능에도 없는 것 같고, 구현해 놓은것도 못 찾았다.

해서 그냥 만들기로 했다.

캘린더 API(https://developers.google.com/google-apps/calendar/?hl=ko)에 있는 라이브러리와 예제 소스가 전부 예전 버젼이라

구현하는데 좀 애를 먹긴 했지만, 완성하고 나니 제법 쓸만하다.

물론 귀찮아서 아주 기본적으로 딱 필요한 것만 구현했다.

피드백이 있다면....시간내서 기능을 보강할 수도....


사용은 여기로~~
구글 캘린더 D-day 등록하기(http://www.incree.com/gCalendar/)

사용자 삽입 이미지
완전 허접한 화면 스샷

Posted by incree

2014/07/07 14:49 2014/07/07 14:49
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/336

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

[PHP] source file encode, decode



Posted by incree

2014/05/07 06:44 2014/05/07 06:44
, , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/328

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

[PHP] Apache, MySQL, PHP install

1. mysql 설치
http://forums.mysql.com/read.php?11,153632,153632

yum install mysql mysql-server mysql-devel
chgrp -R mysql /var/lib/mysql
chmod -R 770 /var/lib/mysql

2. apache 설치
http://httpd.apache.org/download.cgi
http://apr.apache.org/download.cgi
http://package/forge.net/projects/pcre/files/pcre/
http://www.openssl.org/package/

cd /package/
tar -zxvf httpd-2.4.6.tar.gz
tar -zxvf apr-1.4.8.tar.gz
tar -zxvf apr-util-1.5.2.tar.gz
tar -zxvf pcre-8.33.tar.gz
tar -zxvf openssl-1.0.1e.tar.gz

cd /package/
mv apr-1.4.8 /package/httpd-2.4.6/srclib/apr
mv apr-util-1.5.2 /package/httpd-2.4.6/srclib/apr-util

cd /package/pcre-8.33
./configure
make
make install

cd /package/openssl-1.0.1e
./config
make
make install


cd /package/httpd-2.4.6
./configure --enable-module=all --enable-so --prefix=/usr/local/apache2 --enable-modules=ssl --enable-ssl --with-ssl=/usr/local/ssl   --enable-module=most
make
make install


3. php 설치
http://www.php.net/downloads.php
http://www.xmlsoft.org/downloads.html
http://sourceforge.net/projects/mcrypt/
http://code.google.com/p/quirkysoft/downloads/detail?name=jpegsrc.v6b.tar.gz&can=2&q=
http://curl.haxx.se/download.html

cd /package/
tar -zxvf php-5.5.5.tar.gz
tar -zxvf libmcrypt-2.5.8.tar.gz
tar -zxvf libxml2-2.9.1.tar.gz
tar -zxvf jpegsrc.v6b.tar.gz
tar -zxvf curl-7.33.0.tar.gz

cd /package/
yum install freetype-devel
yum install libjpeg-turbo-devel
yum install libpng-devel

cd /package/libmcrypt-2.5.8
./configure
make
make install

cd /package/libxml2-2.9.1
./configure
make
make install

cd /package/jpeg-6b
mkdir /usr/local/man/man1
./configure
make
make install

cd /package/curl-7.33.0
./configure
make
make install


cd /package/php-5.5.5
./configure --prefix=/usr/local/php5 --with-openssl --with-apxs2=/usr/local/apache2/bin/apxs --enable-ftp --disable-debug --with-zlib --with-jpeg-dir=/usr/local --with-gd --enable-mbstring --enable-sockets --with-mcrypt=/usr/local --with-curl --with-mysql --enable-pdo --with-pdo-mysql --enable-zip --enable-gd-native-ttf --with-freetype-dir=/usr/include/freetype2 --enable-exif
make
make install

4. apache conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 주석제거
LoadModule ssl_module modules/mod_ssl.so 주석제거


5. start
service mysqld start
/usr/local/apache2/bin/apachectl start

Posted by incree

2013/10/26 15:19 2013/10/26 15:19
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/286

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

[PHP] 정규표현식

escape 해줘야 될 문자
\ ^ . $ | ( ) [ ] * + ? { } ,


Special Character Definitions
\ Quote the next metacharacter
^ Match the beginning of the line
. Match any character (except newline)
$ Match the end of the line (or before newline at the end)
| Alternation
() Grouping
[] Character class
* Match 0 or more times
+ Match 1 or more times
? Match 1 or 0 times
{n} Match exactly n times
{n,} Match at least n times
{n,m} Match at least n but not more than m times
More Special Character Stuff
\t tab (HT, TAB)
\n newline (LF, NL)
\r return (CR)
\f form feed (FF)
\a alarm (bell) (BEL)
\e escape (think troff) (ESC)
\033 octal char (think of a PDP-11)
\x1B hex char
\c[ control char
\l lowercase next char (think vi)
\u uppercase next char (think vi)
\L lowercase till \E (think vi)
\U uppercase till \E (think vi)
\E end case modification (think vi)
\Q quote (disable) pattern metacharacters till \E
Even More Special Characters
\w Match a "word" character (alphanumeric plus "_")
\W Match a non-word character
\s Match a whitespace character
\S Match a non-whitespace character
\d Match a digit character
\D Match a non-digit character
\b Match a word boundary
\B Match a non-(word boundary)
\A Match only at beginning of string
\Z Match only at end of string, or before newline at the end
\z Match only at end of string
\G Match only where previous m//g left off (works only with /g)

Posted by incree

2013/04/08 11:23 2013/04/08 11:23
,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/214

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

아이폰에서 세로로 찍은 사진의 등록정보를 보면

가로와 세로가 바껴있다.

이 사진을 서버에 올리면 가로 이미지로 인식을 하게 되는데,

이건 사진 exif 들어있는 Orientation 정보를 확인해서 바로 잡아주면 된다.

Orientation은 1 ~ 8까지 총 8가지가 있고, 수정해 줘야 되는 경우는

3, 6, 8 세가지다
. 1 빼고는 모두 수정해 줘야 한다

http://www.impulseadventure.com/photo/exif-orientation.html  참조

php 예제
$exifData = exif_read_data($upfile);
        if($exifData['Orientation'] == 6) {
            // 시계방향으로 90도 돌려줘야 정상
            $degree = 90;
        }
        else if($exifData['Orientation'] == 8) {
            // 반시계방향으로 90도 돌려줘야 정상
            $degree = -90;
           
        }
        else if($exifData['Orientation'] == 3) {
            $degree = 180;
        }
       
        if($degree) {
            if($tmp_file[2] == 1) {
                $source = imagecreatefromgif($upfile);
                $source = imagerotate ($source , $degree, 0);
                imagegif($source, $originalPath . '/' . $upfile);
            }
            else if($tmp_file[2] == 2) {
                $source = imagecreatefromjpeg($upfile);
                $source = imagerotate ($source , $degree, 0);
                imagejpeg($source, $originalPath . '/' . $upfile);
            }
            else if($tmp_file[2] == 3) {
                $source = imagecreatefrompng($upfile);
                $source = imagerotate ($source , $degree, 0);
                imagepng($source, $originalPath . '/' . $upfile);
            }

            imagedestroy($source);
        }

추가 :  1 빼고는 모두 수정해야 된다
http://techbirds.in/image-resizing-with-php-exif-orientation/
여기 더 정확한 정보 및 함수가 있다

Image resizing with php exif orientation

I have been working on a project recently that has incorporated an upload mechanic for images uploaded to our website. The images are then resiged and flipped into a different dimension when i used in  ipad. To solve this problem i found EXIF.

EXIF is a way of reading an image and returning the information determining the exact orientation of an image, what device the image was taken on etc..

The below code is the function I used in order to create my images to fit into a particular dimension.

 

The switch statement is used to look at a particular EXIF orientation and perform the required processing before the image is written to its destination. To flip the image we just use the function below.

Now all we need to do is call the function by passing a dimension that we want the image to fit into, the source and destination and also the file type of the source image.

Posted by incree

2012/10/23 16:03 2012/10/23 16:03
, , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/168

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

1. publish_stream 권한이 있어야 된다.
https://www.facebook.com/dialog/oauth?client_id=380401378675334&redirect_uri=http%3A%2F%2Fwww.increeworks.com%2Ffacebook%2Ftest%2F&state=4b900a018c2f3b19cd709bf6c01a74ed&scope=email,publish_actions,publish_stream

2. 글을쓰는 사람 & 타임라인 주인 모두 권한이 있어야 된다.

3. 둘이 친구여야 된다.


FB.api('/uid/feed', 'post', { message: message }, function(response) {
                   if (!response || response.error) {
}
else {
}
               });

FB.api('/100003323563127/feed', 'post', { message: "Laim Sin님의 응모작에 '좋아요' 를 보내셨습니다. 확인 하러가기!" }, function(response) {
                    console.debug(response);
                });

Posted by incree

2012/06/28 01:50 2012/06/28 01:50
, , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/137

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다