프로젝트진행 방법으로 칸보드 이용하기

개인 프로젝트를 하면서 트레이닝용으로 칸보드를 이용해보고 있다.

todo, 일정관리용으로 진행해보고 있음.

PM, 비즈니스분석, 개발자 입장으로 칸반을 본다면 어떤 얘기들이 나올까? 

결과는 다음에......

 

php 7.2... 이상 버전에서 아래 url로 kanboard 다운로드하여 웹 install진행

 

 

https://kanboard.org/

 

Kanban Project Management Software - Kanboard

Kanboard has a very simple query language that offers the flexibility to find tasks in no time. Dynamically apply custom filters on the board to find what you need. Search by assignees, description, categories, due date, etc.

kanboard.org

 

'프로그래밍 > PHP' 카테고리의 다른 글

WAMP 설치  (0) 2020.05.26
Open Api Request / Response Schema구성&실행  (0) 2018.08.19
curl kakao open api 도서검색  (0) 2018.08.10
curl kakao open api 이미지검색하기  (0) 2018.08.06
curl kakao open api사용하기  (0) 2018.08.05

WAMP란 마이크로소프트 윈도우 환경에서 PHP, MySQL, Apache를 사용할 수 있는 환경을 만들어주는 소프트웨어이다.

installer : https://bitnami.com/stack/wamp/installer

 

Install WAMP, Download WAMP

show MD5 259106612657e5fa49e8254990dff21a SHA1 6264bc05d86181e9d95a1ae4993a781cbb6fa5d3 SHA256 c8f4279d106ddae7424977cb045a81a08893d6f04e723c0451d92368aff9f3db

bitnami.com

다운로드 설치후 

Bitnami Wamp Stack 이란 원도우폼 형식의 operation 화면을 볼수 있다.

여기서 apache web server, mysql database를 시작/종료 및 설정파일 수정할 수 있다.

최신버전으로 WAMP설치시 PHP는 7.2.~~ 버전

 

Open Api 를 이용해서 Request & Response 된 데이타를 

테이블에 저장하도록 한다.

Schema구성


>kakao open api 분석

>스키마구성



>mysql table 스크립트

-- <table SCHEMA> START-----------------------

CREATE TABLE `requestdata` (
`SQSeq` bigint(20) NOT NULL AUTO_INCREMENT,
`SearchKind` varchar(20) NOT NULL DEFAULT 'WEB',
`Query` varchar(100) NOT NULL,
`SearchDate` date NOT NULL,
PRIMARY KEY (`SQSeq`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `responsedata` (
`SQSeq` bigint(20) NOT NULL,
`SubSeq` bigint(20) NOT NULL,
`Title` varchar(300) NOT NULL DEFAULT 'ETC',
`Contents` varchar(4000) DEFAULT NULL,
`Url` varchar(1000) DEFAULT NULL,
`Thumbnail_url` varchar(1000) DEFAULT NULL,
`Authors` varchar(1000) DEFAULT NULL,
`Price` int(11) DEFAULT NULL,
`Width` int(11) DEFAULT NULL,
`Height` int(11) DEFAULT NULL,
`Category` int(11) DEFAULT NULL,
`Datetime` date DEFAULT NULL,
`Etc` varchar(200) DEFAULT NULL,
PRIMARY KEY (`SQSeq`,`SubSeq`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- <table SCHEMA> END-----------------------



>스토어 프로시저로 등록/삭제

-- [START]요청 REQUESTDATA INSERT----------------

DELIMITER //

DROP PROCEDURE IF EXISTS SP_REQUESTDATA_INSERT //

CREATE PROCEDURE SP_REQUESTDATA_INSERT
(
IN InSearchKind varchar(20),
IN InQuery varchar(100),
OUT NewSQSeq bigint(20)
)

BEGIN
INSERT INTO requestdata
(
SearchKind
,Query
,SearchDate
)
VALUES
(
InSearchKind,
InQuery,
sysdate()
);

-- Auto Increment 값 조회
SELECT LAST_INSERT_ID()
INTO NewSQSeq; -- OUT 파라메터 담기

END//

DELIMITER ;
-- [END]요청 REQUESTDATA INSERT------------------


-- [START] 요청/결과 삭제 SP_REQUESTDATA_DELETE----
DELIMITER //

DROP PROCEDURE IF EXISTS SP_REQUESTDATA_DELETE //

CREATE PROCEDURE SP_REQUESTDATA_DELETE
(
IN InSQSeq bigint(20)
)

BEGIN

declare iResult bigint(20);
set iResult = 0;

DELETE FROM requestdata
WHERE SQSeq = InSQSeq;

DELETE FROM responsedata
WHERE SQSeq = InSQSeq;

END//

DELIMITER ;
-- [END]요청/결과 삭제 SP_REQUESTDATA_DELETE-------


-- [START]결과 SP_RESPONSEDATA_INSERT------------
DELIMITER //

DROP PROCEDURE IF EXISTS SP_RESPONSEDATA_INSERT //

CREATE PROCEDURE SP_RESPONSEDATA_INSERT
(
IN InSQSeq   bigint(20)
,IN InTitle   varchar(300)
,IN InContents    varchar(4000)
,IN InUrl varchar(1000)
,IN InThumbnail_url   varchar(1000)
,IN InAuthors varchar(1000)
,IN InPrice   int(11)
,IN InWidth   int(11)
,IN InHeight  int(11)
,IN InCategory    int(11)
,IN InDatetime    varchar(100)
,IN InEtc varchar(200)
,OUT OutResult bigint(20)
)

BEGIN

declare NewSubSeq bigint(20) default(0);

SELECT
IFNULL(MAX(SUBSEQ),0) + 1 into NewSubSeq
FROM RESPONSEDATA
WHERE SQSeq = InSQSeq;
SET OutResult = NewSubSeq;

INSERT INTO responsedata
(
SQSeq 
,SubSeq   
,Title    
,Contents 
,Url  
,Thumbnail_url    
,Authors  
,Price    
,Width    
,Height   
,Category 
,Datetime 
,Etc  
)
values
(
InSQSeq   
,NewSubSeq
,InTitle  
,InContents   
,InUrl    
,InThumbnail_url  
,InAuthors    
,InPrice  
,InWidth  
,InHeight 
,InCategory   
,date(InDatetime) 
,InEtc    
);


END//

DELIMITER ;
-- [END]결과 SP_RESPONSEDATA_INSERT--------------



>프로시저실행해서 등록하기


call SP_REQUESTDATA_INSERT('Book','삶의철학산책',@NewSQSeq);
select @NewSQSeq;

call SP_RESPONSEDATA_INSERT(1,'드 보통의 삶의 철학산책','복잡하고 힘겨운 삶을 유쾌하게 만드는 삶의 거장들이 알려주는 행복의 철학. 인기없음, 가난, 좌절, 부당함, 실연, 고통에 대한 허브 치료와도 같은 유쾌한 위안을 한권의 책으로 엮었다.','http://book.daum.net/detail/book.do?bookid=KOR9788984980624','http://t1.daumcdn.net/thumb/R72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788984980624%3Fmoddttm=20160223080929','알랭 드 보통',17000,0,0,5,'2002-04-25T00:00:00.000+09:00','8984980625 9788984980624',@OutResult);

select @OutResult;

call SP_RESPONSEDATA_INSERT(1,'고대 로마+한강역사문화탐사+삶의철학산책','&#39;고대 문명 시리즈&#39; 두 번째 권으로 고대 로마를 찾아간다. 로마의 사회, 정치, 문화, 예술의 다양한 면모를 가능한 명료하고 직접적으로 기술하여 로마를 직접 체험하는 느낌을 가질 수...','http://book.daum.net/detail/book.do?bookid=BOK00000039062LI','http://t1.daumcdn.net/thumb/P72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FBOK00000039062LI%3Fmoddttm=20150609170927','안나 마리아 리베라티',95000,0,0,0,'2003-07-20T00:00:00.000+09:00','0004953282 0100004953286',@OutResult);

response된data.txt




'프로그래밍 > PHP' 카테고리의 다른 글

kanboard로 프로젝트 관리하기  (0) 2020.05.26
WAMP 설치  (0) 2020.05.26
curl kakao open api 도서검색  (0) 2018.08.10
curl kakao open api 이미지검색하기  (0) 2018.08.06
curl kakao open api사용하기  (0) 2018.08.05

다움API 3번째 도서검색.

이미지,블로그,웹,도서,푸시알림까지 되면  

실제 필요한 물건을 만들수 있지 않을까..... 생각아 좀더 나거라~


오픈API 사용량에 관계없이 무제한으로 쓸수있는지 궁금해지네.... 

스크래핑 하지 않고 이렇게 API호출해서 받으니 쉽고 빠르고 좋다.


testpage 도서검색) http://doitforyou.co.kr/test/curl_daum_search_book.php

testpage 웹검색) http://doitforyou.co.kr/test/curl_daum_search_web.php

testpage 이미지검색) http://doitforyou.co.kr/test/curl_daum_search_image.php


<?php
function request($path, $query, $content_type = 'json')
{
$api_server = 'https://dapi.kakao.com';
$headers = array('Authorization: KakaoAK {APIKEY} ');
$opts = array(
CURLOPT_URL => $api_server . $path . '.' . $content_type . '?' . $query,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSLVERSION => 1,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers
);

$curl_session = curl_init();
curl_setopt_array($curl_session, $opts);
$return_data = curl_exec($curl_session);

if (curl_errno($curl_session)) {
throw new Exception(curl_error($curl_session));
} else {
//print_r(curl_getinfo($curl_session));
curl_close($curl_session);
return $return_data;
}
}


$path = '/v2/search/book';
$content_type = 'json'; // json or xml
$params = http_build_query(array(
'page' => 1,
'size' => 50,
'query' => 'PHP'
,
'category' => 33
));

$res = request($path, $params, $content_type);

//header('Content-Type: application/' . $content_type . '; charset=utf-8');
// echo $res;
//echo $res;
//var_dump($res);
$dt = json_decode($res); //json data type => php object로 변환
//json_encode : php object/array => json data type으로 변환
// var_dump( $dt);

$tCount = $dt->meta->total_count;
$iCnt = count($dt->documents);
echo "<br>";
echo "tCnt_totalcnt:".$tCount . "/" ."iCnt_documents:".$iCnt;
echo "<br>";

for ($i=0; $i < $iCnt; $i++)
{
echo "<p>";

echo "title:".$dt->documents[$i]->title."<br>";
echo "contents:".$dt->documents[$i]->contents."<br>";
echo "url:".$dt->documents[$i]->url."<br>";
echo "isbn:".$dt->documents[$i]->isbn."<br>";

$iCntAuthor = 0;
$iCntAuthor = count($dt->documents[$i]->authors);

for($z=0; $z < $iCntAuthor; $z++)
{
if($z==0){
echo "authors:";
}
echo $dt->documents[$i]->authors[$z];
if($z <> ($iCntAuthor-1) )
{
echo ",";
};
}

echo "</p>";

}
?>


'프로그래밍 > PHP' 카테고리의 다른 글

WAMP 설치  (0) 2020.05.26
Open Api Request / Response Schema구성&실행  (0) 2018.08.19
curl kakao open api 이미지검색하기  (0) 2018.08.06
curl kakao open api사용하기  (0) 2018.08.05
php CURL 사용하기  (0) 2018.07.31

curl로 받은 데이터로 html 형식으로 표현할때 아래에서

header('Content-Type: application/' . $content_type . '; charset=utf-8');

주석처리 해야한다.


아래코드는 

keyword로 검색한 후 결과값으로 이미지를 화면에 보여준다.

thumbnail_url 로 img src에 세팅하면....

속도가 아주~ 빠르다. 내가 검색한 데이타의 image가 이렇게 빠르게 보여지는게 놀랍다고 느껴진다.


json object 개수를 셀때 count를 이용해서 확인하고 

for문으로 image 를 그리고 있다. count($dt->documents)




<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title> image 검색하기 </title>
</head>
<body>

<?php
function request($path, $query, $content_type = 'json')
{
$api_server = 'https://dapi.kakao.com';
$headers = array('Authorization: KakaoAK {KAKAORESTFULAPIKEY}');
$opts = array(
CURLOPT_URL => $api_server . $path . '.' . $content_type . '?' . $query,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSLVERSION => 1,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers
);

$curl_session = curl_init();
curl_setopt_array($curl_session, $opts);
$return_data = curl_exec($curl_session);

if (curl_errno($curl_session)) {
throw new Exception(curl_error($curl_session));
} else {
//print_r(curl_getinfo($curl_session));
curl_close($curl_session);
return $return_data;
}
}


$path = '/v2/search/image';
$content_type = 'json'; // json or xml
$params = http_build_query(array(
'page' => 1, //조회건수가 많으면 page수 변경하며 추가조회가능
'size' => 20, //한 페이지에 조회되는 데이터 건수
'query' => 'doitforyou.co.kr'
));

$res = request($path, $params, $content_type);

// header('Content-Type: application/' . $content_type . '; charset=utf-8');
$dt = json_decode($res); //json data type => php object로 변환
//json_encode : php object/array => json data type으로 변환

//var_dump($dt);

$tCount = $dt->meta->total_count;
$iCnt = count($dt->documents);
//echo "\r\n";
//echo "tCount:".$tCount;
//echo "icnt:". count($dt->documents);
for ($i=0; $i < $iCnt; $i++)
{
echo "<img src='".$dt->documents[$i]->thumbnail_url."'/>";
if((($i+1)%10 == 0 ) && ($i != 0)){
echo "<br>";
};
//echo "\r\n";
// echo $dt->documents[$i]->doc_url;
//echo "\r\n";
}
?>

</body>
</html>



'프로그래밍 > PHP' 카테고리의 다른 글

Open Api Request / Response Schema구성&실행  (0) 2018.08.19
curl kakao open api 도서검색  (0) 2018.08.10
curl kakao open api사용하기  (0) 2018.08.05
php CURL 사용하기  (0) 2018.07.31
Javascript로 Facebook로그인  (0) 2018.05.26

php curl을 이용하여 카카오 오픈api 검색엔진 사용하기


아래 예제는 다움포탈에서 doitforyou.co.kr로 검색했을경우 블로그 검색데이타(json type)를 가져와서

블로그title, 블로그url를 찍어보는 예제이다.


API는 아래 $path 에 따라서 검색되는 데이타가 달라진다.


$path = '/v2/search/blog';  --블로그

$path = '/v2/search/web';   --웹

$path = '/v2/local/search/address'; --주소


이 API를 이용해서 아이디어가 떠오른다면 APP또는 다른 서비스로 발전할 수 있을것 같다.


출처) https://devtalk.kakao.com .

 json 파싱부분 수정하더 정확한 url잊음

<?php
function request($path, $query, $content_type = 'json')
{
$api_server = 'https://dapi.kakao.com';
$headers = array('Authorization: KakaoAK {APIKEYAPIKEYAPIKEY} ');
$opts = array(
CURLOPT_URL => $api_server . $path . '.' . $content_type . '?' . $query,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSLVERSION => 1,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers
);

$curl_session = curl_init();
curl_setopt_array($curl_session, $opts);
$return_data = curl_exec($curl_session);

if (curl_errno($curl_session)) {
throw new Exception(curl_error($curl_session));
} else {
curl_close($curl_session);
return $return_data;
}
}

$path = '/v2/search/blog';
$content_type = 'json'; // json or xml
$params = http_build_query(array(
'page' => 1,
'size' => 10,
'query' => 'doitforyou.co.kr'
));

$res = request($path, $params, $content_type);

header('Content-Type: application/' . $content_type . '; charset=utf-8');
echo $res;
//var_dump($res);
$dt = json_decode($res); //json data type => php object로 변환
//json_encode : php object/array => json data type으로 변환

$tCount = $dt->meta->total_count;
echo "\r\n";
echo "tCount:".$tCount;
echo "\r\n";

for ($i=0; $i < $tCount; $i++)
{
echo $dt->documents[$i]->title;
echo "\r\n";
echo $dt->documents[$i]->url;
echo "\r\n";
}
?>


'프로그래밍 > PHP' 카테고리의 다른 글

curl kakao open api 도서검색  (0) 2018.08.10
curl kakao open api 이미지검색하기  (0) 2018.08.06
php CURL 사용하기  (0) 2018.07.31
Javascript로 Facebook로그인  (0) 2018.05.26
php 패스워드 암호화 bcript  (0) 2018.05.02

Windows에서 php CURL 사용하기

오픈API를 사용하기 위해서 php에서 CURL이 동작하도록 설정한다..

 

Step1) C:\windows\php.ini 의 파일 수정

extension=php_curl.dll  사용하도록 수정

Step2) C:\APMorg\php 폴더의

libeay32.dll, ssleay32.dll  C:\Windows\System32 폴더로 복사

Step3) 윈도우 서비스의 아파치를 재시작 한다.

       아파치 환경에서 php를 구동하기 위해서 php.ini정보를 읽어 서비스 하기 때문에 재 기동 해야함.





phpinfo.php를 통해 반영된것 확인 가능하다.

curl

cURL supportenabled
cURL Information7.54.1


또는 아래 코드로도 확인가능하다.


<?php

if(extension_loaded("curl")){

echo "cUrl extension is loaded";

}else{

 echo "cUrl extension is not available";

}

?>


로컬 개발PC : 윈도우8 apm세팅

웹호스팅 중인 : doitforyou.co.kr 의 curl정보 확인. 

curl

cURL supportenabled
cURL Information7.29.0
Age3

 

'프로그래밍 > PHP' 카테고리의 다른 글

curl kakao open api 이미지검색하기  (0) 2018.08.06
curl kakao open api사용하기  (0) 2018.08.05
Javascript로 Facebook로그인  (0) 2018.05.26
php 패스워드 암호화 bcript  (0) 2018.05.02
unlink(=delete) 메소드 이용하기  (0) 2018.04.22

자바스크립트로 fb API연동하여 로그인하기



그래프 API 탐색기 이용하기

url : https://developers.facebook.com/tools-and-support 



appid 에서 가져올 권한 선택추가 선택


default : id, name 

추가로 가져올 정보 : email






위 api 탐색기로 선 테스트 후 

아래처럼 javascript로 코드작성.

참고url : https://developers.facebook.com/docs/facebook-login/web#logindialog



<<html code>>


<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Page Title</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<!--
reference to : https://developers.facebook.com/tools-and-support
-->
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '2028791704043595',
     cookie : true, // enable cookies to allow the server to access the session
xfbml : true, // parse social plugins on this page
version : 'v3.0' // use graph api version 2.8
});
    FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
};

(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

   /*
     콜백에 제공되는 response 개체에는 다음과 같은 여러 필드가 포함되어 있습니다.
    {
        status: 'connected',
        authResponse: {
            accessToken: '...',
            expiresIn:'...',
            signedRequest:'...',
            userID:'...'
        }
    }코드 복사
    status는 앱 사용자의 로그인 상태를 지정합니다. 상태는 다음 중 하나일 수 있습니다.
    connected - 사용자가 Facebook에 로그인하고 앱에 로그인했습니다.
    not_authorized - 사용자가 Facebook에는 로그인했지만 앱에는 로그인하지 않았습니다.
    unknown - 사용자가 Facebook에 로그인하지 않았으므로 사용자가 앱에 로그인했거나 FB.logout()이 호출되었는지 알 수 없어,
Facebook에 연결할 수 없습니다.
    connected 상태인 경우 authResponse가 포함되며 다음과 같이 구성되어 있습니다.
    accessToken - 앱 사용자의 액세스 토큰이 포함되어 있습니다.
    expiresIn - 토큰이 만료되어 갱신해야 하는 UNIX 시간을 표시합니다.
    signedRequest - 앱 사용자에 대한 정보를 포함하는 서명된 매개변수입니다.
    userID - 앱 사용자의 ID입니다.
    앱에서 앱 사용자의 로그인 상태를 알게 되면 다음 중 하나를 수행할 수 있습니다.
    사용자가 Facebook과 앱에 로그인한 경우 앱의 로그인된 환경으로 리디렉션됩니다.
    사용자가 앱에 로그인하지 않았거나 Facebook에 로그인하지 않은 경우 FB.login()을 사용하여 로그인 대화 상자에 메시지를
표시하거나 로그인 버튼을 표시합니다.
        */
   function statusChangeCallback(response) {
    
      console.log('statusChangeCallback');

      if (response.status === 'connected') {
        console.log(response.authResponse.accessToken);
        // Logged into your app and Facebook.
        testAPI();
      } else if (response.status === 'not_authorized') {
        document.getElementById('status').innerHTML = 'Please log ' + 'into this app.';
      } else {
        document.getElementById('status').innerHTML = 'Please log ' + 'into Facebook.';
      }

  }

function checkLoginState() {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
}
  
function testAPI() {
  console.log('Welcome! Fetching your information.... ');
  FB.api(
    '/me',
    {"fields":"id,name,email"},
    function(response) {
       // Insert your code here
      console.log('Successful login for: ' + response.name);

      document.getElementById('status').innerHTML = JSON.stringify(response);
    }
  );
}

function fblogout(){

  FB.logout(function(response) {
    window.location.reload();
  });
}

</script>

<fb:login-button
scope="public_profile,email"
onlogin="checkLoginState();">
</fb:login-button>

<input type="button" onclick="javascript:fblogout();" value ="로그아웃" />
<div id="status"/>

</body>
</html>


로그인페이지>>


로그인후 fb의 개인정보 받아 display



로그인은 잘 되나, 로그아웃은 아래와 같은 에러내용으로 console log를 찍고 로그아웃이 안되고 있음. 

유투브 동영상등 찾아보고 진행했지만 해결못함.


Refused to display 'https://www.facebook.com/home.php' in a frame because it set 'X-Frame-Options' to 'deny'.


'프로그래밍 > PHP' 카테고리의 다른 글

curl kakao open api사용하기  (0) 2018.08.05
php CURL 사용하기  (0) 2018.07.31
php 패스워드 암호화 bcript  (0) 2018.05.02
unlink(=delete) 메소드 이용하기  (0) 2018.04.22
directory entry 읽어 파일리스트업  (0) 2018.04.20

password 암호화 알고리즘 bcrypt


php script : 

아래 옵셥의 cost 값은 해싱의 속도를 나타낸다.

default : 10이며 값이 커질수록 해싱의 속도가 느려진다. 이는 오토 크래킹으로 부터 보안성을 높여 줄 수 있다.


<?php

/*
if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH)
echo "CRYPT_BLOWFISH is enabled!";
else
echo "CRYPT_BLOWFISH is not available";

*/
#첫번째 매개변수 - $password - 해시할 값(비밀번호)
#두번째 매개변수 - PASSWORD_BCRYPT - 해시에 사용될 알고리즘(PASSWORD_DEFAULT, PASSWORD_BCRYPT, ...)

$password ="tester";
$options15 = [ 'cost' => 15 ] ;
$options12 = [ 'cost' => 12 ] ;

$hashedValue = password_hash($password, PASSWORD_BCRYPT);

$hashedValueWithO12 = password_hash($password, PASSWORD_BCRYPT, $options12);
$hashedValueWithO15 = password_hash($password, PASSWORD_BCRYPT, $options15);

echo "1hashedPassword:".$hashedValue;
echo "<br>2hashedPassword:".$hashedValueWithO12;
echo "<br>3hashedPassword:".$hashedValueWithO15;

/*
if(password_verify($password, $hashedValue))
echo "<br>1true";
else
echo "<br>1false";
if(password_verify($password, $hashedValueWithO12))
echo "<br>2true";
else
echo "<br>2false<br>";

if(password_verify($password, $hashedValueWithO15))
echo "<br>3true";
else
echo "<br>3false<br>";
*/
echo "<br>1.hashedValue:";
print_r( password_get_info( $hashedValue ));

echo "<br>2.hashedValue:";
print_r( password_get_info( $hashedValueWithO12 ));

echo "<br>3.hashedValue:";
print_r( password_get_info( $hashedValueWithO15 ));

?>




cost => 10



cost => 12



cost => 15




reference to : http://dolgo.net/PHP/lecture/18


'프로그래밍 > PHP' 카테고리의 다른 글

php CURL 사용하기  (0) 2018.07.31
Javascript로 Facebook로그인  (0) 2018.05.26
unlink(=delete) 메소드 이용하기  (0) 2018.04.22
directory entry 읽어 파일리스트업  (0) 2018.04.20
파일 업로드(move_uploaded_file)  (3) 2018.04.14

업로드된 파일을 삭제하고 싶을 때 , unlink 메소드를 사용한다.


bool unlink ( string $filename [, resource $context ] )


인수

filename : Path to the file.

반환값

성공 시 TRUE를, 실패 시 FALSE를 반환합니다.


 

php초보자로 이벤트(클릭)를 발생시키고 파일을 삭제하는 것도 쉽지 않네.

 

php에서 파일삭제 메소드를 사용하기 위해서 아래 순서대로 호출.

크게 나쁘진 않은 것 같다. 보안관련 이슈는 차후에 학습하면서 추가하면 되겠다.

 

1)    Html a tag 사용한다.

2)    A tag에 삭제파라미터 : 파일명 를 넣고 해당 페이지를 호출

3)    Php get파라미터로 대상을 받아 파일삭제 메소드 호출


>> entries.PNG 삭제 버튼을 클릭함



>>bootstrap css 적용위한 css파일 첨부

bootstrap.min.css

light-bootstrap-dashboard.css



php source : 


<?php
$dir = $_SERVER['DOCUMENT_ROOT']."/admin1/test/img/";


if ( isset ( $_GET['delete']) ) {
echo $_GET['delete'];
echo "<br>";

if ( unlink ( $dir. $_GET['delete'] ) ) {

header("Location: ./fileupload0.php");
exit;
};
}

?>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>fileupload</title>
<!-- Fonts and icons -->
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700,200" rel="stylesheet" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css" />
<!-- CSS Files -->
<link href="../../admin3/assets/css/bootstrap.min.css" rel="stylesheet" />
<link href="../../admin3/assets/css/light-bootstrap-dashboard.css?v=2.0.1" rel="stylesheet" />

</head>
<body>
<div class="wrapper">
<div class="content">
<div class="container-fluid">
<div class="row">
<div class="col-md-6">
<div class="card card-tasks">
<div class="card-header ">
<h4 class="card-title">Uploaded File's info</h4>
<p class="card-category">files이 있는 directory의 모든 파일을 읽어 리스트업</p>
</div>
<div class="card-body ">
<div class="table-full-width">
<table class="table">
<tbody>
<?php
/**
* Description.
*
* @author: JinMyung <dcan@doitforyou.co.kr>
* @category Filesystem
* @version 1.0
*/

/* files이 있는 directory의 모든 파일을 읽어 리스트업 */
// $dir = $_SERVER['DOCUMENT_ROOT']."/admin1/test/img/";

// 핸들 획득
$handle = opendir($dir);
$files = array();
// 디렉터리에 포함된 파일을 저장한다.
while (false !== ($filename = readdir($handle))) {
if ($filename =="." || $filename =="..") {
continue;
}

// 파일인 경우만 목록에 추가한다.
if (is_file($dir . "/" . $filename)) {
$files[] = $filename;
}
}
// 핸들 해제
closedir($handle);

sort($files);

// 파일명을 출력한다.
foreach ($files as $f) {
//echo $f . "(" . round(filesize($dir . "/" . $f)/1024, 2) . " KB)" ;
$FileFullPathName = "";
$FileFullPathName = $dir . "/" . $f;
echo "<tr>";
echo "<td>".$f . "(" . round(filesize($FileFullPathName)/1024, 2) . " KB)(".date("Y-m-d H:i:s", filemtime($FileFullPathName)) .")</td>";
echo "<td class=\"td-actions text-right\">";
echo " <a href=\"?delete=". $f."\">"."<button type=\"button\" style=\"cursor:hand\" rel=\"tooltip\" title=\"Remove\" class=\"btn btn-danger btn-simple btn-link\">";
echo "<i class=\"fa fa-times\"></i>";
echo "</button></a>";
echo "</td>";
echo "</tr>";

}
?>

</tr>
</tbody>
</table>
</div>
</div>
<div class="card-footer ">
<hr>
<div class="stats">
<i class="now-ui-icons loader_refresh spin"></i>
<?php
echo "refer to : http://blog.devez.net/292 | http://php.net/manual/en/function.readdir.php";
?>
</div>
<form enctype="multipart/form-data" action="fileupload1.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="4000000" />
Send File: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>

</div>
</div>
</div>
</div>
</div>
</div>
</div>

</body>
</html>


'프로그래밍 > PHP' 카테고리의 다른 글

Javascript로 Facebook로그인  (0) 2018.05.26
php 패스워드 암호화 bcript  (0) 2018.05.02
directory entry 읽어 파일리스트업  (0) 2018.04.20
파일 업로드(move_uploaded_file)  (3) 2018.04.14
fileupload 에러메시지 설명  (0) 2018.04.14

+ Recent posts