PHP 샘플코드 - 파일입출력과 문자열 파싱

Posted by ironmask84
2017. 10. 17. 10:21 나는 프로그래머다!/PHP



C언어 버젼에 이어 PHP 버젼으로도 파일입출력과 문자열 파싱 들어갑니다!
http://ironmask.net/392 )

전반적으로 C언어와 비슷한데,

함수가 좀 더 사용성이 좋고, 다양한 느낌이 있습니다.

이용한 함수보다 더 다양하게 제공되는 함수들이 있으니,

간략하게 잘 정리된 블로그를 공유드립니다. ( http://slreference.tistory.com/8 )


주제 요약 설명

PHP 언어로 파일을 읽어와서

특정 키워드 를 포함하는 함수를 통해 값을 얻어오고,

특정 delimiter로 파싱해서 결과물을 얻는 코드 입니다.

주요 사용 함수는 fopen, fgets, parse_strisset, strchr, explode입니다.

프로그래밍 언어의 기본 문법과 함수에 대한 사용법을 어느 정도 숙지하신 것을 

기본 전제로 진행합니다. ^^


샘플 코드

아래 코드는 file을 읽어와서 내장함수 parse_str을 이용한 것입니다.

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
<?php
 
// form을 wifiSet.php로 보내서, 파일 저장
 
include "settings.php";
 
// wifi setting
$fp = fopen("wifisetting.txt""r+");
if (!$fp) {
    die("<br/>Failed to open file.");
    echo "<script> alert('Failed to open file.'); </script>";
}
 
// wifienable=0&networkName=1 형식의 문자열을 wifienable 변수 생성 후 0을 넣어주고, networkName변수 생성 후 1을 넣어주는 함수
parse_str(fgets($fp));
 
// 예외처리는 각 설정에 대한 변수가 있느냐?  isset() 함수 그리고 그 변수에 값이 있느냐?  empty() 함수 <- true/false 반환
// 예외에 걸리면, 보드에서 새로 값 가져오기? or 설정파일 다시 생성??
 
if(isset($wifienable)){    // 예외처리를 위한 $wifienable 변수 존재 여부
    $WIFI_Setting['wifienable'= $wifienable;
}
if(isset($networkName)){
    $WIFI_Setting['networkName'= $networkName;
}
if(isset($channelselect)){
    $WIFI_Setting['channelselect'= $channelselect;
}
 
fclose($fp);
 
?>
cs


아래는 웹에서 접근했을 때 외부프로그램인 윈도우에서 제공하는 ipconfig 명령어를 수행한 결과를

strchr과 explode를 이용해서 문자열을 파싱해서 값을 얻어오는 부분입니다.

1
2
3
4
5
6
7
8
9
10
11
<?php
 
    $data1 = iconv("EUC-KR""UTF-8", shell_exec("ipconfig"));    // ironmask unicode 문제 해결 2017-09-18
    $data1_token1 = strchr($data1"이더넷");  // 전체 문자열에서 '이더넷' 문자열이 나오는 부분부터 끝까지 값 복사
    $data1_token2 = strchr($data1_token1"IPv4 주소 . . . . . . . . . : ");
    $data1_token3 = explode(" "$data1_token2);    // delimiter로 문자열 자르기
    $data1_Ipv4 = explode("."$data1_token3[12]);    // 원하는 문자열 값 얻기
 
    echo $data1_Ipv4[0] . "." . $data1_Ipv4[1] . "." . $data1_Ipv4[2] . "." . $data1_Ipv4[3];  // IPv4 출력
    
?>
cs


아래는 위 소스에서 사용된 파일을 write하는 내용 입니다.

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
<?php
 
$wifienable = $_POST['wifienable']; // Radio Button
 
$networkName = $_POST['networkName'];                // check box
$networkName_count = count($_POST['networkName']);  // check box 에서 체크된 녀석 count
 
$channelselect = $_POST['channelselect']; // Select Button
 
 
$fp = fopen("wifisetting.txt""w+");
if (!$fp) {
    die("<br/>Failed to open file.");
    echo "<script> alert('Failed to open file.'); </script>";
}
fwrite($fp"wifienable=");
fwrite($fp$wifienable."&");
 
fwrite($fp"networkName=");
fwrite($fp$networkName_count."&"); // 우선은, 체크박스가 1개인 경우는 체크되면 1 아니면 0 
 
fwrite($fp"channelselect=");
fwrite($fp$channelselect);
fclose($fp);
 
echo "<script> window.open('wifi.php', '_self', ' '); </script>";
 
?>
cs




'나는 프로그래머다! > PHP' 카테고리의 다른 글

PHP와 Javascript 동작 개념  (0) 2017.10.17
 

C언어 샘플코드 - 파일입출력과 문자열 파싱

Posted by ironmask84
2017. 10. 17. 08:57 컴퓨터공학/C언어 레퍼런스



2년도 전에 타 블로거의 글을 참고해서 문자열함수에 대해 공유 드린적이 있었습니다.
( http://ironmask.net/198 )

내가 아닌 다른 분이  작성한 것을 참고하는 것은 역시 세월이 지나면,

참고할 때의 기억이 잘 안나는 것 같네요 ㅎㅎ

SW개발 업무를 맡고는 있지만 디버깅하는 업무가 많다보니,

코딩을 할 때 원하는 함수나 문법이 생각이 나지 않을 때가 종종 있습니다.

사실 다루는 프로그래밍 언어도 한 개에 국한되지 않으므로 더욱 혼잡함 ㅜㅜ

아무튼 그래서 기회되는 대로 샘플코드 형식으로 기록도 남기고,

방문자분들에게도 좋은 정보를 제공하도록 하겠습니다. :)


주제 요약 설명

C언어로 파일을 읽어와서

특정 키워드와 비교하는 조건문을 통해,

특정 delimiter로 파싱해서 결과물을 얻는 코드 입니다.

주요 사용 함수는 fopen, fgets, strncmp, strtok 입니다.

C언어의 기본 문법과 함수에 대한 사용법을 어느 정도 숙지하신 것을 

기본 전제로 진행합니다. ^^

샘플 코드

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
89
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/*
Start 2017-10-10
By ironmask 
*/
 
int main( int argc, char* argv[] )
{
    
    char* token;
    char* token2;
    
    char strline[100];    // one line sentence
    int i = 0;
    char* word = "iface eth0 inet static"// keyword
    
    FILE *fp = fopen("../../etc/network/interfaces""r+");
    
    if(fp == NULL){
        puts("FAIL");
        return -1;
    }
    
    
    while(fgets(strline, sizeof(strline), fp)) // 한줄을 읽는데 size 만큼 읽는다.
    {     
        // interfaces File 내에 특정 키워드 찾기
        if(strncmp(strline, word, strlen(word) ) == 0)
        {
            // address
            fgets(strline, sizeof(strline), fp);
            
            token = strtok(strline, " ");    // 공백을 delimiter 기준으로 자르기
            token = strtok(NULL" "); // 더 이상 문자열이 없으면 NULL을 반환
            token[strlen(token)-1= '\0';    // gets 함수는 마지막에 \n이 들어가므로 이를 제거하기 위해 널값 삽입
            printf("%s\n", token);
            
            // netmask
            fgets(strline, sizeof(strline), fp);
            
            token = strtok(strline, " ");    
            token = strtok(NULL" "); 
            token[strlen(token)-1= '\0';
            printf("%s\n", token);
            
            // broadcast
            fgets(strline, sizeof(strline), fp);
            
            token = strtok(strline, " ");    
            token = strtok(NULL" "); 
            token[strlen(token)-1= '\0';
            printf("%s\n", token);
                
            // network
            fgets(strline, sizeof(strline), fp);
            
            token = strtok(strline, " ");    
            token = strtok(NULL" "); 
            token[strlen(token)-1= '\0';
            printf("%s\n", token);
            /*
            token2 = strtok(token, ".");
            printf("%s\n", token2);
            token2 = strtok(NULL, "."); 
            printf("%s\n", token2);
            token2 = strtok(NULL, "."); 
            printf("%s\n", token2);
            token2 = strtok(NULL, "."); 
            printf("%s\n", token2);
            */
            
        }    
    
    //    memset( &strline, 0, sizeof(strline) );
    //    printf("hello\n");
    }    
    
    fclose(fp);
    return 0 ;
}
cs


아래는 위 소스에서 사용된 interfaces 파일 내용 입니다.

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
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
 
# The loopback interface
auto lo
iface lo inet loopback
 
# Wireless interfaces
iface wlan0 inet dhcp
        wireless_mode managed
        wireless_essid any
        wpa-driver wext
        wpa-conf /etc/wpa_supplicant.conf
 
iface atml0 inet dhcp
 
# Wired or wireless interfaces
allow-hotplug eth0
auto eth0
iface eth0 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        broadcast 192.168.0.255
        network 192.168.0.0
        up /etc/network/if-up.d/eth0-up.sh
 
allow-hotplug eth1
auto eth1
iface eth1 inet static
        address 10.104.91.15
        netmask 255.255.255.0
        network 10.104.91.0
        gateway 10.104.91.1
        dns-nameserver 156.147.19.132
        up /etc/network/if-up.d/eth1-up-nat.sh
        down /etc/network/if-post-down.d/eth1-down-nat.sh
cs