웹 프로그램 제작 중에 관리자 모드에서 변경이 가능한 설정들 저장 방식을
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개
13년 전
보통 이런 경우
임시 파일에 먼저 내용을 저장하고
rename 으로 파일을 변경시켜주는게 더 유용했던 것 같습니다.
임시 파일에 먼저 내용을 저장하고
rename 으로 파일을 변경시켜주는게 더 유용했던 것 같습니다.
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 4430 | 13년 전 | 825 | ||
| 4429 | 13년 전 | 1148 | ||
| 4428 | 13년 전 | 1940 | ||
| 4427 | 13년 전 | 1059 | ||
| 4426 | 13년 전 | 521 | ||
| 4425 | 13년 전 | 9876 | ||
| 4424 |
|
13년 전 | 839 | |
| 4423 |
|
13년 전 | 708 | |
| 4422 |
aequum
|
13년 전 | 1287 | |
| 4421 | 13년 전 | 2411 | ||
| 4420 | 13년 전 | 1204 | ||
| 4419 | 13년 전 | 889 | ||
| 4418 |
한번잘해보자
|
13년 전 | 671 | |
| 4417 | 13년 전 | 1579 | ||
| 4416 | 13년 전 | 871 | ||
| 4415 | 13년 전 | 2249 | ||
| 4414 | 13년 전 | 679 | ||
| 4413 | 13년 전 | 677 | ||
| 4412 | 13년 전 | 817 | ||
| 4411 | 13년 전 | 1437 | ||
| 4410 |
|
13년 전 | 695 | |
| 4409 | 13년 전 | 2165 | ||
| 4408 |
visualp
|
13년 전 | 531 | |
| 4407 |
visualp
|
13년 전 | 3087 | |
| 4406 |
visualp
|
13년 전 | 3253 | |
| 4405 |
visualp
|
13년 전 | 3152 | |
| 4404 |
visualp
|
13년 전 | 2977 | |
| 4403 |
|
13년 전 | 666 | |
| 4402 |
gender
|
13년 전 | 622 | |
| 4401 | 13년 전 | 1112 | ||
| 4400 |
aequum
|
13년 전 | 1379 | |
| 4399 | 13년 전 | 586 | ||
| 4398 | 13년 전 | 668 | ||
| 4397 |
|
13년 전 | 580 | |
| 4396 |
aequum
|
13년 전 | 4659 | |
| 4395 |
|
13년 전 | 550 | |
| 4394 |
aequum
|
13년 전 | 4931 | |
| 4393 |
|
13년 전 | 1264 | |
| 4392 | 13년 전 | 1053 | ||
| 4391 |
mirrV
|
13년 전 | 530 | |
| 4390 |
파워웹프로
|
13년 전 | 702 | |
| 4389 | 13년 전 | 1224 | ||
| 4388 |
Coding
|
13년 전 | 701 | |
| 4387 |
aequum
|
13년 전 | 1360 | |
| 4386 | 13년 전 | 868 | ||
| 4385 | 13년 전 | 722 | ||
| 4384 | 13년 전 | 786 | ||
| 4383 | 13년 전 | 2899 | ||
| 4382 | 13년 전 | 606 | ||
| 4381 | 13년 전 | 1170 | ||
| 4380 | 13년 전 | 803 | ||
| 4379 |
|
13년 전 | 746 | |
| 4378 | 13년 전 | 663 | ||
| 4377 | 13년 전 | 3300 | ||
| 4376 |
aequum
|
13년 전 | 1214 | |
| 4375 |
클로로다인
|
13년 전 | 648 | |
| 4374 |
DDFACTORY
|
13년 전 | 719 | |
| 4373 |
까탈스런ET
|
13년 전 | 705 | |
| 4372 | 13년 전 | 802 | ||
| 4371 | 13년 전 | 566 | ||
| 4370 |
|
13년 전 | 644 | |
| 4369 |
프리프리닷
|
13년 전 | 1302 | |
| 4368 | 13년 전 | 3166 | ||
| 4367 |
soing
|
13년 전 | 1575 | |
| 4366 |
|
13년 전 | 683 | |
| 4365 |
|
13년 전 | 622 | |
| 4364 |
|
13년 전 | 757 | |
| 4363 |
|
13년 전 | 622 | |
| 4362 |
|
13년 전 | 727 | |
| 4361 |
|
13년 전 | 842 | |
| 4360 |
|
13년 전 | 650 | |
| 4359 |
|
13년 전 | 3124 | |
| 4358 |
|
13년 전 | 3038 | |
| 4357 | 13년 전 | 841 | ||
| 4356 | 13년 전 | 1340 | ||
| 4355 | 13년 전 | 965 | ||
| 4354 | 13년 전 | 814 | ||
| 4353 | 13년 전 | 3372 | ||
| 4352 | 13년 전 | 2374 | ||
| 4351 | 13년 전 | 1960 | ||
| 4350 |
|
13년 전 | 1877 | |
| 4349 | 13년 전 | 650 | ||
| 4348 |
aequum
|
13년 전 | 1409 | |
| 4347 | 13년 전 | 658 | ||
| 4346 |
|
13년 전 | 565 | |
| 4345 | 13년 전 | 597 | ||
| 4344 |
aequum
|
13년 전 | 1003 | |
| 4343 |
|
13년 전 | 1038 | |
| 4342 |
aequum
|
13년 전 | 1629 | |
| 4341 | 13년 전 | 800 | ||
| 4340 |
2번호랑이
|
13년 전 | 1001 | |
| 4339 |
|
13년 전 | 1168 | |
| 4338 | 13년 전 | 1163 | ||
| 4337 | 13년 전 | 519 | ||
| 4336 |
aequum
|
13년 전 | 1705 | |
| 4335 | 13년 전 | 885 | ||
| 4334 | 13년 전 | 1184 | ||
| 4333 |
Sturmvogel
|
13년 전 | 960 | |
| 4332 |
aequum
|
13년 전 | 1281 | |
| 4331 |
aequum
|
13년 전 | 1396 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기