1개월간 공부한 R에 사용방법 정리.


R에 내장된 데이터

Iris, BOD

 

 

데이터프레임(dataframe)구조 파악하기 => str(iris)

아래는 150개의 관측치(observation)가 있고 5개의 변수가 있다는 정보를 보여준다.

4개의 변수는 number형태이고

1개의 변수는 factor이다.

 

> str(iris)

'data.frame': 150 obs. of  5 variables:

 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...

 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...

 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...

 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...

 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...


데이터 일부확인하기

상위5하위5개 보기

> head(iris)

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species

1          5.1         3.5          1.4         0.2  setosa

2          4.9         3.0          1.4         0.2  setosa

3          4.7         3.2          1.3         0.2  setosa

4          4.6         3.1          1.5         0.2  setosa

5          5.0         3.6          1.4         0.2  setosa

6          5.4         3.9          1.7         0.4  setosa

> tail(iris)

    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species

145          6.7         3.3          5.7         2.5 virginica

146          6.7         3.0          5.2         2.3 virginica

147          6.3         2.5          5.0         1.9 virginica

148          6.5         3.0          5.2         2.0 virginica

149          6.2         3.4          5.4         2.3 virginica

150          5.9         3.0          5.1         1.8 virginica


데이터에 대한 summary로 자료의 특성 파악하기

> summary(iris)

  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width          Species  

 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   setosa    :50  

 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   versicolor:50  

 Median :5.800   Median :3.000   Median :4.350   Median :1.300   virginica :50  

 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199                  

 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800                  

 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500     


  

cbind() 함수를 사용해 두 데이터를 병합한 데이터프레임 생성해보기

먼저 행의 개수가(observation) 일치한 데이터프레임이어야 합니다.

내장 데이터프레임 BOD, iris가공해서 진행

 

> iris2 <- head(iris)


> str(BOD)

'data.frame': 6 obs. of  2 variables:

 $ Time  : num  1 2 3 4 5 7

 $ demand: num  8.3 10.3 19 16 15.6 19.8

 - attr(*, "reference")= chr "A1.4, p. 270"

> str(iris2)

'data.frame': 6 obs. of  5 variables:

 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4

 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9

 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7

 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4

 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1


> iris2BOD <- cbind(iris2, BOD)

> show(iris2BOD)

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species Time demand

1          5.1         3.5          1.4         0.2  setosa    1    8.3

2          4.9         3.0          1.4         0.2  setosa    2   10.3

3          4.7         3.2          1.3         0.2  setosa    3   19.0

4          4.6         3.1          1.5         0.2  setosa    4   16.0

5          5.0         3.6          1.4         0.2  setosa    5   15.6

6          5.4         3.9          1.7         0.4  setosa    7   19.8




# 데이터 정비

#iris2BOD 7개의 변수가 있는 데이터를  5개의 변수로 해서 새데이타프레임 생성

#즉, Sepal.Length, Sepal.Width, Species, Time, demand변수를 가진 iris2BOD2 데이터프레임생성하기


> iris2BOD2 <- iris2BOD[,c("Sepal.Length", "Sepal.Width", "Species", "Time", "demand")]

> show(iris2BOD2)

  Sepal.Length Sepal.Width Species Time demand

1          5.1         3.5  setosa    1    8.3

2          4.9         3.0  setosa    2   10.3

3          4.7         3.2  setosa    3   19.0

4          4.6         3.1  setosa    4   16.0

5          5.0         3.6  setosa    5   15.6

6          5.4         3.9  setosa    7   19.8




패키지 사용시

> library(ggplot2)

로 라이브러리에 추가하고 진행.




'DATA분석' 카테고리의 다른 글

데이터 분석을 위한 R(1)  (0) 2018.07.04

스크린스크래핑

WebBrowser이용해서 website에 렌더링된 html의 특정값을 추출한다.

예를 들어 특정 사이트 모 카테고리에 있는 내용을 모두 가져와서 데이터화하고 그것을 분석하고 싶을 때 스크래핑을 사용하면 편리하다.

 

아래 code

 

특정 카테고리의의 글list를 통해 key, title을 추출하고

Key를 이용해 본문내용의 text를 가져와서 db화 한 내용이다.

글의 pattern등 분석자료로 사용할 목적으로 데이터가 필요하나 해당사이트에서 DB를공개하진 않으니 이렇게 스크랩핑해서 자료화해서 사용하는 것이다.

이렇게 하지 않으면 사이트의 모든 사이트 내용을 클릭~클릭~클릭~ 하겠지.

 

이렇게 프로그램하기 전에 사전에 해당 사이트를 분석하고 맞게 프로그래밍하면 된다.


step1) 카테고리의의 글list를 통해 key, title을 추출 : webSiteContentsList();

 => 추출된 data를 수작업으로 insert스크립트만들어 TMP_HELP 에 insert함.

step2) Key를 이용해 본문내용의 text를 가져와서 db화 한 내용 : webSiteContentsDetail(oBrowser);


<c# code>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using MySql.Data.MySqlClient;

namespace ScrappingWinForms
{
public partial class Form1 : Form
{

int iq = 0;
string contentsKey = "";

string sConnectionString = "Server=localhost;contentsKey=root;Pwd=???;Database=??????";
string sContentsUrl = "http://www.doitforyou.co.kr/sread.html?key="; //fake url임
string sListUrl = "http://www.doitforyou.co.kr/sub.html?&sec=cc&section=culture&page="; //fake url임

String Url = string.Empty;

public Form1()
{
InitializeComponent();

//WebBrowser로 사이트 로딩시 자바스크립트 바인딩안되어 에러나는 경우.
//자바스크립트 오류(dialogbox) 무시하고 진행가능하도록 제어함.
this.webBrowserViewer.ScriptErrorsSuppressed = true;
webBrowserViewer.DocumentTitleChanged += new EventHandler(webBrowserViewer_DocumentTitleChanged);
}
private void btnSearch_Click(object sender, EventArgs e)
{
// surftheWeb();
if (iq < 200)
{
selectContentsKeyfromWebsite();
}
}

#region surftheWeb :WebBrowser에 SitePage 브라우징한다.
private void surftheWeb()
{
Url = txtUrl.Text;
webBrowserViewer.Navigate(Url);
}

private void surftheWeb(String sUrl)
{
webBrowserViewer.Navigate(sUrl);
}

#endregion


#region Select / Update from the WebSite

private void selectContentsKeyfromWebsite()
{
MySqlConnection oConnection = new MySqlConnection(sConnectionString);
oConnection.Open();

try
{
MySqlCommand cmd = oConnection.CreateCommand();
cmd.CommandText = "SELECT HELP_TOPIC_ID FROM TMP_HELP WHERE HELP_TOPIC_ID >= 100 AND DESCRIPTION = '' LIMIT 1";
MySqlDataAdapter aDap = new MySqlDataAdapter(cmd);
DataSet dsData = new DataSet();
aDap.Fill(dsData);
if (contentsKey != dsData.Tables[0].Rows[0][0].ToString())
{
contentsKey = dsData.Tables[0].Rows[0][0].ToString();
String sUrl = String.Empty;
sUrl = sContentsUrl + contentsKey;
surftheWeb(sUrl);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (oConnection.State == ConnectionState.Open)
{
oConnection.Close();
}
}
}
/// <summary>
/// key값으로 contents내용을 업데이트 한다.
/// </summary>
/// <param name="sHelp_topic_id"></param>
/// <param name="sDescription"></param>
private void updateContentonIldaro(String sHelp_topic_id, String sDescription)
{
MySqlConnection oConnection = new MySqlConnection(sConnectionString);
oConnection.Open();

try
{
MySqlCommand cmd = oConnection.CreateCommand();
cmd.CommandText = "UPDATE tmp_help set description = @description where help_topic_id = @help_topic_id";
cmd.Parameters.AddWithValue("@help_topic_id", int.Parse(sHelp_topic_id));
cmd.Parameters.AddWithValue("@description", sDescription);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (oConnection.State == ConnectionState.Open)
{
oConnection.Close();

//key를 다시 조회한다.
btnSearch_Click(null, null);
}
}
}
#endregion

/// <summary>
/// WebBrowser's DocumentCompleted Event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void webBrowserViewer_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser oBrowser = sender as WebBrowser;
//txtSource.Text = StreamConvertEUCKRtoUTF8(oBrowser);

this.txtUrl.Text = oBrowser.Url.AbsoluteUri;

//webSiteContentsList();
webSiteContentsDetail(oBrowser);
}

private void webSiteContentsDetail(WebBrowser oBrowser)
{
iq++; //반복수행위한 카운팅
getWebSiteContentsDetail(oBrowser);
}

/// <summary>
/// 게시판 글list, Paging있음
/// </summary>
private void webSiteContentsList() {

iq++; //paging 숫자

getData();

if (iq < 21)
{
String sUrl = sListUrl + iq.ToString();
surftheWeb(sUrl);
}
}

/// <summary>
/// 1.WebBrowser로 rendering된 html을 TagName으로 HtmlElementCollection에 담는다.
/// 2.HtmlElementCollection => HtmlElement에 담긴 InnerHtml분석한다.
/// 3.HtmlElement[]에 추출하려는 대상을 담는다.
/// </summary>
/// <param name="wb"></param>
/// <param name="tagName"></param>
/// <returns></returns>
private HtmlElement[] GetElementsByTagName(WebBrowser wb, string tagName)
{
var l = new List<HtmlElement>();

var els = wb.Document.GetElementsByTagName(tagName); // all elems with tag
foreach (HtmlElement el in els)
{
if (el.InnerHtml == null)
{
continue;
}

if(el.InnerHtml.StartsWith("<A href=\"read.html"))
{
l.Add(el);
}
}

return l.ToArray();
}


/// <summary>
/// 1.WebBrowser로 rendering된 html을 TagName으로 HtmlElementCollection에 담는다.
/// 2.HtmlElementCollection => HtmlElement에 담긴 요소들중 className을 이용해서 추출하려는 대상을 뽑는다..
/// 3.HtmlElement[]에 추출하려는 대상을 담는다.
/// </summary>
/// <param name="wb"></param>
/// <param name="tagName"></param>
/// <param name="className"></param>
/// <returns></returns>
private HtmlElement[] GetElementsByTagNClassName(WebBrowser wb, string tagName, string className)
{
var l = new List<HtmlElement>();

var els = wb.Document.GetElementsByTagName(tagName); // all elems with tag
foreach (HtmlElement el in els)
{

if (el.GetAttribute("className") == className)
{
l.Add(el);
}
}

return l.ToArray();
}

/// <summary>
/// 글 상세 페이지에서 추출하고자 하는 Text만 가져온다.
/// </summary>
/// <param name="oBrowser"></param>
private void getWebSiteContentsDetail(WebBrowser oBrowser)
{
var arrCollection = GetElementsByTagNClassName(webBrowserViewer, "td", "contentsbody");
for (int i = 0; i < arrCollection.Length; i++)
{
//Console.WriteLine(arrCollection[i].InnerHtml);

String sText = String.Empty;
//sText = arrCollection[i].InnerHtml;
sText = arrCollection[i].OuterText;

if (sText == null)
{
//글 text가 없는 경우가 있음
//case1) 이미지로 대체한 경우 img html tag가 글 대신 있음
sText = arrCollection[i].InnerHtml;
}
if (contentsKey.Equals(oBrowser.Url.AbsoluteUri.Replace(sContentsUrl, "")))
{
updateContentonIldaro(contentsKey, sText);
}
}
}

private void getData() {

// getting day and night temperature
var arrCollection = GetElementsByTagName(webBrowserViewer, "dt");

DataTable dt = new DataTable();

dt.Columns.Add("contentsKey", typeof(int));
dt.Columns.Add("Title", typeof(string));

Console.WriteLine("-- " + iq.ToString() + " --------------");
txtSource.Text = txtSource.Text + "-- " + iq.ToString() + " --------------" + "\r\n";

for (int i = 0; i < arrCollection.Length; i++) {
//Console.WriteLine(arrCollection[i].InnerHtml);

String sText = String.Empty;
sText = arrCollection[i].InnerHtml;
sText = sText.Replace("<A href=\"sread.html?key=", "").Replace("</A>", "").Replace("\"", "");

String[] arrSplit = sText.Split('>');

dt.Rows.Add(arrSplit[0],arrSplit[1]);

Console.WriteLine(arrSplit[0] + ":" + arrSplit[1]);

txtSource.Text = txtSource.Text + arrSplit[0] + ":" + arrSplit[1] + "\r\n";

}

}

#endregion


reference to :  https://www.codeproject.com/Tips/858775/Csharp-Website-HTML-Content-Parsing-or-How-To-Get

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

WebBrowser이용한 스크린스크래핑  (0) 2018.05.09
WebBrowser.DocumentText 한글깨짐  (0) 2018.05.07
using MySqlConnector  (0) 2018.05.07

WebBrowser 객체를 이용해서 web페이지를 볼 때 DocumentText 메소드로 렌더링된 html을 읽어올 때 default utf-8 encoding type이라 이상태에서는 euc-kr의 한글은 깨진다

이 경우 스트림리더를 사용해서 실제 페이지의 encoding type으로 읽어들이면 된다.

 

샘플) WebBrowser.DocumentText 로 소스를 봤을경우.

 

<html>

<head>

<title><��̴ϽƮ ���� �ϴ�></title>

<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />

 

 

StreamReader를 이용해 페이지의 encoding type으로 읽어들인경우

 

<html>

<head>

<title><오늘은 어린이날 입니다></title>

 

<<C# Code>>

 

/// <summary>

        /// WebBrowser's DocumentCompleted Event

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void webBrowserViewer_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

        {

            // ((WebBrowser)sender).Document.Window.Error +=   new HtmlElementErrorEventHandler(Window_Error);

 

            WebBrowser oBrowser = sender as WebBrowser;

 

            txtSource.Text = StreamConvertEUCKRtoUTF8(oBrowser);

                       

        }

 

        /// <summary>

        /// Using WebBrowser web page

        /// 웹페이지 Encoding type EUC-KR 이면 WebBrowser.DocumentText html 렌더링된 text 볼때 한글이 깨진다.

        /// 아래처럼 스트림리더로 EUC-KR type으로 읽어온다.

        /// </summary>

        /// <param name="oBrowser"></param>

        /// <returns></returns>

        private String StreamConvertEUCKRtoUTF8(WebBrowser oBrowser)

        {

            String sResult = String.Empty;

 

            Stream oStream;

            StreamReader oStreamReader;

            oStream = oBrowser.DocumentStream;

            oStreamReader = new StreamReader(oStream, System.Text.Encoding.GetEncoding(oBrowser.Document.Encoding));

            oStream.Position = 0;

            sResult = oStreamReader.ReadToEnd();

 

            return sResult;

        }


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

WebBrowser이용한 스크린스크래핑  (0) 2018.05.09
WebBrowser.DocumentText 한글깨짐  (0) 2018.05.07
using MySqlConnector  (0) 2018.05.07


c#에서 Mariadb를 연결할때 MySqlConnector를 사용한다.

VS에서 NgGet을 이용해서 쉽게 검색하고 설치할 수 있다. 

*NgGet 이놈 참 좋다~


MySqlConnector는 MIT 라이센스 그냥 사용하면 된다.





connector설치한김에 테스트까지 해봐야지요



c#코드


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.IO;

using MySql.Data.MySqlClient;


namespace ScrappingWinForms

{

    public partial class Form1 : Form

    {

        string sConnectionString = "Server=localhost;Uid=root;Pwd=???????;Database=???";


        String Url = string.Empty;


        public Form1()

        {

            InitializeComponent();


            //WebBrowser로 사이트 로딩시 자바스크립트 바인딩안되어 에러나는 경우.

            //자바스크립트 오류(dialogbox) 무시하고 진행가능하도록 제어함. 

            this.webBrowserViewer.ScriptErrorsSuppressed = true;

            webBrowserViewer.DocumentTitleChanged += new EventHandler(webBrowserViewer_DocumentTitleChanged);

        }


        private void btnSearch_Click(object sender, EventArgs e)

        {

            surftheWeb();

        }

        

        private void surftheWeb()

        {

            Url = txtUrl.Text;

            webBrowserViewer.Navigate(Url);

        }


        /// <summary>

        /// WebBrowser's DocumentCompleted Event

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void webBrowserViewer_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

        {

            // ((WebBrowser)sender).Document.Window.Error +=   new HtmlElementErrorEventHandler(Window_Error);


            WebBrowser oBrowser = sender as WebBrowser;


            txtSource.Text = StreamConvertEUCKRtoUTF8(oBrowser);

                        

        }


        /// <summary>

        /// Using WebBrowser web page 

        /// 웹페이지 Encoding type 이 EUC-KR 이면 WebBrowser.DocumentText로 html로 렌더링된 text를 볼때 한글이 깨진다.

        /// 아래처럼 스트림리더로 페이지 EUC-KR type을 읽어들인다.

        /// </summary>

        /// <param name="oBrowser"></param>

        /// <returns></returns>

        private String StreamConvertEUCKRtoUTF8(WebBrowser oBrowser)

        {

            String sResult = String.Empty;


            Stream oStream;

            StreamReader oStreamReader;

            oStream = oBrowser.DocumentStream;

            oStreamReader = new StreamReader(oStream, System.Text.Encoding.GetEncoding(oBrowser.Document.Encoding));

            oStream.Position = 0;

            sResult = oStreamReader.ReadToEnd();


            return sResult;

        }

         

        private void webBrowserViewer_DocumentTitleChanged(object sender, EventArgs e)

        {

            //this.Text = webBrowser1.DocumentTitle.ToString();


            this.groupBox1.Text = webBrowserViewer.DocumentTitle;

        }



        private void loadTestData() {

            MySqlConnection oConnection = new MySqlConnection(sConnectionString);

            oConnection.Open();


            try

            {

                MySqlCommand cmd = oConnection.CreateCommand();

                cmd.CommandText = "SELECT * FROM TMP_help order by help_topic_id desc";

                MySqlDataAdapter aDap = new MySqlDataAdapter(cmd);

                DataSet dsData = new DataSet();

                aDap.Fill(dsData);


                dgViewSample.DataSource = dsData.Tables[0].DefaultView;


            }

            catch (Exception ex)

            {

                throw ex;

            }

            finally {

                if (oConnection.State == ConnectionState.Open)

                {

                    oConnection.Close();

                }

            }

        }

      


        private void btnForTest_Click(object sender, EventArgs e)

        {

            loadTestData();

        }

     

    }

}



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

WebBrowser이용한 스크린스크래핑  (0) 2018.05.09
WebBrowser.DocumentText 한글깨짐  (0) 2018.05.07
using MySqlConnector  (0) 2018.05.07

"오늘은 좀 매울지도 몰라"

 

삽화가 있는 책이 좋다. 심플한 그림에 느낌이 있는 그림들.

요즘 요리에 조금씩 관심도 생기고

내가 좋아하고 싫어하는 것에 대해 생각해보고

주위 사람들을 한번 더 보며 이해하려는 시간을 보내고 있는데

FB “책읽는 당에서 리뷰된 걸 봤다.


전문적이진 않지만 나의 레시피로 참고해야겠다.




'Books' 카테고리의 다른 글

오늘은 좀 매울지도 몰라  (0) 2018.05.06
성/섹슈얼리티/젠더 의미  (0) 2018.04.29

DB를 핸들링하는 server-side 언어, php

반응형웹페이지디자인 : bootstrap

자바스크립트기반 웹어플리케이션 프레임웍 : angularjs

이것 3개 조합해서 웹페이지 만들기.


xmlhttp, ajax, jquery등 다양한 스크립트 형식의 모듈들이 많이 있었지만.

angularjs는 MVC패턴의 자바스크립트 프로그램방식으로 진행된다.

자바스크립트로 진행되지만 스크립트 같지 않은 아주 다양한 기능과 표준화, 개인생각임.. ㅋㅋ

모바일 웹앱만들때 가장 좋은것 같다.


angularjs를 적용한 html 페이지소스.




<html lang="en" ng-app="myApp">
<head>
...
 

        
Full Name: {{firstName + " " + lastName}}

Calc using AngularJs, expression: {{ 5 + 5 }}

{{ y.help_topic_id }} : {{ y.name }}
… /*angularjs 스크립트 적용부분은 웹페이지 맨 하단에 적용*/




angularjs 문법이 궁금하면, https://www.w3schools.com/angular/default.asp

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

파일 업로드(move_uploaded_file)  (0) 2018.04.14
fileupload 에러메시지 설명  (0) 2018.04.14
angularJS 사용하기  (0) 2018.04.01
json 데이타 사용하기  (0) 2018.03.28
Cookie 사용하기  (0) 2018.03.18
Session 사용하기  (0) 2018.03.17


json 데이타 사용하기

refer to : https://www.w3schools.com/js/js_json_php.asp


JSON type 을 이용해서 data 송수신하려 함.
PHP에서 제공하는 함수 json_encode/json_decode 사용
 


아래는 Database를 이용한 예제로 fetch후 data를 json_encode() 하여 화면에 뿌린것이다.



vJsonData1.php
getSomeTopics();

echo "{\"Table\":". json_encode($topics)."}";
?>
TopicData.php
    public function getSomeTopics()
    {
        $query = $this->connection->prepare("SELECT help_topic_id, name FROM TMP_help order by help_topic_id desc  limit 10 ");
        $query->execute();

        //return $query;

        return $query->fetchAll(\PDO::FETCH_ASSOC);
        
    }





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

fileupload 에러메시지 설명  (0) 2018.04.14
angularJS 사용하기  (0) 2018.04.01
json 데이타 사용하기  (0) 2018.03.28
Cookie 사용하기  (0) 2018.03.18
Session 사용하기  (0) 2018.03.17
반응형 웹개발 admin 페이지 step1  (0) 2018.03.04

Session과 Cookies는 같이 적절히 사용하면 사이트 운영에 효율적임.



>>refer to : https://www.w3schools.com/php/php_cookies.asp 

Syntax

setcookie(name, value, expire, path, domain, secure, httponly);

Only the name parameter is required. All other parameters are optional.


domain 파라미터를 이용하면 해당 도메인에서만 쿠키가 적용됨.


sessionstep21.php에 cookie적용하고 sessionstep2.php open시 cookie를 화면으로 확인
sessionstep21.php 코드보기


";
var_dump($_POST);
?>

 0) {

    $snEmail =  $_POST['exampleInputEmail1'];
    $snId = "doitforyou";
    $snGroup = "MASTER";
    $snSdate = date("YmdHis");

    echo "

"; echo "세션 ID : ".session_id(); echo "
"; echo "
저장할 이메일 : ".$snEmail; echo "
저장할 ID : ".$snId; echo "
저장할 그룹 : ".$snGroup; // 세션에 저장 $_SESSION['snEmail'] = $snEmail; $_SESSION['snId'] = $snId; $_SESSION['snGroup'] = $snGroup; $_SESSION['snSdate'] = $snSdate; echo "
세션생성완료"; $cookie_name = "cnEmail"; $cookie_value = $snEmail; setcookie($cookie_name, $cookie_value, time() + (86400 * 1), "/", "doitforyou.co.kr"); // 86400 = 1 day } ?> go to the next, sessionStep2 => CLICK


doitforyou.co.kr 도메인에서 cookie 적용됨


타도메인에서는 cookie 적용안됨


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

angularJS 사용하기  (0) 2018.04.01
json 데이타 사용하기  (0) 2018.03.28
Cookie 사용하기  (0) 2018.03.18
Session 사용하기  (0) 2018.03.17
반응형 웹개발 admin 페이지 step1  (0) 2018.03.04
PHP Programming 해보기  (0) 2018.03.02

 

1.    APM 설치

아파치 : httpd-2.4.27-Win64-VC15.zip

DB : mariadb-10.0.33-winx64.msi

언어 : php-7.1.7-Win32-VC14-x64.zip

DB연결 Tools : ToadforMySQL_Freeware_8.0.0.296

 

 

2.    APM setting
: apache, php
의 설정파일을 수정.

 

2.1. httpd.conf

설치된 로컬 경로로 수정.

C:\APMorg\Apache24\conf\httpd.conf 파일 편집

#######################################################

#

ServerRoot "c:/APMorg/Apache24"

 

#

DocumentRoot "c:/APMorg/Apache24/htdocs"

<Directory "c:/APMorg/Apache24/htdocs">

 

#

ScriptAlias /cgi-bin/ "c:/APMorg/Apache24/cgi-bin/"

 

<Directory "c:/APMorg/Apache24/cgi-bin">

    AllowOverride None

    Options None

    Require all granted

</Directory>

 

#--php.ini 파일을 c:\windows 폴더에 복사해 넣음(php.ini파일 편집 에서 재 확인)

 

PHPIniDir "C:/Windows"

LoadModule php7_module "C:/APMorg/php/php7apache2_4.dll"

 

#######################################################

 

2.2. php.ini

C:\APMorg\php\php.ini-development 파일 편집하여 라이브러리 사용 가능하도록 수정

 

; Directory in which the loadable extensions (modules) reside.

; http://php.net/extension-dir

extension_dir = "C:\APMorg\php\ext\"

 

;extension=php_exif.dll      ; Must be after mbstring as it depends on it

extension=php_mysqli.dll

;extension=php_pdo_firebird.dll

extension=php_pdo_mysql.dll

;extension=php_pdo_oci.dll

 

=> C:\Windows\php.ini 로 저장  

 

3.    Apache, PHP 구동확인

 

웹서버 경로 ( C:\APMorg\Apache24\htdocs ) 에서

phpinfo.php파일을 만들고

아래 script를 쳐주면

 

<?php

phpinfo();

?>

 

php가 연결된 여러 정보들이 list-up된다. 해당 정보를 잘 활용하면 환경세팅에 도움이 된다.   

   



 

4.    테스트 데이타

: Mariadb install => Database : mysql => Table : HELP_TOPIC

 

임시테이블로 생성후 진행

create table TMP_HELP as
select * from help_topic;

 

TMP_HELP 테이블 데이터로 CRUD 테스트 진행한다.

 

alter table TMP_HELP2 add PRIMARY KEY (`help_topic_id`); pk까지 생성한다.

 

 

5    프로그래밍 패턴

                   http://phpbridge.org/intro-to-php/ 를 기준으로 진행함.

            구글링 해서 찾은 강의 중에 가장 좋음.

          

            만든 결과물 : http://doitforyou.co.kr/test/public/

            


            

           

              



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

angularJS 사용하기  (0) 2018.04.01
json 데이타 사용하기  (0) 2018.03.28
Cookie 사용하기  (0) 2018.03.18
Session 사용하기  (0) 2018.03.17
반응형 웹개발 admin 페이지 step1  (0) 2018.03.04
PHP Programming 해보기  (0) 2018.03.02

+ Recent posts