웹 프로그램 제작 중에 관리자 모드에서 변경이 가능한 설정들 저장 방식을
DB로 할 것인가 파일로 할 것인가 고민하다가 파일쪽으로 눈을 돌렸습니다.
제가 고민이였던 부분은 파일로 할 경우
예를 들어 관리자 모드에서 설정을 변경하여
config.php에 "<?php $config = TRUE ?>" 내용을 저장할 경우
파일에 내용을 쓰는 도중에 "<?php $conf"까지 입력하였는데
갑자기 다른 페이지에서 config.php 파일 요청이 들어올 경우
쓰다가 만 파일을 읽어와 구문 오류로 인하여 페이지 자체가 보이지 않을까하는 불안감이 있었습니다.
직접 2개의 파일로 테스트를 해보았습니다.
-- index.php --
<?php
set_time_limit(5);
for ($i = 1; $i <= 100000000; $i++)
{
include './config.php';
}
-- save.php --
<?php
sleep(3);
$str = 'testa';
$str = str_pad($str, 11111111, "_");
$fp = fopen('./config.php', 'w');
fwrite($fp, "<?php \necho '<br>'.\$i;\n\"{$str}\";");
fclose($fp);
save.php 파일을 실행시키고 index.php에서 지속적으로 config.php을 불러올 경우
테스트를 해보니 다행이도 구문 오류는 나지 않고 타임아웃만 났습니다.
여러대의 서버를 묶어서 쓰거나 이런 경우는 테스트를 해보지 않았습니다만...
다행이 OS단에서 처리하는 것 같습니다 ^^....
이왕 테스트하는 김에 이번엔 내용 문자를 2개로 나눠서
fwrite() 함수를 2번 실행시키게 하였습니다.
-- save2.php --
<?php
sleep(3);
$str = 'testa';
$str = str_pad($str, 11111111, "_");
$fp = fopen('./config.php', 'w');
fwrite($fp, "<?php \necho '<br>'.\$i;\n\"");
fwrite($fp, "{$str}\";");
fclose($fp);
내용을 보면 첫번째 fwrite()만 작동시켰을 경우 구문 오류가 나도록 고치고
두번째 fwrite()에서 나머지 내용을 쓰도록 하였습니다.
fwrite()을 두번 실행시켰을 경우 그 사이에 다른 파일의 요청이 들어올 경우
가져갈 수 있었습니다....
실행시 문법 오류가 있었습니다.....
결론
1. 한번에 fwrite()을 쓸 것
2. fwrite()로 파일을 쓰는 짧은 시간동안은 외부에서 긁어가지 못함.
DB로 할 것인가 파일로 할 것인가 고민하다가 파일쪽으로 눈을 돌렸습니다.
제가 고민이였던 부분은 파일로 할 경우
예를 들어 관리자 모드에서 설정을 변경하여
config.php에 "<?php $config = TRUE ?>" 내용을 저장할 경우
파일에 내용을 쓰는 도중에 "<?php $conf"까지 입력하였는데
갑자기 다른 페이지에서 config.php 파일 요청이 들어올 경우
쓰다가 만 파일을 읽어와 구문 오류로 인하여 페이지 자체가 보이지 않을까하는 불안감이 있었습니다.
직접 2개의 파일로 테스트를 해보았습니다.
-- index.php --
<?php
set_time_limit(5);
for ($i = 1; $i <= 100000000; $i++)
{
include './config.php';
}
-- save.php --
<?php
sleep(3);
$str = 'testa';
$str = str_pad($str, 11111111, "_");
$fp = fopen('./config.php', 'w');
fwrite($fp, "<?php \necho '<br>'.\$i;\n\"{$str}\";");
fclose($fp);
save.php 파일을 실행시키고 index.php에서 지속적으로 config.php을 불러올 경우
테스트를 해보니 다행이도 구문 오류는 나지 않고 타임아웃만 났습니다.
여러대의 서버를 묶어서 쓰거나 이런 경우는 테스트를 해보지 않았습니다만...
다행이 OS단에서 처리하는 것 같습니다 ^^....
이왕 테스트하는 김에 이번엔 내용 문자를 2개로 나눠서
fwrite() 함수를 2번 실행시키게 하였습니다.
-- save2.php --
<?php
sleep(3);
$str = 'testa';
$str = str_pad($str, 11111111, "_");
$fp = fopen('./config.php', 'w');
fwrite($fp, "<?php \necho '<br>'.\$i;\n\"");
fwrite($fp, "{$str}\";");
fclose($fp);
내용을 보면 첫번째 fwrite()만 작동시켰을 경우 구문 오류가 나도록 고치고
두번째 fwrite()에서 나머지 내용을 쓰도록 하였습니다.
fwrite()을 두번 실행시켰을 경우 그 사이에 다른 파일의 요청이 들어올 경우
가져갈 수 있었습니다....
실행시 문법 오류가 있었습니다.....
결론
1. 한번에 fwrite()을 쓸 것
2. fwrite()로 파일을 쓰는 짧은 시간동안은 외부에서 긁어가지 못함.
댓글 1개
14년 전
보통 이런 경우
임시 파일에 먼저 내용을 저장하고
rename 으로 파일을 변경시켜주는게 더 유용했던 것 같습니다.
임시 파일에 먼저 내용을 저장하고
rename 으로 파일을 변경시켜주는게 더 유용했던 것 같습니다.
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 4030 | 14년 전 | 2113 | ||
| 4029 |
|
14년 전 | 710 | |
| 4028 | 14년 전 | 3621 | ||
| 4027 | 14년 전 | 3751 | ||
| 4026 |
techer
|
14년 전 | 1126 | |
| 4025 |
techer
|
14년 전 | 690 | |
| 4024 | 14년 전 | 1361 | ||
| 4023 | 14년 전 | 603 | ||
| 4022 | 14년 전 | 925 | ||
| 4021 | 14년 전 | 515 | ||
| 4020 | 14년 전 | 7341 | ||
| 4019 | 14년 전 | 1030 | ||
| 4018 | 14년 전 | 448 | ||
| 4017 | 14년 전 | 604 | ||
| 4016 | 14년 전 | 1304 | ||
| 4015 | 14년 전 | 734 | ||
| 4014 | 14년 전 | 567 | ||
| 4013 | 14년 전 | 689 | ||
| 4012 | 14년 전 | 618 | ||
| 4011 |
브라운벤취
|
14년 전 | 427 | |
| 4010 |
크라잉감튀
|
14년 전 | 595 | |
| 4009 | 14년 전 | 575 | ||
| 4008 | 14년 전 | 565 | ||
| 4007 | 14년 전 | 642 | ||
| 4006 |
네비플러스
|
14년 전 | 881 | |
| 4005 | 14년 전 | 899 | ||
| 4004 | 14년 전 | 1121 | ||
| 4003 | 14년 전 | 782 | ||
| 4002 |
핑크스파이더
|
14년 전 | 701 | |
| 4001 | 14년 전 | 580 | ||
| 4000 |
BYongLuv
|
14년 전 | 551 | |
| 3999 |
xxbobo
|
14년 전 | 535 | |
| 3998 | 14년 전 | 715 | ||
| 3997 | 14년 전 | 1934 | ||
| 3996 | 14년 전 | 585 | ||
| 3995 | 14년 전 | 912 | ||
| 3994 |
asdfdasfddd
|
14년 전 | 2083 | |
| 3993 | 14년 전 | 1185 | ||
| 3992 | 14년 전 | 959 | ||
| 3991 | 14년 전 | 4695 | ||
| 3990 |
Torrious
|
14년 전 | 1901 | |
| 3989 | 14년 전 | 770 | ||
| 3988 |
내꿈은대통령
|
14년 전 | 640 | |
| 3987 | 14년 전 | 618 | ||
| 3986 |
|
14년 전 | 482 | |
| 3985 | 14년 전 | 1741 | ||
| 3984 | 14년 전 | 3059 | ||
| 3983 | 14년 전 | 555 | ||
| 3982 | 14년 전 | 751 | ||
| 3981 | 14년 전 | 1733 | ||
| 3980 | 14년 전 | 604 | ||
| 3979 |
AMDbest
|
14년 전 | 1258 | |
| 3978 |
leadK
|
14년 전 | 1604 | |
| 3977 |
좋은천사7
|
14년 전 | 10391 | |
| 3976 |
좋은천사7
|
14년 전 | 1129 | |
| 3975 |
좋은천사7
|
14년 전 | 945 | |
| 3974 |
좋은천사7
|
14년 전 | 1660 | |
| 3973 |
좋은천사7
|
14년 전 | 1695 | |
| 3972 |
좋은천사7
|
14년 전 | 871 | |
| 3971 |
김준수사랑
|
14년 전 | 973 | |
| 3970 |
레인보우1492
|
14년 전 | 789 | |
| 3969 | 14년 전 | 2424 | ||
| 3968 | 14년 전 | 588 | ||
| 3967 | 14년 전 | 731 | ||
| 3966 | 14년 전 | 1789 | ||
| 3965 | 14년 전 | 2075 | ||
| 3964 |
방황하는중년
|
14년 전 | 516 | |
| 3963 |
네비플러스
|
14년 전 | 901 | |
| 3962 | 14년 전 | 679 | ||
| 3961 | 14년 전 | 733 | ||
| 3960 | 14년 전 | 929 | ||
| 3959 | 14년 전 | 742 | ||
| 3958 |
techer
|
14년 전 | 655 | |
| 3957 |
techer
|
14년 전 | 469 | |
| 3956 |
techer
|
14년 전 | 443 | |
| 3955 |
techer
|
14년 전 | 675 | |
| 3954 |
8제임스8
|
14년 전 | 827 | |
| 3953 |
구름1354
|
14년 전 | 646 | |
| 3952 |
8제임스8
|
14년 전 | 620 | |
| 3951 | 14년 전 | 2443 | ||
| 3950 | 14년 전 | 956 | ||
| 3949 | 14년 전 | 1109 | ||
| 3948 | 14년 전 | 1082 | ||
| 3947 | 14년 전 | 1512 | ||
| 3946 |
|
14년 전 | 1902 | |
| 3945 | 14년 전 | 602 | ||
| 3944 |
|
14년 전 | 781 | |
| 3943 | 14년 전 | 1817 | ||
| 3942 | 14년 전 | 806 | ||
| 3941 | 14년 전 | 2106 | ||
| 3940 |
내일은없다
|
14년 전 | 593 | |
| 3939 | 14년 전 | 788 | ||
| 3938 | 14년 전 | 898 | ||
| 3937 | 14년 전 | 2016 | ||
| 3936 | 14년 전 | 838 | ||
| 3935 | 14년 전 | 3201 | ||
| 3934 | 14년 전 | 973 | ||
| 3933 | 14년 전 | 500 | ||
| 3932 | 14년 전 | 829 | ||
| 3931 |
Jos87
|
14년 전 | 679 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기